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 ModulePassed(int moduleHistoryId) { ModuleHistory moduleHistory = await _db.ModuleHistories.SingleOrDefaultAsync(mh => mh.Id == moduleHistoryId); moduleHistory.IsPassed = true; await _db.SaveChangesAsync(); var lectureId = await(from l in _db.Lectures join lh in _db.LecturesHistories on l.Id equals lh.LectureId where lh.Id == moduleHistory.LectureHistoryId select l).Select(l => l.Id).SingleOrDefaultAsync(); foreach (var studentId in QuizHub.Students.GetStudents(moduleHistoryId)) { await _quizManager.ResovlePassedRealtimeQuiz(moduleHistory.ModuleId, studentId, moduleHistoryId, lectureId); } _timerAssociates.DisposeTimer(moduleHistoryId, TimerAssociates.TimerType.Realtime); }
public async Task StartModule(int moduleHistoryId) { ModuleHistory moduleHistory = await _db.ModuleHistories.SingleOrDefaultAsync(mh => mh.Id == moduleHistoryId); if (moduleHistory.IsPassed) { var responsesToDelete = from r in _db.RealtimeResponses where r.LectureHistoryId == moduleHistory.LectureHistoryId join q in _db.Questions on r.QuestionId equals q.Id where q.ModuleId == moduleHistory.ModuleId select r; _db.RealtimeResponses.RemoveRange(responsesToDelete); moduleHistory.IsPassed = false; } moduleHistory.StartTime = DateTime.UtcNow; TimeSpan minutesToPass = TimeSpan.FromMinutes(await _db.Modules.Where(m => m.Id == moduleHistory.ModuleId) .Select(m => m.MinutesToPass).SingleOrDefaultAsync()); _timerAssociates.StartTimer(moduleHistoryId, minutesToPass, TimerAssociates.TimerType.Realtime); await _db.SaveChangesAsync(); }