diff options
author | Lunny Xiao <xiaolunwen@gmail.com> | 2019-10-28 10:11:50 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-10-28 10:11:50 +0800 |
commit | 495d5e4329326b27158a25b44c37986923d0bb6b (patch) | |
tree | fa8474775eb9a1bdb11380ca17a9ca42a991fcb3 /services/issue/assignee.go | |
parent | 018b0e818038f3c38cc6bfc96fadeb25c92380e6 (diff) | |
download | gitea-495d5e4329326b27158a25b44c37986923d0bb6b.tar.gz gitea-495d5e4329326b27158a25b44c37986923d0bb6b.zip |
Move more issue assignee code from models to issue service (#8690)
* Move more issue assignee code from models to issue service
* fix test
Diffstat (limited to 'services/issue/assignee.go')
-rw-r--r-- | services/issue/assignee.go | 53 |
1 files changed, 53 insertions, 0 deletions
diff --git a/services/issue/assignee.go b/services/issue/assignee.go new file mode 100644 index 0000000000..281f824da7 --- /dev/null +++ b/services/issue/assignee.go @@ -0,0 +1,53 @@ +// Copyright 2019 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 issue + +import ( + "code.gitea.io/gitea/models" + "code.gitea.io/gitea/modules/notification" +) + +// DeleteNotPassedAssignee deletes all assignees who aren't passed via the "assignees" array +func DeleteNotPassedAssignee(issue *models.Issue, doer *models.User, assignees []*models.User) (err error) { + var found bool + + for _, assignee := range issue.Assignees { + + found = false + for _, alreadyAssignee := range assignees { + if assignee.ID == alreadyAssignee.ID { + found = true + break + } + } + + if !found { + // This function also does comments and hooks, which is why we call it seperatly instead of directly removing the assignees here + if _, _, err := ToggleAssignee(issue, doer, assignee.ID); err != nil { + return err + } + } + } + + return nil +} + +// ToggleAssignee changes a user between assigned and not assigned for this issue, and make issue comment for it. +func ToggleAssignee(issue *models.Issue, doer *models.User, assigneeID int64) (removed bool, comment *models.Comment, err error) { + removed, comment, err = issue.ToggleAssignee(doer, assigneeID) + if err != nil { + return + } + + assignee, err1 := models.GetUserByID(assigneeID) + if err1 != nil { + err = err1 + return + } + + notification.NotifyIssueChangeAssignee(doer, issue, assignee, removed, comment) + + return +} |