Ejemplo n.º 1
0
        private async Task UpdatePullRequestReviews(IGitHubActor ghc, long forUserId, DataUpdater updater)
        {
            gm.Review myReview = null;

            // Reviews and Review comments need to use the current user's token. Don't track metadata (yet - per user ideally)
            var prReviewsResponse = await ghc.PullRequestReviews(_repoFullName, _issueNumber, priority : RequestPriority.Interactive);

            if (prReviewsResponse.IsOk)
            {
                await updater.UpdateReviews(_repoId, _issueId, prReviewsResponse.Date, prReviewsResponse.Result, userId : forUserId, complete : true);

                myReview = prReviewsResponse.Result
                           .Where(x => x.State.Equals("PENDING", StringComparison.OrdinalIgnoreCase))
                           .FirstOrDefault(x => x.User.Id == forUserId);
            }

            using (var context = _contextFactory.CreateInstance()) {
                await context.UpdateMetadata("PullRequests", "IssueId", "ReviewMetadataJson", _issueId, GitHubMetadata.FromResponse(prReviewsResponse));
            }

            // Only fetch if *this user* has a pending review
            // Since we make the request every time, it's ok not to look for pending reviews in the DB
            if (myReview != null)
            {
                var reviewCommentsResponse = await ghc.PullRequestReviewComments(_repoFullName, _issueNumber, myReview.Id, priority : RequestPriority.Interactive);

                if (reviewCommentsResponse.IsOk && reviewCommentsResponse.Result.Any())
                {
                    await updater.UpdatePullRequestComments(_repoId, _issueId, reviewCommentsResponse.Date, reviewCommentsResponse.Result, pendingReviewId : myReview.Id);
                }
            }
        }