Exemple #1
0
        public async Task <IActionResult> OnPost(string gitHubIssueUri, string formAction)
        {
            if (!GitHubIssueKey.TryCreateFromUri(gitHubIssueUri, out var issueKey))
            {
                return(await OnError("Not a valid GitHub Issue Url"));
            }

            var buildKey = GetBuildKey(Number !.Value);

            if (formAction == "addIssue")
            {
                try
                {
                    var modelBuild = await TriageContextUtil.GetModelBuildAsync(buildKey);

                    await TriageContextUtil.EnsureGitHubIssueAsync(modelBuild, issueKey, saveChanges : true);
                }
                catch (DbUpdateException ex)
                {
                    if (!ex.IsUniqueKeyViolation())
                    {
                        throw;
                    }
                }
            }
            else
            {
                var query = TriageContextUtil
                            .GetModelBuildQuery(buildKey)
                            .SelectMany(x => x.ModelGitHubIssues)
                            .Where(x =>
                                   x.Organization == issueKey.Organization &&
                                   x.Repository == issueKey.Repository &&
                                   x.Number == issueKey.Number);

                var modelGitHubIssue = await query.FirstOrDefaultAsync();

                if (modelGitHubIssue is object)
                {
                    TriageContextUtil.Context.ModelGitHubIssues.Remove(modelGitHubIssue);
                    await TriageContextUtil.Context.SaveChangesAsync();
                }
            }

            var util = new TrackingGitHubUtil(GitHubClientFactory, TriageContextUtil.Context, SiteLinkUtil.Published, Logger);
            await util.UpdateAssociatedGitHubIssueAsync(issueKey);

            return(await OnGet());

            async Task <IActionResult> OnError(string message)
            {
                GitHubIssueAddErrorMessage = message;
                return(await OnGet());
            }
        }