Example #1
0
        public QuizSolution SaveSolution(SolutionForEvaluationModel quizSolution, string userId)
        {
            var quiz = this.quizzes.GetById(quizSolution.ForQuizId);

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

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

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

            try
            {
                this.solutions.Add(newSolution);
                this.solutions.Save();
            }
            catch (Exception ex)
            {
                // Todo: Implement concrete exception cases
                throw new QuizEvaluationException("Something went wrong while saving your solution.", ex);
            }

            return(newSolution);
        }
Example #2
0
        private List <Answer> ExtractSelectedAnswers(Quiz quiz, SolutionForEvaluationModel quizSolution)
        {
            var result = quiz.Questions
                         .SelectMany(q => q.Answers)
                         .Where(a => quizSolution.SelectedAnswerIds.Any(id => id == a.Id))
                         .ToList();

            return(result);
        }
Example #3
0
        public IHttpActionResult Solve(SolutionForEvaluationModel model)
        {
            if (!this.ModelState.IsValid)
            {
                return(this.BadRequest(this.ModelState));
            }

            try
            {
                var result = this.quizzesEvalService.SaveSolution(model, this.UserId);
                return(this.Ok(this.quizzesEvalService.EvaluateSolution(result)));
            }
            catch (QuizEvaluationException ex)
            {
                return(this.BadRequest(ex.Message));
            }
        }
        public IHttpActionResult Solve(SolutionForEvaluationModel model)
        {
            if (!this.ModelState.IsValid)
            {
                return this.BadRequest(this.ModelState);
            }

            try
            {
                var result = this.quizzesEvalService.SaveSolution(model, this.UserId);
                return this.Ok(this.quizzesEvalService.EvaluateSolution(result));
            }
            catch (QuizEvaluationException ex)
            {
                return this.BadRequest(ex.Message);
            }
        }
        public ActionResult Solve(SolutionForEvaluationModel solution)
        {
            if (!this.ModelState.IsValid)
            {
                this.TempData["error"] = "Invalid Solution Data";
                this.RedirectToAction("Solve");
            }

            try
            {
                var result = this.quizzesEvalService.SaveSolution(solution, this.UserId);
                return this.RedirectToAction("Result", new { solutionId = result.Id });
            }
            catch (QuizEvaluationException ex)
            {
                this.TempData["error"] = ex.Message;
                return this.RedirectToAction("Solve");
            }
        }
        public ActionResult Solve(SolutionForEvaluationModel solution)
        {
            if (!this.ModelState.IsValid)
            {
                this.TempData["error"] = "Invalid Solution Data";
                this.RedirectToAction("Solve");
            }

            try
            {
                var result = this.quizzesEvalService.SaveSolution(solution, this.UserId);
                return(this.RedirectToAction("Result", new { solutionId = result.Id }));
            }
            catch (QuizEvaluationException ex)
            {
                this.TempData["error"] = ex.Message;
                return(this.RedirectToAction("Solve"));
            }
        }
        public QuizSolution SaveSolution(SolutionForEvaluationModel quizSolution, string userId)
        {
            var quiz = this.quizzes.GetById(quizSolution.ForQuizId);

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

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

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

            try
            {
                this.solutions.Add(newSolution);
                this.solutions.Save();
            }
            catch (Exception ex)
            {
                // Todo: Implement concrete exception cases
                throw new QuizEvaluationException("Something went wrong while saving your solution.", ex);
            }

            return newSolution;
        }
        private List<Answer> ExtractSelectedAnswers(Quiz quiz, SolutionForEvaluationModel quizSolution)
        {
            var result = quiz.Questions
                .SelectMany(q => q.Answers)
                .Where(a => quizSolution.SelectedAnswerIds.Any(id => id == a.Id))
                .ToList();

            return result;
        }