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(); }
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)); }
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)); }
public async Task <Answer> AddAsync(Answer entity) { return(await repository.AddAsync(entity)); }