summaryrefslogtreecommitdiffstats
path: root/services/issue/assignee.go
diff options
context:
space:
mode:
authorLunny Xiao <xiaolunwen@gmail.com>2019-10-28 10:11:50 +0800
committerGitHub <noreply@github.com>2019-10-28 10:11:50 +0800
commit495d5e4329326b27158a25b44c37986923d0bb6b (patch)
treefa8474775eb9a1bdb11380ca17a9ca42a991fcb3 /services/issue/assignee.go
parent018b0e818038f3c38cc6bfc96fadeb25c92380e6 (diff)
downloadgitea-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.go53
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
+}