Example #1
0
        public async Task Orchestrator(
            [OrchestrationTrigger] IDurableOrchestrationContext context)
        {
            var cIContext = context.GetInput <CIContext>();
            // Get issues
            SearchIssue issues = await context.CallActivityAsync <SearchIssue>(nameof(CreatePRReviewDecorator) + "_GetIssues", cIContext);

            // Get issues that already created
            var pullRequestState =
                await context.CallActivityAsync <PullRequestState>("PullRequestStateUtility_GetPullRequestState", new PullRequestStateKey
            {
                PartitionKey = _repositoryContext.GetFullNameWithUnderscore(),
                RowKey       = cIContext.PullRequestId
            });

            string entityId = pullRequestState?.EntityId ?? context.NewGuid().ToString();
            EntityStateResponse <PullRequestStateContext> response =
                await context.CallActivityAsync <EntityStateResponse <PullRequestStateContext> >(
                    nameof(CreatePRReviewDecorator) + "_GetPullRequestStateContext", entityId);

            var pullRequestDetailContext = response.EntityState;

            pullRequestDetailContext = pullRequestDetailContext ?? new PullRequestStateContext()
            {
                PullRequestNumber = int.Parse(cIContext.PullRequestId)
            };

            var unCommentedIssue = issues.issues.Where(issue => !pullRequestDetailContext.CreatedReviewComment.Contains(new CreatedReviewComment()
            {
                IssueId = issue.key
            })).ToList();


            foreach (var issue in unCommentedIssue)
            {
                var issueContext           = (cIContext, issue);
                var createdPrReviewComment = await context.CallActivityAsync <JObject>(nameof(CreatePRReviewDecorator) + "_CreatePRReviewComment", issueContext);

                if (createdPrReviewComment != null)
                {
                    pullRequestDetailContext.Add(new CreatedReviewComment()
                    {
                        IssueId = issue.key, CommentId = (int)createdPrReviewComment["Id"], ProjectKey = cIContext.ProjectKey
                    });
                }
            }


            await context.CallEntityAsync <PullRequestStateContext>(new EntityId(nameof(PullRequestEntity), entityId), "update", pullRequestDetailContext);

            pullRequestState              = pullRequestState ?? new PullRequestState();
            pullRequestState.EntityId     = entityId;
            pullRequestState.PartitionKey = pullRequestState.PartitionKey ??
                                            _repositoryContext.Owner + "_" + _repositoryContext.Name;
            pullRequestState.RowKey = pullRequestState.RowKey ?? cIContext.PullRequestId;

            await context.CallActivityAsync("PullRequestStateUtility_CreateOrUpdatePullRequestState", pullRequestState);
        }