diff --git a/src/main/java/com/example/demo/controller/AdaptiveTrainingDefinitionsRestController.java b/src/main/java/com/example/demo/controller/AdaptiveTrainingDefinitionsRestController.java index fad0589eda40f74e103bbc22a020b3d6144ee12b..18fbee388fb647228d5e197510379b58a5bdb09b 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 0000000000000000000000000000000000000000..8a74c123ddf77595196591d049ad7bf837c19b9e --- /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 1f380c16fec1c36dfa0b6c4a10f14e00c1c2de10..62249a1ca1d2696287cac49c914fd096f68d148a 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 a450ccee98d30a33b7e1cc2b569026a7682b1783..c92f4f1e2a4247fc6d56d9f4350f14f6798a2cad 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 51a65589f9c229d304ffb0bb23fcbe80cea73040..c97e4b08c21a35cbcedc4d593f8d267da912abfe 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); + } + }