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")); } }
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)); }
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)); }
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)); }