Skip to content

Commit c92202e

Browse files
sebastian-sauerCalK16
authored andcommitted
Add request review to API
1 parent 978c465 commit c92202e

File tree

3 files changed

+57
-2
lines changed

3 files changed

+57
-2
lines changed

modules/structs/pull.go

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,9 @@ type CreatePullRequestOption struct {
8686
Milestone int64 `json:"milestone"`
8787
Labels []int64 `json:"labels"`
8888
// swagger:strfmt date-time
89-
Deadline *time.Time `json:"due_date"`
89+
Deadline *time.Time `json:"due_date"`
90+
Reviewers []string `json:"reviewers"`
91+
TeamReviewers []string `json:"team_reviewers"`
9092
}
9193

9294
// EditPullRequestOption options when modify pull request

routers/api/v1/repo/pull.go

Lines changed: 40 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ import (
1616
activities_model "code.gitea.io/gitea/models/activities"
1717
git_model "code.gitea.io/gitea/models/git"
1818
issues_model "code.gitea.io/gitea/models/issues"
19+
"code.gitea.io/gitea/models/organization"
1920
access_model "code.gitea.io/gitea/models/perm/access"
2021
pull_model "code.gitea.io/gitea/models/pull"
2122
repo_model "code.gitea.io/gitea/models/repo"
@@ -553,8 +554,46 @@ func CreatePullRequest(ctx *context.APIContext) {
553554
return
554555
}
555556
}
557+
// handle reviewers
558+
var reviewerIds []int64
556559

557-
if err := pull_service.NewPullRequest(ctx, repo, prIssue, labelIDs, []string{}, pr, assigneeIDs, []int64{}); err != nil {
560+
for _, r := range form.Reviewers {
561+
var reviewer *user_model.User
562+
if strings.Contains(r, "@") {
563+
reviewer, err = user_model.GetUserByEmail(ctx, r)
564+
} else {
565+
reviewer, err = user_model.GetUserByName(ctx, r)
566+
}
567+
568+
if err != nil {
569+
if user_model.IsErrUserNotExist(err) {
570+
ctx.NotFound("UserNotExist", fmt.Sprintf("User with id '%s' not exist", r))
571+
return
572+
}
573+
ctx.Error(http.StatusInternalServerError, "GetUser", err)
574+
return
575+
}
576+
reviewerIds = append(reviewerIds, reviewer.ID)
577+
}
578+
579+
// handle teams as reviewers
580+
if ctx.Repo.Repository.Owner.IsOrganization() && len(form.TeamReviewers) > 0 {
581+
for _, t := range form.TeamReviewers {
582+
var teamReviewer *organization.Team
583+
teamReviewer, err = organization.GetTeam(ctx, ctx.Repo.Owner.ID, t)
584+
if err != nil {
585+
if organization.IsErrTeamNotExist(err) {
586+
ctx.NotFound("TeamNotExist", fmt.Sprintf("Team '%s' not exist", t))
587+
return
588+
}
589+
ctx.Error(http.StatusInternalServerError, "ReviewRequest", err)
590+
return
591+
}
592+
reviewerIds = append(reviewerIds, teamReviewer.ID)
593+
}
594+
}
595+
596+
if err := pull_service.NewPullRequest(ctx, repo, prIssue, labelIDs, []string{}, pr, assigneeIDs, reviewerIds); err != nil {
558597
if repo_model.IsErrUserDoesNotHaveAccessToRepo(err) {
559598
ctx.Error(http.StatusBadRequest, "UserDoesNotHaveAccessToRepo", err)
560599
} else if errors.Is(err, user_model.ErrBlockedUser) {

templates/swagger/v1_json.tmpl

Lines changed: 14 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)