@@ -64,6 +64,46 @@ func NewPullRequest(ctx context.Context, opts *NewPullRequestOptions) error {
6464 return user_model .ErrBlockedUser
6565 }
6666
67+ // check if reviewers are valid
68+ if len (opts .Reviewers ) > 0 {
69+ allowedUsers , err := GetReviewers (ctx , repo , pr .Issue .PosterID , pr .Issue .PosterID )
70+ if err != nil {
71+ return err
72+ }
73+ for _ , reviewer := range opts .Reviewers {
74+ var found bool
75+ for _ , allowedUser := range allowedUsers {
76+ if allowedUser .ID == reviewer .ID {
77+ found = true
78+ break
79+ }
80+ }
81+ if ! found {
82+ return issues_model.ErrNotValidReviewRequest {UserID : reviewer .ID }
83+ }
84+ }
85+ }
86+
87+ // check if team reviewers are valid
88+ if len (opts .TeamReviewers ) > 0 {
89+ allowedTeams , err := GetReviewerTeams (ctx , repo )
90+ if err != nil {
91+ return err
92+ }
93+ for _ , teamReviewer := range opts .TeamReviewers {
94+ var found bool
95+ for _ , allowedTeam := range allowedTeams {
96+ if allowedTeam .ID == teamReviewer .ID {
97+ found = true
98+ break
99+ }
100+ }
101+ if ! found {
102+ return issues_model.ErrNotValidReviewRequest {TeamID : teamReviewer .ID }
103+ }
104+ }
105+ }
106+
67107 // user should be a collaborator or a member of the organization for base repo
68108 if ! issue .Poster .IsAdmin {
69109 canCreate , err := repo_model .IsOwnerMemberCollaborator (ctx , repo , issue .Poster .ID )
@@ -174,7 +214,32 @@ func NewPullRequest(ctx context.Context, opts *NewPullRequestOptions) error {
174214 return err
175215 }
176216
177- if ! pr .IsWorkInProgress (ctx ) {
217+ // if there are reviewers or review teams, we don't need to request code owners review
218+ if len (opts .Reviewers )+ len (opts .TeamReviewers ) > 0 {
219+ for _ , reviewer := range opts .Reviewers {
220+ comment , err := issues_model .AddReviewRequest (ctx , pr .Issue , reviewer , issue .Poster )
221+ if err != nil {
222+ return err
223+ }
224+ reviewNotifiers = append (reviewNotifiers , & ReviewRequestNotifier {
225+ Comment : comment ,
226+ Reviewer : reviewer ,
227+ IsAdd : true ,
228+ })
229+ }
230+
231+ for _ , teamReviewer := range opts .TeamReviewers {
232+ comment , err := issues_model .AddTeamReviewRequest (ctx , pr .Issue , teamReviewer , issue .Poster )
233+ if err != nil {
234+ return err
235+ }
236+ reviewNotifiers = append (reviewNotifiers , & ReviewRequestNotifier {
237+ Comment : comment ,
238+ ReviewTeam : teamReviewer ,
239+ IsAdd : true ,
240+ })
241+ }
242+ } else if ! pr .IsWorkInProgress (ctx ) {
178243 reviewNotifiers , err = RequestCodeOwnersReview (ctx , issue , pr )
179244 if err != nil {
180245 return err
@@ -210,17 +275,7 @@ func NewPullRequest(ctx context.Context, opts *NewPullRequestOptions) error {
210275 }
211276 notify_service .IssueChangeAssignee (ctx , issue .Poster , issue , assignee , false , assigneeCommentMap [assigneeID ])
212277 }
213- permDoer , err := access_model .GetUserRepoPermission (ctx , repo , issue .Poster )
214- for _ , reviewer := range opts .Reviewers {
215- if _ , err = ReviewRequest (ctx , pr , issue .Poster , & permDoer , reviewer , true ); err != nil {
216- return err
217- }
218- }
219- for _ , teamReviewer := range opts .TeamReviewers {
220- if _ , err = TeamReviewRequest (ctx , pr , issue .Poster , teamReviewer , true ); err != nil {
221- return err
222- }
223- }
278+
224279 return nil
225280}
226281
0 commit comments