Exemplo n.º 1
0
        public async Task <RealTimeQuizViewModel> SaveResponse(RealTimeQuizViewModel quizVM, int responseId)
        {
            if (await _context.ModuleHistories.AnyAsync(mh => mh.ModuleId == quizVM.ModuleHistoryId && mh.IsPassed))
            {
                return(null);
            }
            if (await _context.RealtimeResponses.AnyAsync(r =>
                                                          r.ModuleHistoryId == quizVM.ModuleHistoryId && r.StudentId == quizVM.Student.Id &&
                                                          r.QuestionId == quizVM.Question.Id))
            {
                return(await _quizManager.UpdateQuizModel(quizVM));
            }
            RealtimeRespons response = new RealtimeRespons
            {
                AnswerId         = responseId,
                LectureHistoryId = quizVM.LectureHistoryId,
                ModuleHistoryId  = quizVM.ModuleHistoryId,
                QuestionId       = quizVM.Question.Id,
                StudentId        = quizVM.Student.Id,
                GroupId          = quizVM.Student.GroupId
            };

            _context.RealtimeResponses.Add(response);
            await _context.SaveChangesAsync();

            Clients.All.ResponseRecieved();
            return(await _quizManager.UpdateQuizModel(quizVM));
        }
Exemplo n.º 2
0
        public async Task <ActionResult> Index(int moduleHistoryId)
        {
            RealTimeQuizViewModel qvm = await _quizManager.GetRealtimeQnA(moduleHistoryId);

            if (qvm == null)
            {
                return(RedirectToAction("Index", "Student"));
            }
            if (qvm.Question == null)
            {
                return(View());
            }
            QuizHub.Students.Add(qvm.ModuleHistoryId, qvm.Student.Id);
            return(View(qvm));
        }
Exemplo n.º 3
0
        public async Task <RealTimeQuizViewModel> GetRealtimeQnA(int moduleHistoryId)
        {
            var student = await AccountCredentials.GetStudent();

            bool studentCanPass = await _studentPageHelper.StudentCanPass(moduleHistoryId, student.Id);

            if (studentCanPass)
            {
                RealTimeQuizViewModel qnA = new RealTimeQuizViewModel();
                if (await _context.RealtimeModulesPasseds.AnyAsync(smp =>
                                                                   smp.StudentId == student.Id && smp.ModuleHistoryId == moduleHistoryId))
                {
                    return(qnA);
                }
                ModuleHistory moduleHistory =
                    await _context.ModuleHistories.SingleOrDefaultAsync(mh => mh.Id == moduleHistoryId);

                int lectureId = _context.LecturesHistories.Where(lh => lh.Id == moduleHistory.LectureHistoryId)
                                .Select(lh => lh.LectureId).SingleOrDefault();
                var question = await _context.Questions.Where(q => q.ModuleId == moduleHistory.ModuleId && q.QuestionType == QuestionType.RealtimeId &&
                                                              !_context.RealtimeResponses.Where(r => r.ModuleHistoryId == moduleHistoryId &&
                                                                                                r.StudentId == student.Id).Select(r => r.QuestionId).Contains(q.Id))
                               .OrderBy(q => Guid.NewGuid()).FirstOrDefaultAsync();

                if (question == null)
                {
                    await ResovlePassedRealtimeQuiz(moduleHistory.ModuleId, student.Id, moduleHistoryId, lectureId);

                    return(qnA);
                }

                qnA = new RealTimeQuizViewModel
                {
                    Question         = question,
                    Student          = student,
                    Answers          = await GetAnswersList(question.Id),
                    LectureHistoryId = moduleHistory.LectureHistoryId,
                    ModuleHistoryId  = moduleHistoryId
                };
                return(qnA);
            }
            return(null);
        }
Exemplo n.º 4
0
        public async Task <RealTimeQuizViewModel> UpdateQuizModel(RealTimeQuizViewModel quizVM)
        {
            int moduleId  = quizVM.Question.ModuleId;
            int lectureId = quizVM.Question.LectureId;

            quizVM.Question = await _context.Questions.Where(q => q.ModuleId == moduleId && q.QuestionType == QuestionType.RealtimeId &&
                                                             !_context.RealtimeResponses.Where(r => r.ModuleHistoryId == quizVM.ModuleHistoryId &&
                                                                                               r.StudentId == quizVM.Student.Id).Select(r => r.QuestionId).Contains(q.Id))
                              .OrderBy(q => Guid.NewGuid()).FirstOrDefaultAsync();

            if (quizVM.Question == null)
            {
                await ResovlePassedRealtimeQuiz(moduleId, quizVM.Student.Id, quizVM.ModuleHistoryId, lectureId);

                return(null);
            }
            quizVM.Answers = await GetAnswersList(quizVM.Question.Id);

            return(quizVM);
        }