/
pull_request_reviews_result.go
42 lines (38 loc) 路 1.37 KB
/
pull_request_reviews_result.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
package github
import (
"context"
"github.com/grafeas/voucher/v2/repository"
"github.com/shurcooL/githubv4"
)
// getAllReviews is the graphQL query for collecting all reviews associated with a pull request
func getAllReviews(ctx context.Context, ghc ghGraphQLClient, pullRequestURL string) ([]review, error) {
allReviews := make([]review, 0)
formattedURI, err := createNewGitHubV4URI(pullRequestURL)
if err != nil {
return nil, err
}
queryResult := new(pullRequestReviewsQuery)
pullRequestVariables := map[string]interface{}{
"url": githubv4.URI(*formattedURI),
"reviewsCursor": (*githubv4.String)(nil),
}
err = paginationQuery(ctx, ghc, queryResult, pullRequestVariables, queryPageLimit, func(v interface{}) (bool, error) {
ciq, ok := v.(*pullRequestReviewsQuery)
if !ok {
return false, newTypeMismatchError("pullRequestReviewsQuery", ciq)
}
pullRequest := ciq.Resource.PullRequest
resourceType := ciq.Resource.Typename
if resourceType != pullRequestType {
return false, repository.NewTypeMismatchError(commitType, resourceType)
}
allReviews = append(allReviews, pullRequest.Reviews.Nodes...)
hasMoreResults := pullRequest.Reviews.PageInfo.HasNextPage
pullRequestVariables["reviewsCursor"] = githubv4.NewString(pullRequest.Reviews.PageInfo.EndCursor)
return hasMoreResults, nil
})
if err != nil {
return nil, err
}
return allReviews, nil
}