public static Answer CreateAnswerFromDto(this AnswerCreateOrUpdateDto answer)
 {
     return(new Answer
     {
         Content = answer.Content,
         Key = answer.Key,
     });
 }
Example #2
0
        public async Task <IActionResult> CreateAnswer(int number, AnswerCreateOrUpdateDto answer)
        {
            try
            {
                var answerEntity = answer.CreateAnswerFromDto();

                var question = await _repository.GetQuestionByNumberAsync(number, true);

                if (question == null)
                {
                    return(NotFound($"Could not find any question number: {number}"));
                }

                if (answer == null)
                {
                    return(BadRequest("Answer is required"));
                }

                if (question.Answers == null)
                {
                    question.Answers = new List <Answer>();
                }

                var existing = await _repository.GetAnswerAsync(number, answer.Key);

                if (existing != null)
                {
                    return(BadRequest("Answer in use"));
                }

                question.Answers.Add(answerEntity);

                _repository.Update(question);

                if (!await _unitOfWork.SaveChangeAsync())
                {
                    return(BadRequest());
                }

                return(CreatedAtRoute(nameof(GetByAnswerKey),
                                      new { number = question.Number, key = answerEntity.Key },
                                      answerEntity.MapToReadDto()));
            }
            catch (Exception)
            {
                return(StatusCode(StatusCodes.Status500InternalServerError, "Database failure"));
            }
        }
Example #3
0
        public async Task <IActionResult> UpdateAnswer(int number, int key, AnswerCreateOrUpdateDto answer)
        {
            try
            {
                var question = await _repository.GetQuestionByNumberAsync(number, true);

                if (question == null)
                {
                    return(NotFound($"Could not find any question number: {number}"));
                }

                if (answer == null)
                {
                    return(BadRequest("Answer is required"));
                }

                var answerToUpdate = await _repository.GetAnswerAsync(number, key);

                if (answerToUpdate == null)
                {
                    return(BadRequest($"Could not find any answer with key of {key}"));
                }

                answerToUpdate.UpdateAnswerFromDto(answer);
                _repository.UpdateAnswer(answerToUpdate);

                if (!await _unitOfWork.SaveChangeAsync())
                {
                    return(BadRequest());
                }

                return(NoContent());
            }
            catch (Exception)
            {
                return(StatusCode(StatusCodes.Status500InternalServerError, "Database failure"));
            }
        }
 public static void UpdateAnswerFromDto(this Answer entity, AnswerCreateOrUpdateDto dto)
 {
     entity.Content = !string.IsNullOrWhiteSpace(dto.Content) ? dto.Content : entity.Content;
     entity.Key     = dto.Key > 0 ? dto.Key : entity.Key;
 }