Ejemplo n.º 1
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="attempt"></param>
        /// <param name="passScore"></param>
        /// <param name="timeSpent"></param>
        /// <returns></returns>
        public async Task <bool> FinishQuizAsync(QuizAttempt attempt, int?passScore, int timeSpent)
        {
            if (attempt.Status != QuizAttemptStatus.Incomplete)
            {
                return(false);
            }

            var questions = (await questionManager.GetQuizQuestions(attempt.UserId, attempt.QuizId)).ToList();

            var options = (from qq in Context.QuizQuestions
                           join q in Context.Questions on qq.QuestionId equals q.Id
                           join o in Context.Options on q.Id equals o.QuestionId
                           join a in Context.Answers on new { AttemptId = attempt.Id, QuestionId = q.Id, OptionId = q.Id } equals new { a.AttemptId, a.QuestionId, a.OptionId } into ad
                           from a in ad.DefaultIfEmpty()
                           where qq.QuizId == attempt.QuizId
                           select new QuestionAnswer {
                QuestionId = q.Id, IsCorrect = o.IsCorrect, IsMarked = a != null
            }
                           ).ToList();

            var evaluationResult = EvaluateQuiz(questions, options);

            attempt.Score     = evaluationResult.Score;
            attempt.Correct   = evaluationResult.CorrectCount;
            attempt.Incorrect = evaluationResult.IncorrectCount;
            attempt.Status    = EvaluateStatus(evaluationResult.Score, passScore);
            attempt.EndDate   = DateTime.Now;
            attempt.TimeSpent = timeSpent;

            Context.QuizAttempts.Update(attempt);

            await Context.SaveChangesAsync();

            return(true);
        }
Ejemplo n.º 2
0
 public async Task <List <Question> > Get(int id)
 {
     return(await questionManager.GetQuizQuestions(Token.UserId, id));
 }