Exemplo n.º 1
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.º 2
0
        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);
        }
Exemplo n.º 3
0
        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();
        }