@@ -1028,18 +1028,54 @@ func (c *Client) convertGraphQLToPullRequest(ctx context.Context, data *graphQLP
10281028 pr .Labels = append (pr .Labels , label .Name )
10291029 }
10301030
1031- // Requested reviewers
1031+ // Build reviewers map from review requests and actual reviews
1032+ pr .Reviewers = buildReviewersMap (data )
1033+
1034+ return pr
1035+ }
1036+
1037+ // buildReviewersMap constructs a map of reviewer login to their review state.
1038+ // It combines data from review requests (pending) and actual reviews (approved/changes_requested/commented).
1039+ func buildReviewersMap (data * graphQLPullRequestComplete ) map [string ]ReviewState {
1040+ reviewers := make (map [string ]ReviewState )
1041+
1042+ // First, add all requested reviewers as pending
10321043 for _ , request := range data .ReviewRequests .Nodes {
10331044 reviewer := request .RequestedReviewer
10341045 // Teams have "name", users have "login"
10351046 if reviewer .Login != "" {
1036- pr . RequestedReviewers = append ( pr . RequestedReviewers , reviewer . Login )
1047+ reviewers [ reviewer . Login ] = ReviewStatePending
10371048 } else if reviewer .Name != "" {
1038- pr . RequestedReviewers = append ( pr . RequestedReviewers , reviewer . Name )
1049+ reviewers [ reviewer . Name ] = ReviewStatePending
10391050 }
10401051 }
10411052
1042- return pr
1053+ // Then, update with actual review states (latest review wins)
1054+ for i := range data .Reviews .Nodes {
1055+ review := & data .Reviews .Nodes [i ]
1056+ if review .Author .Login == "" {
1057+ continue
1058+ }
1059+
1060+ // Map GraphQL review state to our ReviewState
1061+ var state ReviewState
1062+ switch strings .ToUpper (review .State ) {
1063+ case "APPROVED" :
1064+ state = ReviewStateApproved
1065+ case "CHANGES_REQUESTED" :
1066+ state = ReviewStateChangesRequested
1067+ case "COMMENTED" :
1068+ state = ReviewStateCommented
1069+ default :
1070+ // Skip unknown states
1071+ continue
1072+ }
1073+
1074+ // Update the reviewer's state (latest review wins)
1075+ reviewers [review .Author .Login ] = state
1076+ }
1077+
1078+ return reviewers
10431079}
10441080
10451081// convertGraphQLToEvents converts GraphQL data to Events.
0 commit comments