public async Task <long> AssessTextAnswerAsync(AssessTextAnswerModel assessModel) { var answersUnit = await AnswersUnits.Find(unit => unit.Id == assessModel.AnswerUnitId).FirstOrDefaultAsync(); var newAssessment = answersUnit.TotalAssessment + assessModel.Assessment; answersUnit.Answers.Single(a => a.QuestionId == assessModel.QuestionId).IsChecked = true; var unitChecked = answersUnit.Answers.All(a => (bool)a.IsChecked); return((await AnswersUnits.UpdateOneAsync(unit => unit.Id == assessModel.AnswerUnitId && unit.Answers.Any(answer => answer.QuestionId == assessModel.QuestionId), Builders <QuizAnswersUnit> .Update .Set(quiz => quiz.Answers[-1].Assessment, assessModel.Assessment) .Set(quiz => quiz.Answers[-1].IsChecked, true) .Set(quiz => quiz.TotalAssessment, newAssessment) .Set(quiz => quiz.IsChecked, unitChecked) )).ModifiedCount); }
public async Task <ActionResult <long> > AssessTextAnswer(AssessTextAnswerModel assessModel) { var answersUnit = await _quizRepository.GetAnswersUnitByIdAsync(assessModel.AnswerUnitId); var quiz = await _quizRepository.GetByIdAsync(answersUnit.PollBaseId); if (!SenderPermissions.Contains("CanAssessAnyAnswer")) { if (quiz.CreatorUserId != SenderObjectId) { return(StatusCode(StatusCodes.Status403Forbidden, "Only creator or admin can assess answers")); } } var result = new AssessTextAnswerModelValidatorFromData(answersUnit, quiz).Validate(assessModel); result.AddToModelState(ModelState, null); if (!result.IsValid) { return(BadRequest(ModelState)); } return(Ok(await _quizRepository.AssessTextAnswerAsync(assessModel))); }