Пример #1
0
        public async Task <IEnumerable <UserOfferedAnswer> > SolveExam(ExamApiSolveInputModel model, string userId)
        {
            var exam = this.Context.Exams
                       .Include(x => x.UserAnswers)
                       .Include(x => x.Questions)
                       .ThenInclude(x => x.PossibleAnswers)
                       .FirstOrDefault(x => x.Id == model.ExamId);

            //TODO: make some validations to exam
            ;
            var selectedAnswers = this.Context.Questions
                                  .SelectMany(x => x.PossibleAnswers)
                                  .Where(x => model.SelectedAnswers.Any(ans => ans.Id == x.Id))
                                  .ToList();

            foreach (var answer in selectedAnswers)
            {
                var userAnswer = new UserAnswer()
                {
                    ExamId = model.ExamId,
                    UserId = userId
                };

                var userOfferedAnswer = new UserOfferedAnswer()
                {
                    UserAnswer    = userAnswer,
                    OfferedAnswer = answer
                };

                this.Context.UserAnswers.Add(userAnswer);
                this.Context.UserOfferedAnswers.Add(userOfferedAnswer);
            }

            await this.Context.SaveChangesAsync();

            var result = this.Context.UserOfferedAnswers
                         .Include(x => x.OfferedAnswer)
                         .Include(x => x.UserAnswer)
                         .ToList();

            return(result);
        }
Пример #2
0
        public IActionResult Solve(ExamApiSolveInputModel model)
        {
            if (!this.ModelState.IsValid)
            {
                return(this.BadRequest());
            }

            //TODO: fix the userid is null
            try
            {
                var userId = User.FindFirstValue(ClaimTypes.NameIdentifier);
                var result = this.ApiService.SolveExam(model, userId);
                //TODO: check if need to evaluate
                return(this.Ok());
            }
            catch (Exception e)
            {
                return(this.BadRequest(e.Message));
            }
        }