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); }
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; }