protected IActionResult HandleErrors <TData>(Response <TData> response, Func <TData, IActionResult> onSuccess) where TData : class { return(response.Match( error => error switch { AuthenticationError ae => Unauthorized(ae), AuthorizationError _ => Forbid(), ObjectAlreadyExistsError oaee => Conflict(oaee), ObjectNotFoundError onfe => NotFound(onfe), UserError ue => UnprocessableEntity(ue), ValidationError ve => BadRequest(ve), DomainError de => UnprocessableEntity(new { de.ExceptionType.Name, error.Message }), _ => StatusCode(StatusCodes.Status500InternalServerError, error) },
public async Task <Response <Guid> > Handle(CreateVoter request, CancellationToken cancellationToken) { var exists = await _voters.Exists(request.Pesel); if (exists) { return(ObjectAlreadyExistsError.CreateFor <Voter>()); } var voter = Voter.Create(request.Pesel); await _domainEvents .CollectFrom(voter) .PublishCollected(cancellationToken); return(voter.Id); }
protected virtual ActionResult CreateObjectExistsConflictErrorResult <TEntity, TModel>(ObjectAlreadyExistsError <TEntity> objectExistsError) { var model = _mapper.Map <TEntity, TModel>(objectExistsError.ExistingObject); var message = new ConcurrencyErrorModel <TModel>() { Message = objectExistsError.Message, CurrentObject = model }; return(new ConflictObjectResult(message)); }