public async Task <Result <IEnumerable <QuizResultResponse> > > GetScores() => await _quizResultService.GetAll();
Example #2
0
        public QuizReviewViewModel ToQuizReviewViewModel(QuizResult quizResult)
        {
            var vm        = new QuizReviewViewModel();
            var quiz      = _quizService.Get(quizResult.QuizId);
            var questions = quiz.Questions.Where(x => x.QuizId == quizResult.QuizId).ToList();


            var qDetails = new List <QuizReviewItemViewModel>();

            foreach (var userAnswer in quizResult.UserAnswers)
            {
                var answer          = _answerService.GetAll().FirstOrDefault(x => x.Id == userAnswer.AnswerId);
                var isAnswerCorrect = answer != null && answer.IsCorrect;
                var question        = questions.First(x => x.Id == userAnswer.QuestionId);
                var questionText    = question.Text;
                var pointsEarned    = isAnswerCorrect ? question.Points : 0;
                qDetails.Add(new QuizReviewItemViewModel
                {
                    IsCorrectAnswer = isAnswerCorrect,
                    QuestionId      = userAnswer.QuestionId,
                    QuestionText    = questionText,
                    PointsEarned    = pointsEarned,
                });
            }

            if (quiz.AllowPoints)
            {
                var totalPoints = questions.Sum(x => x.Points);

                vm.ScoreText = quizResult.Score + " / " + totalPoints + " points";

                vm.ScorePercent = Math.Ceiling(((double)quizResult.Score * 100) / totalPoints);
            }
            else
            {
                vm.ScoreText    = quizResult.Score + " / " + questions.Sum(x => x.Points) + "points";
                vm.ScorePercent = ((double)quizResult.Score * 100) / questions.Sum(x => x.Points);
            }

            vm.Items = qDetails;


            vm.ResultId     = quizResult.Id;
            vm.Score        = quizResult.Score;
            vm.EllapsedTime = quizResult.EllapsedTime;
            vm.UserAnswers  = new List <UserAnswerViewModel>();
            vm.UserAnswers.AddRange(
                quizResult.UserAnswers.Select(x => new UserAnswerViewModel
            {
                AnswerId   = x.AnswerId,
                QuestionId = x.QuestionId
            }));


            vm.EllapsedTimePercent = (int)(quizResult.EllapsedTime / (double)questions.Sum(x => x.EstimatedTime) * 100);
            vm.QuizId = quizResult.QuizId;

            if (_quizResultService.GetAll().Count(x => x.QuizId == quiz.Id) > 1)
            {
                vm.RelativeScore = _quizResultService.GetRelativeScore(quiz.Id, quizResult.Score);
                vm.RelativeTime  = _quizResultService.GetRelativeTime(quiz.Id, quizResult.EllapsedTime);
            }
            else
            {
                vm.RelativeScore = -1;
                vm.RelativeTime  = -1;
            }

            return(vm);
        }