Example #1
0
        public IActionResult PostNewAnswer(List <NewAnswerDto> answerInputs)
        {
            try
            {
                // UoW is started here to make sure the request either fails or succeeds fully
                _unitOfWorkManager.StartUnitOfWork();
                List <Answer> answers = new List <Answer>();

                answerInputs.ForEach(answer =>
                {
                    Answer createdAnswer = null;
                    if (answer.OptionId != null && answer.OptionId != 0)
                    {
                        createdAnswer = _cityOfIdeasController.AddAnswerToOption(answer.UserId, answer.OptionId.Value);
                    }
                    else if (answer.QuestionId != null && answer.QuestionId != 0)
                    {
                        createdAnswer =
                            _cityOfIdeasController.AddAnswerToQuestion(answer.Content, answer.UserId,
                                                                       answer.QuestionId.Value);
                    }
                    else
                    {
                        throw new Exception("Invalid answer: either option or question id should be given.");
                    }

                    if (createdAnswer != null)
                    {
                        answers.Add(createdAnswer);
                    }
                });

                _unitOfWorkManager.EndUnitOfWork();

                return(Ok(_mapper.Map <List <AnswerDto> >(answers)));
            }
            catch (Exception e)
            {
                return(BadRequest(e.Message));
            }
        }