diff options
author | Lunny Xiao <xiaolunwen@gmail.com> | 2022-03-29 22:16:31 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-03-29 22:16:31 +0800 |
commit | bd97736b9c7a16023bc9abf17be6157284f655b1 (patch) | |
tree | eea5870d406bd00fa2e675901f24d9f1fbf1796f /models/project_issue.go | |
parent | ea6efba9b3fd298c842a935266060e405e2ae4a3 (diff) | |
download | gitea-bd97736b9c7a16023bc9abf17be6157284f655b1.tar.gz gitea-bd97736b9c7a16023bc9abf17be6157284f655b1.zip |
Move project files into models/project sub package (#17704)
* Move project files into models/project sub package
* Fix test
* Fix test
* Fix test
* Fix build
* Fix test
* Fix template bug
* Fix bug
* Fix lint
* Fix test
* Fix import
* Improve codes
Co-authored-by: 6543 <6543@obermui.de>
Diffstat (limited to 'models/project_issue.go')
-rw-r--r-- | models/project_issue.go | 218 |
1 files changed, 0 insertions, 218 deletions
diff --git a/models/project_issue.go b/models/project_issue.go deleted file mode 100644 index c7735addcc..0000000000 --- a/models/project_issue.go +++ /dev/null @@ -1,218 +0,0 @@ -// Copyright 2020 The Gitea Authors. All rights reserved. -// Use of this source code is governed by a MIT-style -// license that can be found in the LICENSE file. - -package models - -import ( - "context" - "fmt" - - "code.gitea.io/gitea/models/db" - user_model "code.gitea.io/gitea/models/user" -) - -// ProjectIssue saves relation from issue to a project -type ProjectIssue struct { - ID int64 `xorm:"pk autoincr"` - IssueID int64 `xorm:"INDEX"` - ProjectID int64 `xorm:"INDEX"` - - // If 0, then it has not been added to a specific board in the project - ProjectBoardID int64 `xorm:"INDEX"` - Sorting int64 `xorm:"NOT NULL DEFAULT 0"` -} - -func init() { - db.RegisterModel(new(ProjectIssue)) -} - -func deleteProjectIssuesByProjectID(e db.Engine, projectID int64) error { - _, err := e.Where("project_id=?", projectID).Delete(&ProjectIssue{}) - return err -} - -// ___ -// |_ _|___ ___ _ _ ___ -// | |/ __/ __| | | |/ _ \ -// | |\__ \__ \ |_| | __/ -// |___|___/___/\__,_|\___| - -// LoadProject load the project the issue was assigned to -func (i *Issue) LoadProject() (err error) { - return i.loadProject(db.GetEngine(db.DefaultContext)) -} - -func (i *Issue) loadProject(e db.Engine) (err error) { - if i.Project == nil { - var p Project - if _, err = e.Table("project"). - Join("INNER", "project_issue", "project.id=project_issue.project_id"). - Where("project_issue.issue_id = ?", i.ID). - Get(&p); err != nil { - return err - } - i.Project = &p - } - return -} - -// ProjectID return project id if issue was assigned to one -func (i *Issue) ProjectID() int64 { - return i.projectID(db.GetEngine(db.DefaultContext)) -} - -func (i *Issue) projectID(e db.Engine) int64 { - var ip ProjectIssue - has, err := e.Where("issue_id=?", i.ID).Get(&ip) - if err != nil || !has { - return 0 - } - return ip.ProjectID -} - -// ProjectBoardID return project board id if issue was assigned to one -func (i *Issue) ProjectBoardID() int64 { - return i.projectBoardID(db.GetEngine(db.DefaultContext)) -} - -func (i *Issue) projectBoardID(e db.Engine) int64 { - var ip ProjectIssue - has, err := e.Where("issue_id=?", i.ID).Get(&ip) - if err != nil || !has { - return 0 - } - return ip.ProjectBoardID -} - -// ____ _ _ -// | _ \ _ __ ___ (_) ___ ___| |_ -// | |_) | '__/ _ \| |/ _ \/ __| __| -// | __/| | | (_) | | __/ (__| |_ -// |_| |_| \___// |\___|\___|\__| -// |__/ - -// NumIssues return counter of all issues assigned to a project -func (p *Project) NumIssues() int { - c, err := db.GetEngine(db.DefaultContext).Table("project_issue"). - Where("project_id=?", p.ID). - GroupBy("issue_id"). - Cols("issue_id"). - Count() - if err != nil { - return 0 - } - return int(c) -} - -// NumClosedIssues return counter of closed issues assigned to a project -func (p *Project) NumClosedIssues() int { - c, err := db.GetEngine(db.DefaultContext).Table("project_issue"). - Join("INNER", "issue", "project_issue.issue_id=issue.id"). - Where("project_issue.project_id=? AND issue.is_closed=?", p.ID, true). - Cols("issue_id"). - Count() - if err != nil { - return 0 - } - return int(c) -} - -// NumOpenIssues return counter of open issues assigned to a project -func (p *Project) NumOpenIssues() int { - c, err := db.GetEngine(db.DefaultContext).Table("project_issue"). - Join("INNER", "issue", "project_issue.issue_id=issue.id"). - Where("project_issue.project_id=? AND issue.is_closed=?", p.ID, false). - Cols("issue_id"). - Count() - if err != nil { - return 0 - } - return int(c) -} - -// ChangeProjectAssign changes the project associated with an issue -func ChangeProjectAssign(issue *Issue, doer *user_model.User, newProjectID int64) error { - ctx, committer, err := db.TxContext() - if err != nil { - return err - } - defer committer.Close() - - if err := addUpdateIssueProject(ctx, issue, doer, newProjectID); err != nil { - return err - } - - return committer.Commit() -} - -func addUpdateIssueProject(ctx context.Context, issue *Issue, doer *user_model.User, newProjectID int64) error { - e := db.GetEngine(ctx) - oldProjectID := issue.projectID(e) - - if _, err := e.Where("project_issue.issue_id=?", issue.ID).Delete(&ProjectIssue{}); err != nil { - return err - } - - if err := issue.loadRepo(ctx); err != nil { - return err - } - - if oldProjectID > 0 || newProjectID > 0 { - if _, err := createComment(ctx, &CreateCommentOptions{ - Type: CommentTypeProject, - Doer: doer, - Repo: issue.Repo, - Issue: issue, - OldProjectID: oldProjectID, - ProjectID: newProjectID, - }); err != nil { - return err - } - } - - _, err := e.Insert(&ProjectIssue{ - IssueID: issue.ID, - ProjectID: newProjectID, - }) - return err -} - -// ____ _ _ ____ _ -// | _ \ _ __ ___ (_) ___ ___| |_| __ ) ___ __ _ _ __ __| | -// | |_) | '__/ _ \| |/ _ \/ __| __| _ \ / _ \ / _` | '__/ _` | -// | __/| | | (_) | | __/ (__| |_| |_) | (_) | (_| | | | (_| | -// |_| |_| \___// |\___|\___|\__|____/ \___/ \__,_|_| \__,_| -// |__/ - -// MoveIssuesOnProjectBoard moves or keeps issues in a column and sorts them inside that column -func MoveIssuesOnProjectBoard(board *ProjectBoard, sortedIssueIDs map[int64]int64) error { - return db.WithTx(func(ctx context.Context) error { - sess := db.GetEngine(ctx) - - issueIDs := make([]int64, 0, len(sortedIssueIDs)) - for _, issueID := range sortedIssueIDs { - issueIDs = append(issueIDs, issueID) - } - count, err := sess.Table(new(ProjectIssue)).Where("project_id=?", board.ProjectID).In("issue_id", issueIDs).Count() - if err != nil { - return err - } - if int(count) != len(sortedIssueIDs) { - return fmt.Errorf("all issues have to be added to a project first") - } - - for sorting, issueID := range sortedIssueIDs { - _, err = sess.Exec("UPDATE `project_issue` SET project_board_id=?, sorting=? WHERE issue_id=?", board.ID, sorting, issueID) - if err != nil { - return err - } - } - return nil - }) -} - -func (pb *ProjectBoard) removeIssues(e db.Engine) error { - _, err := e.Exec("UPDATE `project_issue` SET project_board_id = 0, sorting = 0 WHERE project_board_id = ? ", pb.ID) - return err -} |