Пример #1
0
        public UserAnswers SaveSolution(QuizEvaluationDto quizSolution, string userId)
        {
            var quiz = this.quizzes.GetById(quizSolution.ForQuizId);

            if (quizSolution.SelectedAnswerIds.Count != quiz.NumberOfQuestions &&
                quizSolution.SelectedAnswerIds.Count != quiz.Questions.Count)
            {
                throw new Exception("Invalid Solution: Questions count mismatch");
            }

            List <Solutions> selectedAnswers = this.ExtractSelectedAnswers(quiz, quizSolution);

            var newSolution = new UserAnswers
            {
                ByUserId        = userId,
                ForQuiz         = quiz,
                SelectedAnswers = selectedAnswers
            };

            try
            {
                this.solutions.Add(newSolution);
                this.solutions.Save();
            }
            catch (Exception ex)
            {
                throw new Exception("Something went wrong while saving your solution.", ex);
            }

            return(newSolution);
        }
Пример #2
0
        private List <Solutions> ExtractSelectedAnswers(Quiz quiz, QuizEvaluationDto quizSolution)
        {
            var result = quiz.Questions
                         .SelectMany(q => q.Answers)
                         .Where(a => quizSolution.SelectedAnswerIds.Any(id => id == a.Id))
                         .ToList();

            return(result);
        }
Пример #3
0
        public IHttpActionResult Solve(QuizEvaluationDto model)
        {
            if (!this.ModelState.IsValid)
            {
                return(this.BadRequest(this.ModelState));
            }

            try
            {
                var result = this.quizEvaluationService.SaveSolution(model, this.UserId);
                return(this.Ok(this.quizEvaluationService.Evaluate(result)));
            }
            catch (Exception ex)
            {
                return(this.BadRequest(ex.Message));
            }
        }
Пример #4
0
        public ActionResult Solve(QuizEvaluationDto solution)
        {
            if (!this.ModelState.IsValid)
            {
                this.TempData["error"] = "Invalid Solution Data";
                return(this.RedirectToAction("Solve"));
            }

            try
            {
                var result = this.quizEvaluationService.SaveSolution(solution, this.UserId);
                return(this.RedirectToAction("Performance", "Results", new { solutionId = result.Id }));
            }
            catch (Exception ex)
            {
                this.TempData["error"] = ex.Message;
                return(this.RedirectToAction("Solve"));
            }
        }