public async Task <Issue> AddAsync(Issue issue) { var issueEntity = _mapper.Map <Data.Issues.Issue>(issue); issueEntity.Date = DateTime.Now; await _issueRepository.CreateAsync(issueEntity); return(_mapper.Map(issueEntity, issue)); }
private IList <HistoryChange> GetIssueChanges(Issue pristineIssue, Issue updatedIssue) { var builder = new HistoryChangesBuilder(pristineIssue, updatedIssue); builder.AppendDiff(nameof(Issue.Title), issue => issue.Title); builder.AppendDiff(nameof(Issue.Description), issue => issue.Description); builder.AppendDiff(nameof(Issue.Priority), issue => issue.Priority); builder.AppendDiff(nameof(Issue.Status), issue => issue.Status); builder.AppendDiff(nameof(Issue.Type), issue => issue.Type); builder.AppendDiff(nameof(Issue.Assigned), issue => issue.Assigned.Id); var changes = builder.Build(); return(changes); }
public async Task <Issue> UpdateAsync(Issue issue, User updater) { var pristineIssue = await GetByIdAsync(issue.Id); if (pristineIssue == null) { throw new NotFoundException(); } var changes = GetIssueChanges(pristineIssue, issue); var historyEntity = new Data.Histories.History { IssueId = pristineIssue.Id, UpdaterId = updater.Id, Date = DateTime.Now, Changes = changes.Select(_mapper.Map <Data.Histories.HistoryChange>).ToList(), }; await _historyRepository.CreateAsync(historyEntity); var history = _mapper.Map <History>(historyEntity); if (pristineIssue.Histories == null) { issue.Histories = new List <History>(); } else { issue.Histories = pristineIssue.Histories; } issue.Histories.Add(history); var updatedIssueEntity = _mapper.Map <Data.Issues.Issue>(issue); await _issueRepository.UpdateAsync(updatedIssueEntity); return(_mapper.Map(updatedIssueEntity, issue)); }
public Task DeleteAsync(Issue issue, User updater) { issue.Status = Status.Removed; return(UpdateAsync(issue, updater)); }