public async Task <ActionResult <TestResultModel> > SubmitTestResults([FromBody] TestResultAnswers resultModel) { var test = await _dbAccess.GetModuleTest(resultModel.TestId); var questionsWithAnswers = test.Questions.Where(q => q.AnswerOptions.Any(a => a.IsCorrect)).ToList(); var testResult = new TestResultModel { TestId = test.Id, MaxScore = questionsWithAnswers.Count }; testResult.PopulateServiceFields(Request.HttpContext); foreach (var question in questionsWithAnswers) { var correctIds = question.AnswerOptions.Where(a => a.IsCorrect).Select(a => a.Id).ToArray(); var userAnswers = resultModel.QuestionResults.FirstOrDefault(q => q.QuestionId == question.Id)?.SelectedAnswers.ToArray(); if (userAnswers == null || correctIds.Length != userAnswers.Length) { continue; } var intersect = correctIds.Intersect(userAnswers).ToArray(); if (intersect.Length == correctIds.Length) { testResult.Score++; } } return(Ok(await _dbAccess.SubmitTestResult(testResult))); }
public void AddAnswer(TestResult testResult, AnswerAlternative answerAlternative, bool isCorrect) { var context = new SchoolContext(); var testResultAnswer = new TestResultAnswers(); testResultAnswer.AnswerAlternativeID = answerAlternative.AnswerAlternativeID; testResultAnswer.IsCorrect = answerAlternative.IsCorrect; testResultAnswer.TestResultID = testResult.TestResultID; context.TestResultAnswers.Add(testResultAnswer); context.SaveChanges(); }