mirror of
				https://github.com/go-gitea/gitea
				synced 2025-11-03 21:08:25 +00: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