public async Task <Unit> Handle(MakeAppealCommand request, CancellationToken cancellationToken) { var oversightReview = await _oversightReviewRepository.GetByApplicationId(request.ApplicationId); VerifyOversightReviewIsUnsuccessfulOrRemoved(oversightReview); var currentAppeal = await _appealRepository.GetByApplicationId(request.ApplicationId); VerifyAppealNotSubmitted(currentAppeal); _auditService.StartTracking(UserAction.MakeAppeal, request.UserId, request.UserName); if (currentAppeal is null) { currentAppeal = new Appeal { ApplicationId = request.ApplicationId, Status = AppealStatus.Submitted, AppealSubmittedDate = DateTime.UtcNow, HowFailedOnPolicyOrProcesses = request.HowFailedOnPolicyOrProcesses, HowFailedOnEvidenceSubmitted = request.HowFailedOnEvidenceSubmitted, UserId = request.UserId, UserName = request.UserName, }; _auditService.AuditInsert(currentAppeal); _appealRepository.Add(currentAppeal); } else { _auditService.AuditUpdate(currentAppeal); currentAppeal.Status = AppealStatus.Submitted; currentAppeal.AppealSubmittedDate = DateTime.UtcNow; currentAppeal.HowFailedOnPolicyOrProcesses = request.HowFailedOnPolicyOrProcesses; currentAppeal.HowFailedOnEvidenceSubmitted = request.HowFailedOnEvidenceSubmitted; currentAppeal.UserId = request.UserId; currentAppeal.UserName = request.UserName; currentAppeal.UpdatedOn = DateTime.UtcNow; _appealRepository.Update(currentAppeal); } _auditService.Save(); return(Unit.Value); }
private async Task <(OversightReview, bool)> GetExistingOrNewOversightReview(Guid applicationId) { var isNew = false; var oversightReview = await _oversightReviewRepository.GetByApplicationId(applicationId); if (oversightReview == null) { isNew = true; oversightReview = new OversightReview { ApplicationId = applicationId }; _auditService.AuditInsert(oversightReview); } else { if (oversightReview.Status != OversightReviewStatus.InProgress) { throw new InvalidOperationException($"Unable to modify oversight review for application {applicationId} with a status of {oversightReview.Status}"); } _auditService.AuditUpdate(oversightReview); } return(oversightReview, isNew); }