コード例 #1
0
        public async Task <ActionResult> Put(int id, [FromBody] ApplicationCore.Models.Question question)
        {
            try
            {
                if (id != question.QuestionId)
                {
                    return(BadRequest("Question Ids do not match."));
                }
                if (question.QuestionChoices.Count < 4)
                {
                    return(BadRequest("Question must have at least 4 choices."));
                }

                var existing = await _questionRepo.GetQuestionAsync(id);

                if (existing is null)
                {
                    return(NotFound());
                }

                var success = await _questionRepo.EditQuestionAsync(question);

                if (!success)
                {
                    return(BadRequest());
                }

                return(NoContent());
            }
            catch
            {
                return(BadRequest());
            }
        }
コード例 #2
0
        public async Task <ApplicationCore.Models.Question> AddQuestionAsync(ApplicationCore.Models.Question question)
        {
            if (question is null)
            {
                throw new ArgumentNullException(nameof(question));
            }

            Entities.Question entity = Mapper.Map(question);

            await _context.Question.AddAsync(entity);

            await _context.SaveChangesAsync();

            //add questionchoices to db
            foreach (var choice in question.QuestionChoices)
            {
                var coreChoice = new ApplicationCore.Models.Choice {
                    QuestionId   = entity.QuestionId,
                    Correct      = (bool)choice.Correct,
                    ChoiceString = choice.ChoiceString
                };

                await AddChoiceAsync(coreChoice);
            }

            await _context.SaveChangesAsync();

            return(Mapper.Map(entity));
        }
コード例 #3
0
        public async Task <bool> EditQuestionAsync(ApplicationCore.Models.Question question)
        {
            if (question == null)
            {
                throw new ArgumentException();
            }

            try
            {
                var existing = await _context.Question
                               .Include(q => q.Choice)
                               .FirstOrDefaultAsync(item => item.QuestionId == question.QuestionId);

                Entities.Question newQuestion = Mapper.MapQuestionWithChoices(question);
                _context.Entry(existing).CurrentValues.SetValues(newQuestion);

                //add choices if they don't exist, or update them if they exist
                foreach (var choice in question.QuestionChoices)
                {
                    var existingChoice = existing.Choice
                                         .FirstOrDefault(c => c.ChoiceId == choice.ChoiceId);

                    if (existingChoice == null)
                    {
                        existing.Choice.Add(Mapper.MapChoiceWithoutId(choice));
                    }
                    else
                    {
                        _context.Entry(existingChoice).CurrentValues.SetValues(Mapper.Map(choice));
                    }
                }

                //delete choices not included in request but still in DB
                foreach (var choice in existing.Choice)
                {
                    if (!question.QuestionChoices.Any(c => c.ChoiceId == choice.ChoiceId))
                    {
                        _context.Remove(choice);
                    }
                }

                await _context.SaveChangesAsync();

                return(true);
            }
            catch
            {
                return(false);
            }
        }
コード例 #4
0
        public async Task <IActionResult> Post([FromBody] ApplicationCore.Models.Question question)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest());
            }
            if (question.QuestionChoices.Count < 4)
            {
                return(BadRequest("Question must have at least 4 choices."));
            }
            if (!await _questionRepo.CategoryExistsAsync((int)question.CategoryId))
            {
                return(BadRequest($"Category with id {question.CategoryId} does not exist."));
            }

            var createdItem = await _questionRepo.AddQuestionAsync(question);

            return(CreatedAtAction(
                       actionName: nameof(Get),
                       routeValues: new { id = createdItem.QuestionId },
                       value: createdItem));
        }