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);
        }
        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);
        }