Example #1
0
        public async Task UpdateQuestionAsync(Question question)
        {
            if (await DoesQuestionHaveUserAnswersAsync(question.Id))
            {
                throw new Exception("A questão não pode ser alterada, pois usuários já responderam ela.");
            }
            else if (question.Answers.Count <= 1)
            {
                throw new Exception("A questão deve ter mais de uma alternativa possível.");
            }
            else if (question.Answers.Count(q => q.IsAnswerCorrect) != 1)
            {
                throw new Exception("A questão deve ter apenas uma resposta correta.");
            }

            foreach (var existingAnswer in await _answerRepository.FindAsync(a => a.QuestionId == question.Id))
            {
                _answerRepository.Remove(existingAnswer);
            }
            foreach (var newAnswer in question.Answers)
            {
                await _answerRepository.AddAsync(newAnswer);
            }
            _questionRepository.Update(question);
            await _unitOfWork.CommitAsync();
        }
Example #2
0
        public async Task ExecuteAsync(CreateAnswerCommand message, CancellationToken token)
        {
            var question = await _questionRepository.GetAsync(message.QuestionId, token);

            if (question == null)
            {
                throw new ArgumentException("question doesn't exits");
            }

            if (question.Status != ItemStatus.Public)
            {
                throw new ArgumentException("question doesn't exits");
            }

            var user = await _userRepository.LoadAsync(message.UserId, token);

            if (user.Transactions.Score < Privileges.Post)
            {
                var pendingAnswers = await _answerRepository.GetNumberOfPendingAnswer(user.Id, token);

                var pendingAnswerAfterThisInsert = pendingAnswers + 1;
                if (pendingAnswerAfterThisInsert > 5)
                {
                    throw new QuotaExceededException();
                }
            }
            //var answers = question.Answers;

            //we can check if we can create sql query to check answer with regular expression
            //and we can create sql to check if its not the same user
            //var regex = new Regex(@"[,`~'<>?!@#$%^&*.;_=+()\s]", RegexOptions.Compiled);
            //var nakedString = Regex.Replace(message.Text, regex.ToString(), "");
            //foreach (var answer in answers.Where(w =>
            //    w.Status.State == ItemState.Ok

            //))
            //{
            //    var check = Regex.Replace(answer.Text, regex.ToString(), "");
            //    if (nakedString == check)
            //    {
            //        throw new DuplicateRowException("Duplicate answer");
            //    }

            //}

            var newAnswer = question.AddAnswer(message.Text, user);
            await _answerRepository.AddAsync(newAnswer, token);
        }
        // add question and answers to questionnaire
        public async Task <Questionnaire> AddQuestionsAsync(int questionnaireId,
                                                            IEnumerable <Question> questions)
        {
            VerifyManagementPermission();
            int authId = GetClaimId(ClaimType.UserId);

            foreach (var question in questions)
            {
                question.QuestionnaireId = questionnaireId;
                var addedQuestion = await _questionRepository.AddSaveAsync(authId, question);

                foreach (var answer in question.Answers)
                {
                    answer.QuestionId = addedQuestion.Id;
                    await _answerRepository.AddAsync(authId, answer);
                }
                await _answerRepository.SaveAsync();
            }

            return(await _questionnaireRepository.GetByIdAsync(questionnaireId));
        }
Example #4
0
        public async Task <ProcessResult> UpdateQuestionAsync(Question question)
        {
            if (await DoesQuestionHaveUserAnswersAsync(question.Id))
            {
                return(new ProcessResult {
                    Message = "A questão não pode ser alterada, pois usuários já responderam ela.", Result = false
                });
            }
            else if (question.Answers.Count <= 1)
            {
                return(new ProcessResult {
                    Message = "A questão deve ter mais de uma alternativa possível.", Result = false
                });
            }
            else if (question.Answers.Count(q => q.IsAnswerCorrect) != 1)
            {
                return(new ProcessResult {
                    Message = "A questão deve ter apenas uma resposta correta.", Result = false
                });
            }

            foreach (var existingAnswer in await _answerRepository.FindAsync(a => a.QuestionId == question.Id))
            {
                _answerRepository.Remove(existingAnswer);
            }
            foreach (var newAnswer in question.Answers)
            {
                await _answerRepository.AddAsync(newAnswer);
            }
            _questionRepository.Update(question);
            await _unitOfWork.CommitAsync();

            return(new ProcessResult {
                Message = "Pergunta atualizada com sucesso", Result = true
            });
        }
        public async Task <bool> CreateAsync(AnswerRequest answerRequest)
        {
            Answer answer = _mapper.Map <AnswerRequest, Answer>(answerRequest);

            return(await _answerRepository.AddAsync(answer));
        }
Example #6
0
 public async Task <Answer> AddAsync(Answer entity)
 {
     return(await repository.AddAsync(entity));
 }