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)); }
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)); }
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); }
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); }