protected override async Task HandleCore(DeleteCommitmentCommand command) { var validationResult = _validator.Validate(command); if (!validationResult.IsValid) { throw new ValidationException(validationResult.Errors); } LogMessage(command); var commitment = await _commitmentRepository.GetCommitmentById(command.CommitmentId); if (commitment == null) { throw new ResourceNotFoundException(); } CheckAuthorization(command, commitment); CheckCommitmentStatus(commitment); CheckEditStatus(command, commitment); CheckPaymentStatus(commitment.Apprenticeships); await _commitmentRepository.DeleteCommitment(command.CommitmentId); await CreateHistory(commitment, command.Caller.CallerType, command.UserId, command.UserName); await _apprenticeshipEvents.BulkPublishDeletionEvent(commitment, commitment.Apprenticeships, "APPRENTICESHIP-DELETED"); }
protected override async Task HandleCore(BulkUploadApprenticeshipsCommand command) { LogMessage(command); var validationResult = _validator.Validate(command); if (!validationResult.IsValid) { throw new ValidationException(validationResult.Errors); } var commitment = await _commitmentRepository.GetCommitmentById(command.CommitmentId); if (commitment == null) { throw new ResourceNotFoundException($"Provider { command.Caller.Id } specified a non-existent Commitment { command.CommitmentId}"); } // TODO: This logic can be shared between handlers. CheckAuthorization(command, commitment); CheckEditStatus(command, commitment); CheckCommitmentStatus(commitment); var apprenticeships = command.Apprenticeships.Select(x => MapFrom(x, command)).ToList(); await ValidateOverlaps(apprenticeships); var insertedApprenticeships = await _apprenticeshipRepository.BulkUploadApprenticeships(command.CommitmentId, apprenticeships); await Task.WhenAll( _apprenticeshipEvents.BulkPublishDeletionEvent(commitment, commitment.Apprenticeships, "APPRENTICESHIP-DELETED"), _apprenticeshipEvents.BulkPublishEvent(commitment, insertedApprenticeships, "APPRENTICESHIP-CREATED"), CreateHistory(commitment, insertedApprenticeships, command.Caller.CallerType, command.UserId, command.UserName) ); }