@@ -16,6 +16,7 @@ import (
1616 "code.gitea.io/gitea/modules/log"
1717 "code.gitea.io/gitea/modules/util"
1818
19+ "xorm.io/builder"
1920 "xorm.io/xorm"
2021)
2122
@@ -240,6 +241,64 @@ func (prs PullRequestList) GetIssueIDs() []int64 {
240241 })
241242}
242243
244+ func (prs PullRequestList ) LoadReviewCommentsCounts (ctx context.Context ) (map [int64 ]int , error ) {
245+ issueIDs := prs .GetIssueIDs ()
246+ countsMap := make (map [int64 ]int , len (issueIDs ))
247+ counts := make ([]struct {
248+ IssueID int64
249+ Count int
250+ }, 0 , len (issueIDs ))
251+ if err := db .GetEngine (ctx ).Select ("issue_id, count(*) as count" ).
252+ Table ("comment" ).In ("issue_id" , issueIDs ).And ("type = ?" , CommentTypeReview ).
253+ GroupBy ("issue_id" ).Find (& counts ); err != nil {
254+ return nil , err
255+ }
256+ for _ , c := range counts {
257+ countsMap [c .IssueID ] = c .Count
258+ }
259+ return countsMap , nil
260+ }
261+
262+ func (prs PullRequestList ) LoadReviews (ctx context.Context ) (ReviewList , error ) {
263+ issueIDs := prs .GetIssueIDs ()
264+ reviews := make ([]* Review , 0 , len (issueIDs ))
265+
266+ subQuery := builder .Select ("max(id) as id" ).
267+ From ("review" ).
268+ Where (builder .In ("issue_id" , issueIDs )).
269+ And (builder .In ("`type`" , ReviewTypeApprove , ReviewTypeReject , ReviewTypeRequest )).
270+ And (builder.Eq {
271+ "dismissed" : false ,
272+ "original_author_id" : 0 ,
273+ "reviewer_team_id" : 0 ,
274+ }).
275+ GroupBy ("issue_id, reviewer_id" )
276+ // Get latest review of each reviewer, sorted in order they were made
277+ if err := db .GetEngine (ctx ).In ("id" , subQuery ).OrderBy ("review.updated_unix ASC" ).Find (& reviews ); err != nil {
278+ return nil , err
279+ }
280+
281+ teamReviewRequests := make ([]* Review , 0 , 5 )
282+ subQueryTeam := builder .Select ("max(id) as id" ).
283+ From ("review" ).
284+ Where (builder .In ("issue_id" , issueIDs )).
285+ And (builder.Eq {
286+ "original_author_id" : 0 ,
287+ }).And (builder.Neq {
288+ "reviewer_team_id" : 0 ,
289+ }).
290+ GroupBy ("issue_id, reviewer_team_id" )
291+ if err := db .GetEngine (ctx ).In ("id" , subQueryTeam ).OrderBy ("review.updated_unix ASC" ).Find (& teamReviewRequests ); err != nil {
292+ return nil , err
293+ }
294+
295+ if len (teamReviewRequests ) > 0 {
296+ reviews = append (reviews , teamReviewRequests ... )
297+ }
298+
299+ return reviews , nil
300+ }
301+
243302// HasMergedPullRequestInRepo returns whether the user(poster) has merged pull-request in the repo
244303func HasMergedPullRequestInRepo (ctx context.Context , repoID , posterID int64 ) (bool , error ) {
245304 return db .GetEngine (ctx ).
0 commit comments