@@ -21,23 +21,36 @@ def fetch_comments(owner, repo, number)
2121 end
2222
2323 def fetch_reviews ( owner , repo , number )
24+ resolved_ids = fetch_resolved_comment_ids ( owner , repo , number )
25+
2426 path = "/repos/#{ owner } /#{ repo } /pulls/#{ number } /reviews"
2527 reviews = fetch_all_pages ( path )
2628
29+ all_pr_comments = fetch_all_pr_comments ( owner , repo , number )
30+
2731 reviews . map do |review_data |
2832 review = Models ::Review . from_api ( review_data )
29- review . comments = fetch_review_comments ( owner , repo , review . id )
33+ review . comments = all_pr_comments
34+ . select { |c | c [ "pull_request_review_id" ] == review . id }
35+ . map do |data |
36+ comment = Models ::Comment . from_api ( data )
37+ comment . resolved = resolved_ids . include? ( comment . id )
38+ comment
39+ end
3040 review
3141 end
3242 end
3343
34- def fetch_review_comments ( owner , repo , review_id )
35- path = "/repos/#{ owner } /#{ repo } /pulls/comments"
36- all_comments = fetch_all_pages ( path )
44+ def fetch_review_comments ( owner , repo , review_id , resolved_ids = Set . new )
45+ all_pr_comments = fetch_all_pr_comments ( owner , repo )
3746
38- all_comments
47+ all_pr_comments
3948 . select { |c | c [ "pull_request_review_id" ] == review_id }
40- . map { |data | Models ::Comment . from_api ( data ) }
49+ . map do |data |
50+ comment = Models ::Comment . from_api ( data )
51+ comment . resolved = resolved_ids . include? ( comment . id )
52+ comment
53+ end
4154 end
4255
4356 private
@@ -49,6 +62,22 @@ def client
4962 )
5063 end
5164
65+ def graphql_client
66+ @graphql_client ||= Graphql . new ( @config )
67+ end
68+
69+ def fetch_resolved_comment_ids ( owner , repo , number )
70+ graphql_client . fetch_resolved_states ( owner , repo , number )
71+ rescue ApiError
72+ Set . new
73+ end
74+
75+ def fetch_all_pr_comments ( owner , repo , _number = nil )
76+ @all_pr_comments ||= { }
77+ key = "#{ owner } /#{ repo } "
78+ @all_pr_comments [ key ] ||= fetch_all_pages ( "/repos/#{ owner } /#{ repo } /pulls/comments" )
79+ end
80+
5281 def fetch_all_pages ( path , params = { } )
5382 results = [ ]
5483 page = 1
0 commit comments