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