예제 #1
0
        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);
        }
예제 #2
0
        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);
        }
예제 #3
0
        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);
        }
예제 #4
0
        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);
        }
예제 #5
0
        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));
        }
예제 #6
0
        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));
        }