2020-05-02 02:20:51 +02:00
// Copyright 2020 The Gitea Authors. All rights reserved.
2022-11-27 13:20:29 -05:00
// SPDX-License-Identifier: MIT
2020-05-02 02:20:51 +02:00
package convert
import (
2022-01-19 23:26:57 +00:00
"context"
2020-05-02 02:20:51 +02:00
"strings"
2022-06-13 17:37:59 +08:00
issues_model "code.gitea.io/gitea/models/issues"
2021-11-24 17:49:20 +08:00
user_model "code.gitea.io/gitea/models/user"
2020-05-02 02:20:51 +02:00
api "code.gitea.io/gitea/modules/structs"
)
// ToPullReview convert a review to api format
2022-06-13 17:37:59 +08:00
func ToPullReview ( ctx context . Context , r * issues_model . Review , doer * user_model . User ) ( * api . PullReview , error ) {
2022-01-19 23:26:57 +00:00
if err := r . LoadAttributes ( ctx ) ; err != nil {
2021-11-24 17:49:20 +08:00
if ! user_model . IsErrUserNotExist ( err ) {
2020-05-02 02:20:51 +02:00
return nil , err
}
2021-11-24 17:49:20 +08:00
r . Reviewer = user_model . NewGhostUser ( )
2020-05-02 02:20:51 +02:00
}
2022-05-13 19:27:58 +02:00
apiTeam , err := ToTeam ( r . ReviewerTeam )
if err != nil {
return nil , err
}
2020-05-02 02:20:51 +02:00
result := & api . PullReview {
ID : r . ID ,
2021-03-27 17:45:26 +01:00
Reviewer : ToUser ( r . Reviewer , doer ) ,
2022-05-13 19:27:58 +02:00
ReviewerTeam : apiTeam ,
2020-05-02 02:20:51 +02:00
State : api . ReviewStateUnknown ,
Body : r . Content ,
CommitID : r . CommitID ,
Stale : r . Stale ,
Official : r . Official ,
2021-02-12 01:32:25 +08:00
Dismissed : r . Dismissed ,
2020-05-02 02:20:51 +02:00
CodeCommentsCount : r . GetCodeCommentsCount ( ) ,
Submitted : r . CreatedUnix . AsTime ( ) ,
2022-11-15 11:33:52 +02:00
Updated : r . UpdatedUnix . AsTime ( ) ,
2020-05-02 02:20:51 +02:00
HTMLURL : r . HTMLURL ( ) ,
HTMLPullURL : r . Issue . HTMLURL ( ) ,
}
switch r . Type {
2022-06-13 17:37:59 +08:00
case issues_model . ReviewTypeApprove :
2020-05-02 02:20:51 +02:00
result . State = api . ReviewStateApproved
2022-06-13 17:37:59 +08:00
case issues_model . ReviewTypeReject :
2020-05-02 02:20:51 +02:00
result . State = api . ReviewStateRequestChanges
2022-06-13 17:37:59 +08:00
case issues_model . ReviewTypeComment :
2020-05-02 02:20:51 +02:00
result . State = api . ReviewStateComment
2022-06-13 17:37:59 +08:00
case issues_model . ReviewTypePending :
2020-05-02 02:20:51 +02:00
result . State = api . ReviewStatePending
2022-06-13 17:37:59 +08:00
case issues_model . ReviewTypeRequest :
2020-05-02 02:20:51 +02:00
result . State = api . ReviewStateRequestReview
}
return result , nil
}
// ToPullReviewList convert a list of review to it's api format
2022-06-13 17:37:59 +08:00
func ToPullReviewList ( ctx context . Context , rl [ ] * issues_model . Review , doer * user_model . User ) ( [ ] * api . PullReview , error ) {
2020-05-02 02:20:51 +02:00
result := make ( [ ] * api . PullReview , 0 , len ( rl ) )
for i := range rl {
// show pending reviews only for the user who created them
2022-06-13 17:37:59 +08:00
if rl [ i ] . Type == issues_model . ReviewTypePending && ! ( doer . IsAdmin || doer . ID == rl [ i ] . ReviewerID ) {
2020-05-02 02:20:51 +02:00
continue
}
2022-01-19 23:26:57 +00:00
r , err := ToPullReview ( ctx , rl [ i ] , doer )
2020-05-02 02:20:51 +02:00
if err != nil {
return nil , err
}
result = append ( result , r )
}
return result , nil
}
// ToPullReviewCommentList convert the CodeComments of an review to it's api format
2022-06-13 17:37:59 +08:00
func ToPullReviewCommentList ( ctx context . Context , review * issues_model . Review , doer * user_model . User ) ( [ ] * api . PullReviewComment , error ) {
2022-01-19 23:26:57 +00:00
if err := review . LoadAttributes ( ctx ) ; err != nil {
2021-11-24 17:49:20 +08:00
if ! user_model . IsErrUserNotExist ( err ) {
2020-05-02 02:20:51 +02:00
return nil , err
}
2021-11-24 17:49:20 +08:00
review . Reviewer = user_model . NewGhostUser ( )
2020-05-02 02:20:51 +02:00
}
apiComments := make ( [ ] * api . PullReviewComment , 0 , len ( review . CodeComments ) )
for _ , lines := range review . CodeComments {
for _ , comments := range lines {
for _ , comment := range comments {
apiComment := & api . PullReviewComment {
ID : comment . ID ,
Body : comment . Content ,
2021-03-28 00:37:51 +01:00
Poster : ToUser ( comment . Poster , doer ) ,
Resolver : ToUser ( comment . ResolveDoer , doer ) ,
2021-03-26 03:46:41 +01:00
ReviewID : review . ID ,
2020-05-02 02:20:51 +02:00
Created : comment . CreatedUnix . AsTime ( ) ,
Updated : comment . UpdatedUnix . AsTime ( ) ,
Path : comment . TreePath ,
CommitID : comment . CommitSHA ,
OrigCommitID : comment . OldRef ,
DiffHunk : patch2diff ( comment . Patch ) ,
HTMLURL : comment . HTMLURL ( ) ,
2020-05-21 03:41:30 +01:00
HTMLPullURL : review . Issue . HTMLURL ( ) ,
2020-05-02 02:20:51 +02:00
}
if comment . Line < 0 {
apiComment . OldLineNum = comment . UnsignedLine ( )
} else {
apiComment . LineNum = comment . UnsignedLine ( )
}
apiComments = append ( apiComments , apiComment )
}
}
}
return apiComments , nil
}
func patch2diff ( patch string ) string {
split := strings . Split ( patch , "\n@@" )
if len ( split ) == 2 {
return "@@" + split [ 1 ]
}
return ""
}