mirror of
				https://github.com/go-gitea/gitea.git
				synced 2025-10-31 19:06:18 +01:00 
			
		
		
		
	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
This commit is contained in:
		| @@ -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 | ||||
|   | ||||
| @@ -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 | ||||
|   | ||||
| @@ -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"` | ||||
|   | ||||
| @@ -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() | ||||
| 	} | ||||
|   | ||||
							
								
								
									
										7
									
								
								templates/swagger/v1_json.tmpl
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										7
									
								
								templates/swagger/v1_json.tmpl
									
									
									
										generated
									
									
									
								
							| @@ -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", | ||||
|   | ||||
		Reference in New Issue
	
	Block a user