aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEdip Emre Bodur <38386056+emrebdr@users.noreply.github.com>2024-08-05 13:59:53 +0300
committerGitHub <noreply@github.com>2024-08-05 10:59:53 +0000
commit94cca8846e7d62c8a295d70c8199d706dfa60e5c (patch)
tree86691511936071c36d243ae61a12485da51ffa2d
parentc649a04da14ea46b57ec96ce95848f4289728d8a (diff)
downloadgitea-94cca8846e7d62c8a295d70c8199d706dfa60e5c.tar.gz
gitea-94cca8846e7d62c8a295d70c8199d706dfa60e5c.zip
Fix null requested_reviewer from API (#31773)
If the assign the pull request review to a team, it did not show the members of the team in the "requested_reviewers" field, so the field was null. As a solution, I added the team members to the array. fix #31764
-rw-r--r--models/issues/pull.go24
-rw-r--r--models/issues/review_list.go29
-rw-r--r--modules/structs/pull.go31
-rw-r--r--services/convert/pull.go15
-rw-r--r--templates/swagger/v1_json.tmpl7
5 files changed, 90 insertions, 16 deletions
diff --git a/models/issues/pull.go b/models/issues/pull.go
index a4e6147619..5fe95d56cc 100644
--- a/models/issues/pull.go
+++ b/models/issues/pull.go
@@ -165,6 +165,7 @@ type PullRequest struct {
Issue *Issue `xorm:"-"`
Index int64
RequestedReviewers []*user_model.User `xorm:"-"`
+ RequestedReviewersTeams []*org_model.Team `xorm:"-"`
isRequestedReviewersLoaded bool `xorm:"-"`
HeadRepoID int64 `xorm:"INDEX"`
@@ -305,7 +306,28 @@ func (pr *PullRequest) LoadRequestedReviewers(ctx context.Context) error {
}
pr.isRequestedReviewersLoaded = true
for _, review := range reviews {
- pr.RequestedReviewers = append(pr.RequestedReviewers, review.Reviewer)
+ if review.ReviewerID != 0 {
+ pr.RequestedReviewers = append(pr.RequestedReviewers, review.Reviewer)
+ }
+ }
+
+ return nil
+}
+
+// LoadRequestedReviewersTeams loads the requested reviewers teams.
+func (pr *PullRequest) LoadRequestedReviewersTeams(ctx context.Context) error {
+ reviews, err := GetReviewsByIssueID(ctx, pr.Issue.ID)
+ if err != nil {
+ return err
+ }
+ if err = reviews.LoadReviewersTeams(ctx); err != nil {
+ return err
+ }
+
+ for _, review := range reviews {
+ if review.ReviewerTeamID != 0 {
+ pr.RequestedReviewersTeams = append(pr.RequestedReviewersTeams, review.ReviewerTeam)
+ }
}
return nil
diff --git a/models/issues/review_list.go b/models/issues/review_list.go
index 7b8c3d319c..0ee28874ec 100644
--- a/models/issues/review_list.go
+++ b/models/issues/review_list.go
@@ -7,6 +7,7 @@ import (
"context"
"code.gitea.io/gitea/models/db"
+ organization_model "code.gitea.io/gitea/models/organization"
user_model "code.gitea.io/gitea/models/user"
"code.gitea.io/gitea/modules/container"
"code.gitea.io/gitea/modules/optional"
@@ -37,6 +38,34 @@ func (reviews ReviewList) LoadReviewers(ctx context.Context) error {
return nil
}
+// LoadReviewersTeams loads reviewers teams
+func (reviews ReviewList) LoadReviewersTeams(ctx context.Context) error {
+ reviewersTeamsIDs := make([]int64, 0)
+ for _, review := range reviews {
+ if review.ReviewerTeamID != 0 {
+ reviewersTeamsIDs = append(reviewersTeamsIDs, review.ReviewerTeamID)
+ }
+ }
+
+ teamsMap := make(map[int64]*organization_model.Team, 0)
+ for _, teamID := range reviewersTeamsIDs {
+ team, err := organization_model.GetTeamByID(ctx, teamID)
+ if err != nil {
+ return err
+ }
+
+ teamsMap[teamID] = team
+ }
+
+ for _, review := range reviews {
+ if review.ReviewerTeamID != 0 {
+ review.ReviewerTeam = teamsMap[review.ReviewerTeamID]
+ }
+ }
+
+ return nil
+}
+
func (reviews ReviewList) LoadIssues(ctx context.Context) error {
issueIDs := container.FilterSlice(reviews, func(review *Review) (int64, bool) {
return review.IssueID, true
diff --git a/modules/structs/pull.go b/modules/structs/pull.go
index 525d90c28e..ab627666c9 100644
--- a/modules/structs/pull.go
+++ b/modules/structs/pull.go
@@ -9,21 +9,22 @@ import (
// PullRequest represents a pull request
type PullRequest struct {
- ID int64 `json:"id"`
- URL string `json:"url"`
- Index int64 `json:"number"`
- Poster *User `json:"user"`
- Title string `json:"title"`
- Body string `json:"body"`
- Labels []*Label `json:"labels"`
- Milestone *Milestone `json:"milestone"`
- Assignee *User `json:"assignee"`
- Assignees []*User `json:"assignees"`
- RequestedReviewers []*User `json:"requested_reviewers"`
- State StateType `json:"state"`
- Draft bool `json:"draft"`
- IsLocked bool `json:"is_locked"`
- Comments int `json:"comments"`
+ ID int64 `json:"id"`
+ URL string `json:"url"`
+ Index int64 `json:"number"`
+ Poster *User `json:"user"`
+ Title string `json:"title"`
+ Body string `json:"body"`
+ Labels []*Label `json:"labels"`
+ Milestone *Milestone `json:"milestone"`
+ Assignee *User `json:"assignee"`
+ Assignees []*User `json:"assignees"`
+ RequestedReviewers []*User `json:"requested_reviewers"`
+ RequestedReviewersTeams []*Team `json:"requested_reviewers_teams"`
+ State StateType `json:"state"`
+ Draft bool `json:"draft"`
+ IsLocked bool `json:"is_locked"`
+ Comments int `json:"comments"`
// number of review comments made on the diff of a PR review (not including comments on commits or issues in a PR)
ReviewComments int `json:"review_comments"`
Additions int `json:"additions"`
diff --git a/services/convert/pull.go b/services/convert/pull.go
index c214805ed5..4ec24a8276 100644
--- a/services/convert/pull.go
+++ b/services/convert/pull.go
@@ -106,10 +106,25 @@ func ToAPIPullRequest(ctx context.Context, pr *issues_model.PullRequest, doer *u
log.Error("LoadRequestedReviewers[%d]: %v", pr.ID, err)
return nil
}
+ if err = pr.LoadRequestedReviewersTeams(ctx); err != nil {
+ log.Error("LoadRequestedReviewersTeams[%d]: %v", pr.ID, err)
+ return nil
+ }
+
for _, reviewer := range pr.RequestedReviewers {
apiPullRequest.RequestedReviewers = append(apiPullRequest.RequestedReviewers, ToUser(ctx, reviewer, nil))
}
+ for _, reviewerTeam := range pr.RequestedReviewersTeams {
+ convertedTeam, err := ToTeam(ctx, reviewerTeam, true)
+ if err != nil {
+ log.Error("LoadRequestedReviewersTeams[%d]: %v", pr.ID, err)
+ return nil
+ }
+
+ apiPullRequest.RequestedReviewersTeams = append(apiPullRequest.RequestedReviewersTeams, convertedTeam)
+ }
+
if pr.Issue.ClosedUnix != 0 {
apiPullRequest.Closed = pr.Issue.ClosedUnix.AsTimePtr()
}
diff --git a/templates/swagger/v1_json.tmpl b/templates/swagger/v1_json.tmpl
index bfaa86428c..18ea4a62b5 100644
--- a/templates/swagger/v1_json.tmpl
+++ b/templates/swagger/v1_json.tmpl
@@ -23517,6 +23517,13 @@
},
"x-go-name": "RequestedReviewers"
},
+ "requested_reviewers_teams": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/Team"
+ },
+ "x-go-name": "RequestedReviewersTeams"
+ },
"review_comments": {
"description": "number of review comments made on the diff of a PR review (not including comments on commits or issues in a PR)",
"type": "integer",