From e6113000c5cbbdbf10af7bda472fc8b254ec7605 Mon Sep 17 00:00:00 2001 From: Lunny Xiao Date: Mon, 30 Sep 2019 21:50:44 +0800 Subject: [PATCH] Extract actions on new issue from models to services (#8217) * extract actions on new issue from models to services * improve code * rename services/issues to services/issue --- models/issue.go | 25 ------------------- routers/api/v1/repo/issue.go | 3 ++- routers/repo/issue.go | 3 ++- services/issue/issue.go | 47 ++++++++++++++++++++++++++++++++++++ 4 files changed, 51 insertions(+), 27 deletions(-) create mode 100644 services/issue/issue.go diff --git a/models/issue.go b/models/issue.go index 77712c0fe..da98fac7d 100644 --- a/models/issue.go +++ b/models/issue.go @@ -1225,31 +1225,6 @@ func NewIssue(repo *Repository, issue *Issue, labelIDs []int64, assigneeIDs []in } sess.Close() - if err = NotifyWatchers(&Action{ - ActUserID: issue.Poster.ID, - ActUser: issue.Poster, - OpType: ActionCreateIssue, - Content: fmt.Sprintf("%d|%s", issue.Index, issue.Title), - RepoID: repo.ID, - Repo: repo, - IsPrivate: repo.IsPrivate, - }); err != nil { - log.Error("NotifyWatchers: %v", err) - } - - mode, _ := AccessLevel(issue.Poster, issue.Repo) - if err = PrepareWebhooks(repo, HookEventIssues, &api.IssuePayload{ - Action: api.HookIssueOpened, - Index: issue.Index, - Issue: issue.APIFormat(), - Repository: repo.APIFormat(mode), - Sender: issue.Poster.APIFormat(), - }); err != nil { - log.Error("PrepareWebhooks: %v", err) - } else { - go HookQueue.Add(issue.RepoID) - } - return nil } diff --git a/routers/api/v1/repo/issue.go b/routers/api/v1/repo/issue.go index 6f502a5ab..aab167bc6 100644 --- a/routers/api/v1/repo/issue.go +++ b/routers/api/v1/repo/issue.go @@ -19,6 +19,7 @@ import ( api "code.gitea.io/gitea/modules/structs" "code.gitea.io/gitea/modules/timeutil" "code.gitea.io/gitea/modules/util" + issue_service "code.gitea.io/gitea/services/issue" milestone_service "code.gitea.io/gitea/services/milestone" ) @@ -217,7 +218,7 @@ func CreateIssue(ctx *context.APIContext, form api.CreateIssueOption) { form.Labels = make([]int64, 0) } - if err := models.NewIssue(ctx.Repo.Repository, issue, form.Labels, assigneeIDs, nil); err != nil { + if err := issue_service.NewIssue(ctx.Repo.Repository, issue, form.Labels, assigneeIDs, nil); err != nil { if models.IsErrUserDoesNotHaveAccessToRepo(err) { ctx.Error(400, "UserDoesNotHaveAccessToRepo", err) return diff --git a/routers/repo/issue.go b/routers/repo/issue.go index 1be0b408a..e4ef3b1db 100644 --- a/routers/repo/issue.go +++ b/routers/repo/issue.go @@ -27,6 +27,7 @@ import ( api "code.gitea.io/gitea/modules/structs" "code.gitea.io/gitea/modules/util" comment_service "code.gitea.io/gitea/services/comments" + issue_service "code.gitea.io/gitea/services/issue" milestone_service "code.gitea.io/gitea/services/milestone" "github.com/unknwon/com" @@ -571,7 +572,7 @@ func NewIssuePost(ctx *context.Context, form auth.CreateIssueForm) { Content: form.Content, Ref: form.Ref, } - if err := models.NewIssue(repo, issue, labelIDs, assigneeIDs, attachments); err != nil { + if err := issue_service.NewIssue(repo, issue, labelIDs, assigneeIDs, attachments); err != nil { if models.IsErrUserDoesNotHaveAccessToRepo(err) { ctx.Error(400, "UserDoesNotHaveAccessToRepo", err.Error()) return diff --git a/services/issue/issue.go b/services/issue/issue.go new file mode 100644 index 000000000..5afdfc990 --- /dev/null +++ b/services/issue/issue.go @@ -0,0 +1,47 @@ +// 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 ( + "fmt" + + "code.gitea.io/gitea/models" + "code.gitea.io/gitea/modules/log" + api "code.gitea.io/gitea/modules/structs" +) + +// NewIssue creates new issue with labels for repository. +func NewIssue(repo *models.Repository, issue *models.Issue, labelIDs []int64, assigneeIDs []int64, uuids []string) error { + if err := models.NewIssue(repo, issue, labelIDs, assigneeIDs, uuids); err != nil { + return err + } + + if err := models.NotifyWatchers(&models.Action{ + ActUserID: issue.Poster.ID, + ActUser: issue.Poster, + OpType: models.ActionCreateIssue, + Content: fmt.Sprintf("%d|%s", issue.Index, issue.Title), + RepoID: repo.ID, + Repo: repo, + IsPrivate: repo.IsPrivate, + }); err != nil { + log.Error("NotifyWatchers: %v", err) + } + + mode, _ := models.AccessLevel(issue.Poster, issue.Repo) + if err := models.PrepareWebhooks(repo, models.HookEventIssues, &api.IssuePayload{ + Action: api.HookIssueOpened, + Index: issue.Index, + Issue: issue.APIFormat(), + Repository: repo.APIFormat(mode), + Sender: issue.Poster.APIFormat(), + }); err != nil { + log.Error("PrepareWebhooks: %v", err) + } else { + go models.HookQueue.Add(issue.RepoID) + } + + return nil +}