Exemple #1
0
        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();
        }
Exemple #2
0
        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();
        }
Exemple #3
0
        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();
        }