public async Task UpdateExamAsync(ExaminerExamModel model) { var examModel = _mapper.Map <Exam>(model); var loaded = await _dbContext.Exams .Include("Questions.Answers") .FirstOrDefaultAsync(x => x.ExamId == examModel.ExamId); if (loaded is null) { throw new NotFoundException("Exam", model.ExamId); } loaded.Name = examModel.Name; loaded.Questions = examModel.Questions; _dbContext.Entry(loaded).State = EntityState.Modified; await _dbContext.SaveChangesAsync(); }
public async Task CreateExamAsync(ExaminerExamModel model) { var exam = _mapper.Map <Exam>(model); foreach (var questionModel in model.Questions) { var question = _mapper.Map <Question>(questionModel); foreach (var answerModel in questionModel.Answers) { question.Answers.Add(_mapper.Map <Answer>(answerModel)); } } await _dbContext.Exams.AddAsync(exam); await _dbContext.SaveChangesAsync(); }
public async Task CheckExamResult(ExaminerExamModel model, string currentUser) { double finalResult = 0; var checkedExam = _mapper.Map <ExaminerExamModel>(_dbContext .Exams .Include("Questions.Answers") .FirstOrDefaultAsync(exam => exam.ExamId == model.ExamId).Result); var examResultModel = new ExamResultModel { ExamId = model.ExamId, ExamResultDate = DateTime.UtcNow, ExamName = checkedExam.Name, UserId = currentUser, UserEmail = _dbContext.Users .FirstOrDefaultAsync(x => x.Id == currentUser).Result.Email }; foreach (var question in model.Questions) { var checkedQuestion = checkedExam.Questions.FirstOrDefault(questionModel => questionModel.QuestionId == question.QuestionId); if (checkedQuestion is null) { throw new Exception("Checked question not found"); } var examResultQuestion = new ExamResultQuestionModel { Question = checkedQuestion.QuestionMessage }; var correctlyAnswered = false; var isFrozen = false; foreach (var answer in question.Answers) { var checkedAnswer = checkedQuestion.Answers .FirstOrDefault(answerModel => answerModel.AnswerId == answer.AnswerId); if (checkedAnswer is null) { throw new Exception("Checked answer not found"); } var examResultAnswerModel = new ExamResultAnswerModel { IsCorrect = checkedAnswer.IsCorrect, IsTouched = answer.IsCorrect, Value = checkedAnswer.Value }; examResultQuestion.ExamResultAnswers.Add(examResultAnswerModel); if (answer.IsCorrect == checkedAnswer.IsCorrect) { correctlyAnswered = true; } else { correctlyAnswered = false; isFrozen = true; } } if (correctlyAnswered && !isFrozen) { finalResult++; } examResultModel.ExamResultQuestions.Add(examResultQuestion); } examResultModel.ExamResultInPercent = (finalResult / examResultModel.ExamResultQuestions.Count) .ToString("P", CultureInfo.InvariantCulture); var result = _mapper.Map <ExamResult>(examResultModel); await _dbContext.ExamResults.AddAsync(result); await _dbContext.SaveChangesAsync(); }