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);
        }
Example #2
0
 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);
        }