public override async Task <IActionResult> PostAsync() { if (!ModelState.IsValid) { return(View(this)); } if (Id == 0) // new item { var issue = _mapper.Map <Issue>(this); issue.CreatedDate = DateTime.Now; _db.Issue.Add(issue); await _db.SaveChangesAsync(); await SettleInsertAsync(issue); } else { var issue = await _db.Issue.SingleOrDefaultAsync(c => c.Id == Id); var originalIssue = new OriginalIssue(issue); _mapper.Map(this, issue); _db.Issue.Update(issue); await _db.SaveChangesAsync(); await SettleUpdateAsync(originalIssue, issue); } return(LocalRedirect(Referer ?? "/issues")); }
private async Task SettleUpdateAsync(OriginalIssue original, Issue issue) { _cache.MergeIssue(issue); if (original.Type != issue.Type || original.Status != issue.Status || original.Priority != issue.Priority) { await _issueService.LogChangeHistoryAsync(issue); } if (original.AssigneeId != issue.AssigneeId) { await _rollup.RollupUserAsync(original.AssigneeId); await _rollup.RollupUserAsync(issue.AssigneeId); } if (original.ProjectId != issue.ProjectId) { await _rollup.RollupProjectAsync(original.ProjectId); await _rollup.RollupProjectAsync(issue.ProjectId); } if (original.OwnerId != issue.OwnerId) { await _rollup.RollupUserAsync(original.OwnerId); await _rollup.RollupUserAsync(issue.OwnerId); } }