From f95a7ecc5929b0bb769c73fe7e51c99da1d8b86c Mon Sep 17 00:00:00 2001 From: Jan Tymel <410388@mail.muni.cz> Date: Thu, 21 Jan 2021 07:47:59 +0100 Subject: [PATCH] Add API for update of question choices --- ...tiveTrainingDefinitionsRestController.java | 17 ++++++++ .../demo/dto/QuestionChoiceUpdateDto.java | 41 +++++++++++++++++++ .../com/example/demo/mapper/BeanMapper.java | 3 ++ .../demo/service/LevelOperationsService.java | 7 ++++ .../demo/service/QuestionChoiceService.java | 24 +++++++++++ 5 files changed, 92 insertions(+) create mode 100644 src/main/java/com/example/demo/dto/QuestionChoiceUpdateDto.java diff --git a/src/main/java/com/example/demo/controller/AdaptiveTrainingDefinitionsRestController.java b/src/main/java/com/example/demo/controller/AdaptiveTrainingDefinitionsRestController.java index fad0589e..18fbee38 100644 --- a/src/main/java/com/example/demo/controller/AdaptiveTrainingDefinitionsRestController.java +++ b/src/main/java/com/example/demo/controller/AdaptiveTrainingDefinitionsRestController.java @@ -3,6 +3,7 @@ package com.example.demo.controller; import com.example.demo.dto.BaseLevelDto; import com.example.demo.dto.PhaseLevelUpdateDto; import com.example.demo.dto.QuestionChoiceDto; +import com.example.demo.dto.QuestionChoiceUpdateDto; import com.example.demo.dto.QuestionDto; import com.example.demo.dto.TaskUpdateDto; import com.example.demo.dto.InfoLevelUpdateDto; @@ -212,4 +213,20 @@ public class AdaptiveTrainingDefinitionsRestController { return levelOperationsService.createQuestionChoice(questionId); } + + @ApiOperation(httpMethod = "PUT", + value = "Update question choice", + nickname = "updateQuestionChoice", + consumes = MediaType.APPLICATION_JSON_VALUE + ) + @ApiResponses(value = { + @ApiResponse(code = 200, message = "Question choice updated"), + @ApiResponse(code = 500, message = "Unexpected application error") + }) + @PutMapping(path = "/question-choices") + public void updateQuestionChoice( + @ApiParam(value = "Question choice to be updated") @RequestBody QuestionChoiceUpdateDto questionChoiceUpdateDto) { + + levelOperationsService.updateQuestionChoice(questionChoiceUpdateDto); + } } diff --git a/src/main/java/com/example/demo/dto/QuestionChoiceUpdateDto.java b/src/main/java/com/example/demo/dto/QuestionChoiceUpdateDto.java new file mode 100644 index 00000000..8a74c123 --- /dev/null +++ b/src/main/java/com/example/demo/dto/QuestionChoiceUpdateDto.java @@ -0,0 +1,41 @@ +package com.example.demo.dto; + +public class QuestionChoiceUpdateDto { + + private Long id; + private String text; + private boolean correct; + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getText() { + return text; + } + + public void setText(String text) { + this.text = text; + } + + public boolean isCorrect() { + return correct; + } + + public void setCorrect(boolean correct) { + this.correct = correct; + } + + @Override + public String toString() { + return "QuestionChoiceUpdateDto{" + + "id=" + id + + ", text='" + text + '\'' + + ", correct=" + correct + + '}'; + } +} diff --git a/src/main/java/com/example/demo/mapper/BeanMapper.java b/src/main/java/com/example/demo/mapper/BeanMapper.java index 1f380c16..62249a1c 100644 --- a/src/main/java/com/example/demo/mapper/BeanMapper.java +++ b/src/main/java/com/example/demo/mapper/BeanMapper.java @@ -20,6 +20,7 @@ import com.example.demo.dto.InfoLevelUpdateDto; import com.example.demo.dto.PhaseLevelDto; import com.example.demo.dto.PhaseLevelUpdateDto; import com.example.demo.dto.QuestionChoiceDto; +import com.example.demo.dto.QuestionChoiceUpdateDto; import com.example.demo.dto.QuestionDto; import com.example.demo.dto.QuestionnaireLevelDto; import com.example.demo.dto.TaskCreateDto; @@ -128,6 +129,8 @@ public interface BeanMapper { QuestionChoice toEntity(QuestionChoiceDto questionChoiceDto); + QuestionChoice toEntity(QuestionChoiceUpdateDto questionChoiceDto); + QuestionChoiceDto toDto(QuestionChoice questionChoice); Question toEntity(QuestionDto questionDto); diff --git a/src/main/java/com/example/demo/service/LevelOperationsService.java b/src/main/java/com/example/demo/service/LevelOperationsService.java index a450ccee..c92f4f1e 100644 --- a/src/main/java/com/example/demo/service/LevelOperationsService.java +++ b/src/main/java/com/example/demo/service/LevelOperationsService.java @@ -2,11 +2,13 @@ package com.example.demo.service; import com.example.demo.domain.BaseLevel; import com.example.demo.domain.PhaseLevel; +import com.example.demo.domain.QuestionChoice; import com.example.demo.domain.Task; import com.example.demo.domain.InfoLevel; import com.example.demo.dto.BaseLevelDto; import com.example.demo.dto.PhaseLevelUpdateDto; import com.example.demo.dto.QuestionChoiceDto; +import com.example.demo.dto.QuestionChoiceUpdateDto; import com.example.demo.dto.QuestionDto; import com.example.demo.dto.TaskDto; import com.example.demo.dto.TaskUpdateDto; @@ -151,4 +153,9 @@ public class LevelOperationsService { return createdQuestionChoice; } + + public void updateQuestionChoice(QuestionChoiceUpdateDto questionChoiceUpdateDto) { + QuestionChoice questionChoice = BeanMapper.INSTANCE.toEntity(questionChoiceUpdateDto); + questionChoiceService.updateQuestionChoice(questionChoice); + } } diff --git a/src/main/java/com/example/demo/service/QuestionChoiceService.java b/src/main/java/com/example/demo/service/QuestionChoiceService.java index 51a65589..c97e4b08 100644 --- a/src/main/java/com/example/demo/service/QuestionChoiceService.java +++ b/src/main/java/com/example/demo/service/QuestionChoiceService.java @@ -3,11 +3,15 @@ package com.example.demo.service; import com.example.demo.domain.Question; import com.example.demo.domain.QuestionChoice; import com.example.demo.domain.QuestionnaireLevel; +import com.example.demo.domain.Task; import com.example.demo.dto.QuestionChoiceDto; import com.example.demo.dto.QuestionDto; +import com.example.demo.dto.TaskDto; import com.example.demo.mapper.BeanMapper; import com.example.demo.repository.QuestionChoiceRepository; import com.example.demo.repository.QuestionRepository; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -16,6 +20,8 @@ import java.util.Optional; @Service public class QuestionChoiceService { + private static final Logger LOG = LoggerFactory.getLogger(TaskService.class); + @Autowired private QuestionRepository questionRepository; @@ -38,4 +44,22 @@ public class QuestionChoiceService { return BeanMapper.INSTANCE.toDto(persistedEntity); } + + public QuestionChoiceDto updateQuestionChoice(QuestionChoice questionChoice) { + Optional<QuestionChoice> persistedQuestionChoice = questionChoiceRepository.findById(questionChoice.getId()); + + if (persistedQuestionChoice.isEmpty()) { + // TODO return 404 + LOG.error("No question choice found with ID {}.", questionChoice.getId()); + return new QuestionChoiceDto(); + } + + questionChoice.setQuestion(persistedQuestionChoice.get().getQuestion()); + questionChoice.setOrder(persistedQuestionChoice.get().getOrder()); + + QuestionChoice savedEntity = questionChoiceRepository.save(questionChoice); + + return BeanMapper.INSTANCE.toDto(savedEntity); + } + } -- GitLab