Example #1
0
        public async Task <IActionResult> Passing(UserAnswer userAnswer)
        {
            var userId   = GetUserId();
            var question = await _db.TestQuestions
                           .Include(q => q.Test)
                           .ThenInclude(t => t.TestQuestions)
                           .SingleAsync(q => q.Id == userAnswer.TestQuestionId);

            if (await _db.UserAnswers.AnyAsync(ua => ua.UserId == userId && ua.TestQuestionId == question.Id))
            {
                return(RedirectToAction("Index"));
            }

            userAnswer.UserId = userId;
            await _testsManager.ProcessUserAnswer(userAnswer);

            if (question.IsLastQuestion)
            {
                var result = await _testsManager.GetUserTestResult(userAnswer);

                return(RedirectToAction("Result", new { testId = result.TestId, userId = result.UserId }));
            }

            var test         = question.Test;
            var nextQuestion = test.TestQuestions
                               .OrderBy(tq => tq.Id)
                               .SkipWhile(q => q.Id != question.Id)
                               .Skip(1)
                               .First();

            return(RedirectToAction("Passing", new { testId = test.Id, questionId = nextQuestion.Id }));
        }