Beispiel #1
0
        public async Task <IActionResult> CreateQuestion(QuestionCreateDto question)
        {
            try
            {
                var existing = _repository.GetQuestionByNumberAsync(question.Number);

                if (existing != null)
                {
                    return(BadRequest("Question is use"));
                }

                var entity = question.MapCreateDtoToEntity();

                await _repository.AddAsync(entity);

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

                return(CreatedAtRoute(nameof(GetQuestionByNumber),
                                      new { number = question.Number },
                                      entity.MapToReadModel()));
            }
            catch (Exception)
            {
                return(StatusCode(StatusCodes.Status500InternalServerError, "Database Failure"));
            }
        }
Beispiel #2
0
 public async Task <ResultResponse <QuestionDto> > AddQuestion(QuestionCreateDto dto)
 {
     if (await IsInRole(Roles.Admin, Roles.Moderator))
     {
         return(await _questionsService.AddQuestionAsync(dto, UserId.Value));
     }
     return(ResultResponse <QuestionDto> .GetBadResponse(BussinesLogic.Models.StatusCode.Forbidden));
 }
Beispiel #3
0
        public async Task <IActionResult> Post([FromBody] QuestionCreateDto questionCreateDto)
        {
            var question        = _mapper.Map <Question>(questionCreateDto);
            var createdQuestion = await _questionsRepository.CreateQuestion(question);

            var questionToReturn = _mapper.Map <QuestionForDetailDto>(createdQuestion);

            return(Ok(questionToReturn));
        }
 public static Question MapCreateDtoToEntity(this QuestionCreateDto dto)
 {
     return(new Question
     {
         Number = dto.Number,
         Content = dto.Content,
         CorrectAnswer = dto.CorrectAnswer,
         ChapterId = dto.ChapterId
     });
 }
        public ActionResult <QuestionReadDto> CreateQuestion(QuestionCreateDto questionCreateDto)
        {
            var questionModel = _mapper.Map <QuestionModel>(questionCreateDto);

            _repo.CreateQuestion(questionModel);
            _repo.SaveChanges();

            var questionReadDto = _mapper.Map <QuestionReadDto>(questionModel);

            return(CreatedAtRoute(nameof(GetQuestionById), new { Id = questionReadDto.Qid }, questionReadDto));
        }
Beispiel #6
0
        public async Task <ResultResponse <QuestionDto> > AddQuestionAsync(QuestionCreateDto dto, int userId)
        {
            try
            {
                // Тексты вариантов не должны содержать | , т.к. этот символ используется в STRING_AGG в progress.questionsview
                // != false, потому что может быть как true, так и null, и эти оба варианта нам не подходят = ошибка
                if (dto?.Choises?.Any(x => x.Text.Contains('|')) != false)
                {
                    return(ResultResponse <QuestionDto> .GetBadResponse(StatusCode.NotFound, "Тексты вариантов ответа не должны содержать знак |"));
                }

                var user = await _usersRepository.GetAsync(userId);

                if (user == null)
                {
                    return(ResultResponse <QuestionDto> .GetBadResponse(StatusCode.NotFound, "Пользователь не найден"));
                }
                var question = _mapper.Map <Question>(dto);
                question.creator_id = userId;
                question.created    = DateTime.Now;

                var addedQuestion = await _questionsRepository.AddAsync(question);

                if (addedQuestion == null)
                {
                    return(ResultResponse <QuestionDto> .GetInternalServerErrorResponse("Произошла ошибка при добавлении опроса"));
                }

                var choises = _mapper.Map <IEnumerable <Choise> >(dto.Choises);
                foreach (var ch in choises)
                {
                    ch.question_id = addedQuestion.id;
                    var addedChoise = await _choisesRepository.AddAsync(ch);

                    if (addedChoise == null)
                    {
                        return(ResultResponse <QuestionDto> .GetInternalServerErrorResponse("Произошла ошибка при добавлении варианта ответа"));
                    }
                }

                var questionView = await _questionsViewRepository.GetAsync(question.id);

                var questionMiddleDto = _mapper.Map <QuestionFullDto>(questionView);                // Конвертируем в промежуточный ДТО
                var addedQuestionDto  = _mapper.Map <QuestionDto>(questionMiddleDto);
                return(ResultResponse <QuestionDto> .GetSuccessResponse(addedQuestionDto));
            }
            catch (Exception ex)
            {
                _progressLogger.Error(ex, new { dto, userId }, GetType().Name, nameof(AddQuestionAsync));
                return(ResultResponse <QuestionDto> .GetInternalServerErrorResponse());
            }
        }
        public IActionResult CreateQuestion([FromBody] QuestionCreateDto question)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest());
            }

            if (question == null)
            {
                return(BadRequest());
            }
            var questionEnties = Mapper.Map <Questions>(question);

            _questionRepository.AddQuestion(questionEnties);
            if (!_questionRepository.Save())
            {
                return(StatusCode(500, "Đăng ký câu hỏi không thành công !"));
            }
            return(Ok(questionEnties));
        }
        public ActionResult <QuestionReadDto> CreateQuestion(QuestionCreateDto questionCreateDto)
        {
            Question questionModel;

            if (questionCreateDto.QuestionType == QuestionType.MULTI_CHOICE)
            {
                questionModel = _mapper.Map <MultiChoiceQuestion>(questionCreateDto);
            }
            else if (questionCreateDto.QuestionType == QuestionType.FILL_IN_CODE)
            {
                questionModel = _mapper.Map <FillInCodeQuestion>(questionCreateDto);
            }
            else
            {
                // return error message that question type not valid
                return(BadRequest("Question type " + questionCreateDto.QuestionType + " is not a valid type"));
            }

            // map the tags
            foreach (TagCreateDto tagDto in questionCreateDto.Tags)
            {
                var tagModel = _repository.GetTagById(tagDto.Id);
                if (tagModel != null)
                {
                    questionModel.Tags.Add(tagModel);
                }
                else
                {
                    var newTag = _mapper.Map <TagCreateDto, Tag>(tagDto);
                    questionModel.Tags.Add(newTag);
                }
            }

            _repository.CreateQuestion(questionModel);
            _repository.SaveChanges();


            var questionReadDto = _mapper.Map <QuestionReadDto>(questionModel);

            return(CreatedAtRoute(nameof(GetQuestionById), new { Id = questionReadDto.Id }, questionReadDto));
        }
        public ActionResult <Question> Post([FromBody] QuestionCreateDto questionCreateDto)
        {
            if (questionCreateDto == null)
            {
                return(BadRequest());
            }

            this.HttpContext.Items.TryGetValue("UserId", out var userId);
            questionCreateDto.CreatedBy = Guid.Parse(userId.ToString());

            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }

            Question question = _mapper.DtoToEntity(questionCreateDto);

            _writeQuestionRepository.Create(question);
            _writeQuestionRepository.SaveChanges();

            return(CreatedAtRoute("GetByQuestionId", new { id = question.Id }, question));
        }