public async Task <Response <QuestionViewModel> > Handle(GetQuestion request, CancellationToken cancellationToken) { var question = await _questionsRepository.Get(request.Id); if (question is null) { return(ObjectNotFoundError .CreateFor <Question>(request.Id)); } var viewModel = _mapper.Map <Question, QuestionViewModel>(question); return(viewModel); }
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 <QuestionResultViewModel> > Handle(GetQuestionResult request, CancellationToken cancellationToken) { var identity = _identityService.GetIdentity(); var userVotes = await _votesRepository.GetByVoter(identity.Id); var userVoted = userVotes.Any(v => v.QuestionId == request.QuestionId); if (!userVoted) { return(new AuthorizationError( "results are only visible after voting")); } var question = await _questionsRepository.Get(request.QuestionId); if (question is null) { return(ObjectNotFoundError.CreateFor <Question>(request.QuestionId)); } var viewModel = _mapper.Map <Question, QuestionResultViewModel>(question); return(viewModel); }