diff --git a/application/module-exercise/src/main/java/org/fuseri/moduleexercise/question/QuestionController.java b/application/module-exercise/src/main/java/org/fuseri/moduleexercise/question/QuestionController.java index 1595f03f02f77ac6474c9399d88647f843a2b7d8..a7b215a4a2bb2e98e89c6ff215f2b08f73ddad89 100644 --- a/application/module-exercise/src/main/java/org/fuseri/moduleexercise/question/QuestionController.java +++ b/application/module-exercise/src/main/java/org/fuseri/moduleexercise/question/QuestionController.java @@ -119,7 +119,7 @@ public class QuestionController { @PutMapping("/{id}") public ResponseEntity<QuestionDto> updateQuestion(@NotNull @PathVariable long id, @Valid @RequestBody QuestionUpdateDto dto) { try { - return ResponseEntity.ok(questionFacade.update(id, dto)); + return ResponseEntity.ok(questionFacade.patchUpdate(id, dto)); } catch (EntityNotFoundException e) { return ResponseEntity.notFound().build(); } diff --git a/application/module-exercise/src/main/java/org/fuseri/moduleexercise/question/QuestionFacade.java b/application/module-exercise/src/main/java/org/fuseri/moduleexercise/question/QuestionFacade.java index 10442e8ed616cd0a8a81023f120282e3ecb7b108..1662f5c23c1ef1fb209eca28dbbd660be06357d3 100644 --- a/application/module-exercise/src/main/java/org/fuseri/moduleexercise/question/QuestionFacade.java +++ b/application/module-exercise/src/main/java/org/fuseri/moduleexercise/question/QuestionFacade.java @@ -101,13 +101,9 @@ public class QuestionFacade { * @param dto dto of updated question with correct id * @return dto of updated question */ - public QuestionDto update(long id, QuestionUpdateDto dto) { - Question question = questionMapper.fromUpdateDto(dto); - question.setId(id); - List<Answer> questionAnswers = answerService.findAllByQuestionId(id); - question.setAnswers(new HashSet<>(questionAnswers)); - Question updatedQuestion = questionService.update(id, question); - return questionMapper.toDto(updatedQuestion); + public QuestionDto patchUpdate(long id, QuestionUpdateDto dto) { + var a = questionService.patchUpdateWithoutAnswers(id, questionMapper.fromUpdateDto(dto)); + return questionMapper.toDto(a); } /** diff --git a/application/module-exercise/src/main/java/org/fuseri/moduleexercise/question/QuestionService.java b/application/module-exercise/src/main/java/org/fuseri/moduleexercise/question/QuestionService.java index 2d54e3d1f1ae0bcc2492626e70919af7e493520c..1016db8d8833a251204fcc498c47171b130e68f6 100644 --- a/application/module-exercise/src/main/java/org/fuseri/moduleexercise/question/QuestionService.java +++ b/application/module-exercise/src/main/java/org/fuseri/moduleexercise/question/QuestionService.java @@ -4,11 +4,11 @@ import jakarta.persistence.EntityNotFoundException; import lombok.Getter; import org.fuseri.moduleexercise.common.DomainService; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.data.domain.Page; -import org.springframework.data.domain.PageRequest; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import java.util.Optional; + /** * Represent a service for managing Question entities */ @@ -43,4 +43,25 @@ public class QuestionService extends DomainService<Question> { return repository.findById(id) .orElseThrow(() -> new EntityNotFoundException("Question '" + id + "' not found.")); } + + /** + * Patch update a question. Don't update question answers. + * + * @param id the question ID + * @param updatedQuestion the question to update + * @return the updated question + */ + @Transactional + public Question patchUpdateWithoutAnswers(Long id, Question updatedQuestion) { + Optional<Question> optionalQuestion = repository.findById(id); + if (optionalQuestion.isPresent()) { + Question question = optionalQuestion.get(); + question.setText(updatedQuestion.getText()); + question.setExercise(updatedQuestion.getExercise()); + return repository.save(question); + } else { + throw new EntityNotFoundException("Question with id: " + id + " was not found."); + } + } + }