public override async Task AddAnswersUnitAsync(QuizAnswersUnit answersUnit) { answersUnit.Id = null; answersUnit.AnswerDate = DateTime.Now; answersUnit.CurrentReanswerCount = 0; answersUnit.IsCompleted = answersUnit.CheckCompleted(await GetByIdAsync(answersUnit.PollBaseId)); await AssessAnswersUnitAsync(answersUnit); await AnswersUnits.InsertOneAsync(answersUnit); }
public async Task <Dictionary <int, int> > GetPollQuestionAnswersPlotInfoAsync(string questionId) { var answers = await AnswersUnits.AsQueryable().SelectMany(unit => unit.Answers).Where(answer => answer.QuestionId == questionId).ToListAsync(); var questionOptionsCount = (await GetPollBaseByQuestionIdAsync(questionId)).Questions.Single(pollQuestion => pollQuestion.Id == questionId).AnswerOptions.Count; var dictionary = new Dictionary <int, int>(); for (int i = 0; i < questionOptionsCount; i++) { dictionary.Add(i, answers.Count(answer => answer.SelectedOptions.Any(option => option == i))); } return(dictionary); }
public override async Task UpdateAnswersUnitAsync(QuizAnswersUnit newAnswersUnit, QuizAnswersUnit oldAnswersUnit) { newAnswersUnit.Id = oldAnswersUnit.Id; newAnswersUnit.AnswerDate = DateTime.Now; newAnswersUnit.CreatorUserId = oldAnswersUnit.CreatorUserId; newAnswersUnit.CurrentReanswerCount = oldAnswersUnit.CurrentReanswerCount + 1; newAnswersUnit.IsCompleted = newAnswersUnit.CheckCompleted(await GetByIdAsync(newAnswersUnit.PollBaseId)); await AssessAnswersUnitAsync(newAnswersUnit); await AnswersUnits.DeleteOneAsync(answer => answer.Id == newAnswersUnit.Id); await AnswersUnits.InsertOneAsync(newAnswersUnit); }
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 <IEnumerable <IGrouping <string, BriefQuizAnswerResponse> > > GetQuizAnswersAsync(string quizId) { var query = from answersUnit in AnswersUnits.AsQueryable().Where(unit => unit.PollBaseId == quizId) join userModel in Users.AsQueryable() on answersUnit.CreatorUserId equals userModel.UserId select new BriefQuizAnswerResponse { Id = answersUnit.Id, FullName = userModel.LastName + " " + userModel.FirstName, GroupName = userModel.GroupName, AnswerDate = answersUnit.AnswerDate, CreatorUserId = answersUnit.CreatorUserId, TotalAssessment = answersUnit.TotalAssessment, IsChecked = answersUnit.IsChecked }; var responses = await query.ToListAsync(); return(responses.ToLookup(r => r.GroupName)); }
public async Task <IEnumerable <IGrouping <string, PollAnswerResponse> > > GetPollQuestionAnswersAsync(string questionId) { var query = from answersUnit in AnswersUnits.AsQueryable() join userModel in Users.AsQueryable() on answersUnit.CreatorUserId equals userModel.UserId select new { FullName = userModel.LastName + " " + userModel.FirstName, userModel.GroupName, answersUnit.AnswerDate, answersUnit.Answers, answersUnit.CreatorUserId }; var pollAnswerResponses = (await query.ToListAsync()).Where(t => t.Answers.Any(a => a.QuestionId == questionId)).Select(t => new PollAnswerResponse() { FullName = t.FullName, AnswerDate = t.AnswerDate, CreatorUserId = t.CreatorUserId, Group = t.GroupName, SelectedOptions = t.Answers.Single(ans => ans.QuestionId == questionId).SelectedOptions.Select(i => i + 1), }); return(pollAnswerResponses.ToLookup(response => response.Group)); }