예제 #1
0
        public async Task DeleteQuestionAsync(int questionId)
        {
            if (await DoesQuestionHaveUserAnswersAsync(questionId))
            {
                throw new Exception("A questão não pode ser excluída, pois usuários já responderam ela.");
            }

            foreach (var existingAnswer in await _answerRepository.FindAsync(a => a.QuestionId == questionId))
            {
                _answerRepository.Remove(existingAnswer);
            }
            var question = await FindQuestionByIdAsync(questionId);

            _questionRepository.Remove(question);
            await _unitOfWork.CommitAsync();
        }
예제 #2
0
        public async Task UpdateRankingAfterUserAnswerAsync(AnsweredQuestion answeredQuestion)
        {
            var question = await _questionRepository.FindAsync(answeredQuestion.QuestionId);

            var answer = await _answerRepository.FindAsync(answeredQuestion.AnswerId);

            if (!await _questionService.DoesAnswerBelongToQuestionAsync(answeredQuestion.AnswerId, answeredQuestion.QuestionId))
            {
                throw new Exception("A resposta não é uma das respostas possíveis para a questão.");
            }

            bool didUserCompleteTrack = await _questionService.HasUserFinishedTrackAsync(answeredQuestion.UserId, question.TrackId);

            if (answer.IsAnswerCorrect || didUserCompleteTrack)
            {
                var trackRanking = (await _trackRankingRepository
                                    .FindAsync(tr => tr.TrackId == question.TrackId && tr.UserId == answeredQuestion.UserId))
                                   .FirstOrDefault();
                if (answer.IsAnswerCorrect)
                {
                    trackRanking.Points += (int)question.QuestionLevel;
                }
                if (didUserCompleteTrack)
                {
                    trackRanking.CompletedTime = DateTime.UtcNow - trackRanking.StartedAtUtc;
                }
                _trackRankingRepository.Update(trackRanking);
                await _unitOfWork.CommitAsync();
            }
        }
예제 #3
0
        public async Task <ProcessResult> DeleteQuestionAsync(int questionId)
        {
            if (await DoesQuestionHaveUserAnswersAsync(questionId))
            {
                return(new ProcessResult {
                    Message = "A questão não pode ser excluída, pois usuários já responderam ela.", Result = false
                });
            }

            foreach (var existingAnswer in await _answerRepository.FindAsync(a => a.QuestionId == questionId))
            {
                _answerRepository.Remove(existingAnswer);
            }
            var question = await FindQuestionByIdAsync(questionId);

            _questionRepository.Remove(question);
            await _unitOfWork.CommitAsync();

            return(new ProcessResult {
                Message = "Pergunta deletada com sucesso", Result = true
            });
        }