public async Task <Result <IEnumerable <QuizResultResponse> > > GetScores() => await _quizResultService.GetAll();
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); }