protected override async Task Execute()
        {
            if (await AnotherSubscriptionExist())
            {
                return;
            }

            var response = new GetPullRequestsOfRepositoryQueryResponse()
            {
                Cursor = Subscription.LastPullRequestGithubCursor
            };
            var installationContext = await GetInstallationContext();

            var batchNumber      = 0;
            var pullRequestInfos = new List <PullRequestInfo>(1000);

            do
            {
                response = await GetPullRequests(installationContext, response);

                pullRequestInfos.AddRange(response.PullRequests);

                if (batchNumber % 10 == 0)
                {
                    Subscription.LastPullRequestGithubCursor = response.Cursor;
                    batchNumber = 0;

                    await SavePullRequestInfos(pullRequestInfos, Subscription);

                    pullRequestInfos.Clear();
                }

                batchNumber++;
            } while (response.HasNextPage);

            await SavePullRequestInfos(pullRequestInfos, Subscription);
        }
        private async Task <GetPullRequestsOfRepositoryQueryResponse> GetPullRequests(InstallationContext installationContext, GetPullRequestsOfRepositoryQueryResponse response, bool isRetry = false)
        {
            try
            {
                return(await _gitHubRepositoryPullRequestService
                       .GetPullRequestsOfRepository(installationContext.AccessToken.Token, Subscription.Owner, Subscription.Repo, response.Cursor));
            }
            catch (GitHubUnauthorizedException e)
            {
                if (isRetry)
                {
                    throw;
                }

                return(await GetPullRequests(await GetInstallationContext(), response, true));
            }
        }