diff --git a/src/main/java/com/example/demo/controller/PhasesController.java b/src/main/java/com/example/demo/controller/PhasesController.java index ace60628f84ec2583d7f4e58798d781b9f7e924c..f59af521bca3006588040773ea49587171747098 100644 --- a/src/main/java/com/example/demo/controller/PhasesController.java +++ b/src/main/java/com/example/demo/controller/PhasesController.java @@ -4,9 +4,9 @@ import com.example.demo.dto.AbstractPhaseDto; import com.example.demo.dto.InfoPhaseDto; import com.example.demo.dto.InfoPhaseUpdateDto; import com.example.demo.dto.PhaseCreateDTO; +import com.example.demo.dto.QuestionnairePhaseDto; import com.example.demo.dto.TrainingPhaseDto; import com.example.demo.dto.TrainingPhaseUpdateDto; -import com.example.demo.dto.QuestionnaireLevelDto; import com.example.demo.dto.QuestionnaireUpdateDto; import com.example.demo.facade.TrainingPhaseFacade; import io.swagger.annotations.Api; @@ -192,7 +192,7 @@ public class PhasesController { @ApiResponse(code = 500, message = "Unexpected application error") }) @PutMapping(path = "/{phaseId}/questionnaire") - public ResponseEntity<QuestionnaireLevelDto> updateQuestionnairePhase( + public ResponseEntity<QuestionnairePhaseDto> updateQuestionnairePhase( @ApiParam(value = "Training definition ID", required = true) @PathVariable(name = "definitionId") Long definitionId, @ApiParam(value = "Phase ID", required = true) @@ -200,7 +200,7 @@ public class PhasesController { @ApiParam(value = "Questionnaire to be updated") @RequestBody @Valid QuestionnaireUpdateDto questionnaireUpdateDto) { - QuestionnaireLevelDto updatedQuestionnairePhase = trainingPhaseFacade.updateQuestionnairePhase(definitionId, phaseId, questionnaireUpdateDto); + QuestionnairePhaseDto updatedQuestionnairePhase = trainingPhaseFacade.updateQuestionnairePhase(definitionId, phaseId, questionnaireUpdateDto); return new ResponseEntity<>(updatedQuestionnairePhase, HttpStatus.OK); } diff --git a/src/main/java/com/example/demo/domain/Question.java b/src/main/java/com/example/demo/domain/Question.java index ae5b73065590834b4a8a7c82583a8d81df18598b..9cde8a5ea5ef52bf97330fb5f83f8f47189982ae 100644 --- a/src/main/java/com/example/demo/domain/Question.java +++ b/src/main/java/com/example/demo/domain/Question.java @@ -36,7 +36,7 @@ public class Question { private int order; @ManyToOne(fetch = FetchType.LAZY) - private QuestionnaireLevel questionnaireLevel; + private QuestionnairePhase questionnairePhase; @OrderBy @OneToMany(mappedBy = "question", cascade = CascadeType.ALL, orphanRemoval = true, fetch = FetchType.LAZY) @@ -77,12 +77,12 @@ public class Question { this.order = order; } - public QuestionnaireLevel getQuestionnaireLevel() { - return questionnaireLevel; + public QuestionnairePhase getQuestionnairePhase() { + return questionnairePhase; } - public void setQuestionnaireLevel(QuestionnaireLevel questionnaireLevel) { - this.questionnaireLevel = questionnaireLevel; + public void setQuestionnairePhase(QuestionnairePhase questionnairePhase) { + this.questionnairePhase = questionnairePhase; } public List<QuestionChoice> getChoices() { diff --git a/src/main/java/com/example/demo/domain/QuestionnaireLevel.java b/src/main/java/com/example/demo/domain/QuestionnairePhase.java similarity index 92% rename from src/main/java/com/example/demo/domain/QuestionnaireLevel.java rename to src/main/java/com/example/demo/domain/QuestionnairePhase.java index 939a4ca614c6d0e9bb8a03b4c58c907f8590ba0f..33c0d21f4d71b2180945fa974073de15320e3114 100644 --- a/src/main/java/com/example/demo/domain/QuestionnaireLevel.java +++ b/src/main/java/com/example/demo/domain/QuestionnairePhase.java @@ -12,13 +12,13 @@ import javax.persistence.OrderBy; import java.util.List; @Entity -public class QuestionnaireLevel extends AbstractPhase { +public class QuestionnairePhase extends AbstractPhase { @Enumerated(EnumType.STRING) private QuestionnaireType questionnaireType; @OrderBy - @OneToMany(mappedBy = "questionnaireLevel", cascade = CascadeType.ALL, orphanRemoval = true, fetch = FetchType.LAZY) + @OneToMany(mappedBy = "questionnairePhase", cascade = CascadeType.ALL, orphanRemoval = true, fetch = FetchType.LAZY) private List<Question> questions; @OrderBy diff --git a/src/main/java/com/example/demo/domain/QuestionnairePhaseRelation.java b/src/main/java/com/example/demo/domain/QuestionnairePhaseRelation.java index b30f4e5224efcea98f3696b4e250f5a9b4592264..4ab861c48fc18685159b386e93d9b4e9caf881db 100644 --- a/src/main/java/com/example/demo/domain/QuestionnairePhaseRelation.java +++ b/src/main/java/com/example/demo/domain/QuestionnairePhaseRelation.java @@ -23,7 +23,7 @@ public class QuestionnairePhaseRelation { private Integer order; @ManyToOne(fetch = FetchType.LAZY) - private QuestionnaireLevel relatedPhase; + private QuestionnairePhase relatedPhase; @ManyToMany(fetch = FetchType.LAZY, cascade = CascadeType.PERSIST) @JoinTable(name = "questionnaire_phase_relation_question", @@ -50,11 +50,11 @@ public class QuestionnairePhaseRelation { this.order = order; } - public QuestionnaireLevel getRelatedPhase() { + public QuestionnairePhase getRelatedPhase() { return relatedPhase; } - public void setRelatedPhase(QuestionnaireLevel relatedPhase) { + public void setRelatedPhase(QuestionnairePhase relatedPhase) { this.relatedPhase = relatedPhase; } diff --git a/src/main/java/com/example/demo/dto/QuestionnaireLevelDto.java b/src/main/java/com/example/demo/dto/QuestionnairePhaseDto.java similarity index 81% rename from src/main/java/com/example/demo/dto/QuestionnaireLevelDto.java rename to src/main/java/com/example/demo/dto/QuestionnairePhaseDto.java index 64da5cbfbf679b6627207c2e0c1aa8d513398dac..024584c2b822d7d13e91c212d2843cfdf5e27bcb 100644 --- a/src/main/java/com/example/demo/dto/QuestionnaireLevelDto.java +++ b/src/main/java/com/example/demo/dto/QuestionnairePhaseDto.java @@ -2,7 +2,7 @@ package com.example.demo.dto; import java.util.List; -public class QuestionnaireLevelDto extends AbstractPhaseDto { +public class QuestionnairePhaseDto extends AbstractPhaseDto { private List<QuestionDto> questions; diff --git a/src/main/java/com/example/demo/facade/TrainingPhaseFacade.java b/src/main/java/com/example/demo/facade/TrainingPhaseFacade.java index d080d585489e6daa0389002b7fdfff43deb099bc..76e2044744264406f6519125e11f576bab840327 100644 --- a/src/main/java/com/example/demo/facade/TrainingPhaseFacade.java +++ b/src/main/java/com/example/demo/facade/TrainingPhaseFacade.java @@ -4,15 +4,15 @@ import com.example.demo.dto.AbstractPhaseDto; import com.example.demo.dto.InfoPhaseDto; import com.example.demo.dto.InfoPhaseUpdateDto; import com.example.demo.dto.PhaseCreateDTO; +import com.example.demo.dto.QuestionnairePhaseDto; import com.example.demo.dto.TrainingPhaseDto; import com.example.demo.dto.TrainingPhaseUpdateDto; -import com.example.demo.dto.QuestionnaireLevelDto; import com.example.demo.dto.QuestionnaireUpdateDto; import com.example.demo.enums.PhaseType; import com.example.demo.service.InfoPhaseService; import com.example.demo.service.TrainingPhaseService; import com.example.demo.service.PhaseService; -import com.example.demo.service.QuestionnaireLevelService; +import com.example.demo.service.QuestionnairePhaseService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -29,7 +29,7 @@ public class TrainingPhaseFacade { private InfoPhaseService infoPhaseService; @Autowired - private QuestionnaireLevelService questionnaireLevelService; + private QuestionnairePhaseService questionnairePhaseService; @Autowired private TrainingPhaseService trainingPhaseService; @@ -39,7 +39,7 @@ public class TrainingPhaseFacade { if (PhaseType.INFO.equals(phaseCreateDTO.getPhaseType())) { abstractPhaseDto = infoPhaseService.createDefaultInfoPhase(trainingDefinitionId); } else if (PhaseType.QUESTIONNAIRE.equals(phaseCreateDTO.getPhaseType())) { - abstractPhaseDto = questionnaireLevelService.createDefaultQuestionnaireLevel(trainingDefinitionId); + abstractPhaseDto = questionnairePhaseService.createDefaultQuestionnairePhase(trainingDefinitionId); } else { abstractPhaseDto = trainingPhaseService.createDefaultTrainingPhase(trainingDefinitionId); } @@ -75,8 +75,8 @@ public class TrainingPhaseFacade { return trainingPhaseService.updateTrainingPhase(definitionId, phaseId, trainingPhaseUpdate); } - public QuestionnaireLevelDto updateQuestionnairePhase(Long definitionId, Long phaseId, QuestionnaireUpdateDto questionnaireUpdateDto) { - return questionnaireLevelService.updateQuestionnairePhase(definitionId, phaseId, questionnaireUpdateDto); + public QuestionnairePhaseDto updateQuestionnairePhase(Long definitionId, Long phaseId, QuestionnaireUpdateDto questionnaireUpdateDto) { + return questionnairePhaseService.updateQuestionnairePhase(definitionId, phaseId, questionnaireUpdateDto); } public void movePhaseToSpecifiedOrder(Long phaseIdFrom, int newPosition) { diff --git a/src/main/java/com/example/demo/mapper/BeanMapper.java b/src/main/java/com/example/demo/mapper/BeanMapper.java index cd41880734544c67b760d02c79df32ef7a3224c1..f443f281607afbe2aa2c18cedc20468b1a233b0a 100644 --- a/src/main/java/com/example/demo/mapper/BeanMapper.java +++ b/src/main/java/com/example/demo/mapper/BeanMapper.java @@ -3,10 +3,10 @@ package com.example.demo.mapper; import com.example.demo.domain.AbstractPhase; import com.example.demo.domain.DecisionMatrixRow; import com.example.demo.domain.InfoPhase; +import com.example.demo.domain.QuestionnairePhase; import com.example.demo.domain.TrainingPhase; 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.AbstractPhaseDto; import com.example.demo.dto.DecisionMatrixRowDto; @@ -18,7 +18,7 @@ import com.example.demo.dto.QuestionChoiceDto; import com.example.demo.dto.QuestionChoiceUpdateDto; import com.example.demo.dto.QuestionDto; import com.example.demo.dto.QuestionUpdateDto; -import com.example.demo.dto.QuestionnaireLevelDto; +import com.example.demo.dto.QuestionnairePhaseDto; import com.example.demo.dto.QuestionnaireUpdateDto; import com.example.demo.dto.TaskCreateDto; import com.example.demo.dto.TaskDto; @@ -43,8 +43,8 @@ public interface BeanMapper { abstractPhaseDto = toDto((InfoPhase) abstractPhase); } else if (abstractPhase instanceof Task) { abstractPhaseDto = toDto((Task) abstractPhase); - } else if (abstractPhase instanceof QuestionnaireLevel) { - abstractPhaseDto = toDto((QuestionnaireLevel) abstractPhase); + } else if (abstractPhase instanceof QuestionnairePhase) { + abstractPhaseDto = toDto((QuestionnairePhase) abstractPhase); } else { throw new RuntimeException("Unknown level type " + abstractPhase.getClass().getName()); } @@ -91,9 +91,9 @@ public interface BeanMapper { QuestionDto toDto(Question question); - QuestionnaireLevel toEntity(QuestionnaireUpdateDto questionnaireUpdateDto); + QuestionnairePhase toEntity(QuestionnaireUpdateDto questionnaireUpdateDto); - QuestionnaireLevel toEntity(QuestionnaireLevelDto questionnaireLevelDto); + QuestionnairePhase toEntity(QuestionnairePhaseDto questionnairePhaseDto); - QuestionnaireLevelDto toDto(QuestionnaireLevel questionnaireLevel); + QuestionnairePhaseDto toDto(QuestionnairePhase questionnairePhase); } diff --git a/src/main/java/com/example/demo/repository/QuestionRepository.java b/src/main/java/com/example/demo/repository/QuestionRepository.java index 3d9e41c4032153fa4cfacd089c241a2f1b2fd148..13648e4086fdab8f6c93e1ebfba015872879b9c6 100644 --- a/src/main/java/com/example/demo/repository/QuestionRepository.java +++ b/src/main/java/com/example/demo/repository/QuestionRepository.java @@ -8,12 +8,12 @@ import org.springframework.data.repository.query.Param; public interface QuestionRepository extends JpaRepository<Question, Long> { - @Query("SELECT COALESCE(MAX(q.order), -1) FROM Question q WHERE q.questionnaireLevel.id = :questionnaireId") + @Query("SELECT COALESCE(MAX(q.order), -1) FROM Question q WHERE q.questionnairePhase.id = :questionnaireId") Integer getCurrentMaxOrder(@Param("questionnaireId") Long questionnaireId); @Modifying @Query("UPDATE Question q SET q.order = q.order - 1 " + - "WHERE q.questionnaireLevel.id = :questionnaireLevelId " + + "WHERE q.questionnairePhase.id = :questionnairePhaseIdLevelId " + "AND q.order > :order ") - void decreaseOrderAfterQuestionWasDeleted(@Param("order") int order, @Param("questionnaireLevelId") Long questionnaireLevelId); + void decreaseOrderAfterQuestionWasDeleted(@Param("order") int order, @Param("questionnairePhaseIdLevelId") Long questionnairePhaseIdLevelId); } diff --git a/src/main/java/com/example/demo/repository/QuestionnaireLevelRepository.java b/src/main/java/com/example/demo/repository/QuestionnaireLevelRepository.java deleted file mode 100644 index cbd04783dcf2b60d9adb2d1cba891133f9a69a92..0000000000000000000000000000000000000000 --- a/src/main/java/com/example/demo/repository/QuestionnaireLevelRepository.java +++ /dev/null @@ -1,9 +0,0 @@ -package com.example.demo.repository; - -import com.example.demo.domain.QuestionnaireLevel; -import org.springframework.data.jpa.repository.JpaRepository; -import org.springframework.data.jpa.repository.Query; -import org.springframework.data.repository.query.Param; - -public interface QuestionnaireLevelRepository extends JpaRepository<QuestionnaireLevel, Long> { -} diff --git a/src/main/java/com/example/demo/repository/QuestionnairePhaseRepository.java b/src/main/java/com/example/demo/repository/QuestionnairePhaseRepository.java new file mode 100644 index 0000000000000000000000000000000000000000..268cdd53520ad54cba84e5e99b6a28fb478df947 --- /dev/null +++ b/src/main/java/com/example/demo/repository/QuestionnairePhaseRepository.java @@ -0,0 +1,7 @@ +package com.example.demo.repository; + +import com.example.demo.domain.QuestionnairePhase; +import org.springframework.data.jpa.repository.JpaRepository; + +public interface QuestionnairePhaseRepository extends JpaRepository<QuestionnairePhase, Long> { +} diff --git a/src/main/java/com/example/demo/service/QuestionService.java b/src/main/java/com/example/demo/service/QuestionService.java index dc9b163c4da31cb19b4235eb3766360229b2649f..e978bc0ba6b0cbfd536b2ecf5c047bc7d6f892e6 100644 --- a/src/main/java/com/example/demo/service/QuestionService.java +++ b/src/main/java/com/example/demo/service/QuestionService.java @@ -1,13 +1,12 @@ 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.QuestionnairePhase; import com.example.demo.dto.QuestionDto; import com.example.demo.enums.QuestionType; import com.example.demo.mapper.BeanMapper; import com.example.demo.repository.QuestionRepository; -import com.example.demo.repository.QuestionnaireLevelRepository; +import com.example.demo.repository.QuestionnairePhaseRepository; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -21,14 +20,14 @@ public class QuestionService { private static final Logger LOG = LoggerFactory.getLogger(QuestionService.class); @Autowired - private QuestionnaireLevelRepository questionnaireLevelRepository; + private QuestionnairePhaseRepository questionnairePhaseRepository; @Autowired private QuestionRepository questionRepository; public QuestionDto createDefaultQuestion(Long questionnaireId, QuestionType questionType) { - Optional<QuestionnaireLevel> questionnaireLevel = questionnaireLevelRepository.findById(questionnaireId); - if (questionnaireLevel.isEmpty()) { + Optional<QuestionnairePhase> questionnairePhase = questionnairePhaseRepository.findById(questionnaireId); + if (questionnairePhase.isEmpty()) { // TODO return 404 return null; } @@ -36,7 +35,7 @@ public class QuestionService { Question question = new Question(); question.setText("Title of question"); question.setQuestionType(questionType); - question.setQuestionnaireLevel(questionnaireLevel.get()); + question.setQuestionnairePhase(questionnairePhase.get()); question.setOrder(questionRepository.getCurrentMaxOrder(questionnaireId) + 1); Question persistedEntity = questionRepository.save(question); @@ -54,7 +53,7 @@ public class QuestionService { } question.setChoices(persistedQuestion.get().getChoices()); - question.setQuestionnaireLevel(persistedQuestion.get().getQuestionnaireLevel()); + question.setQuestionnairePhase(persistedQuestion.get().getQuestionnairePhase()); question.setOrder(persistedQuestion.get().getOrder()); Question savedEntity = questionRepository.save(question); @@ -71,7 +70,7 @@ public class QuestionService { } int questionOrder = question.get().getOrder(); - questionRepository.decreaseOrderAfterQuestionWasDeleted(questionOrder, question.get().getQuestionnaireLevel().getId()); + questionRepository.decreaseOrderAfterQuestionWasDeleted(questionOrder, question.get().getQuestionnairePhase().getId()); questionRepository.delete(question.get()); } diff --git a/src/main/java/com/example/demo/service/QuestionnaireLevelService.java b/src/main/java/com/example/demo/service/QuestionnaireLevelService.java deleted file mode 100644 index 288f9f5dd0e32db9c2214522b7d1b1ca781bce86..0000000000000000000000000000000000000000 --- a/src/main/java/com/example/demo/service/QuestionnaireLevelService.java +++ /dev/null @@ -1,77 +0,0 @@ -package com.example.demo.service; - -import com.example.demo.domain.QuestionnaireLevel; -import com.example.demo.dto.QuestionnaireLevelDto; -import com.example.demo.dto.QuestionnaireUpdateDto; -import com.example.demo.mapper.BeanMapper; -import com.example.demo.repository.AbstractPhaseRepository; -import com.example.demo.repository.QuestionnaireLevelRepository; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; - -import java.util.Optional; - -@Service -public class QuestionnaireLevelService { - - private static final Logger LOG = LoggerFactory.getLogger(QuestionnaireLevelService.class); - - @Autowired - private QuestionnaireLevelRepository questionnaireLevelRepository; - - @Autowired - private AbstractPhaseRepository abstractPhaseRepository; - - public QuestionnaireLevelDto createDefaultQuestionnaireLevel(Long trainingDefinitionId) { - - QuestionnaireLevel questionnaireLevel =new QuestionnaireLevel(); - questionnaireLevel.setTitle("Title of questionnaire level"); - questionnaireLevel.setTrainingDefinitionId(trainingDefinitionId); - questionnaireLevel.setOrder(abstractPhaseRepository.getCurrentMaxOrder(trainingDefinitionId) + 1); - - QuestionnaireLevel persistedEntity = questionnaireLevelRepository.save(questionnaireLevel); - - return BeanMapper.INSTANCE.toDto(persistedEntity); - } - - public QuestionnaireLevelDto updateQuestion(QuestionnaireLevel questionnaireLevel) { - Optional<QuestionnaireLevel> persistedQuestion = questionnaireLevelRepository.findById(questionnaireLevel.getId()); - - if (persistedQuestion.isEmpty()) { - // TODO return 404 - LOG.error("No questionnaire level found with ID {}.", questionnaireLevel.getId()); - return new QuestionnaireLevelDto(); - } - - questionnaireLevel.setTrainingDefinitionId(persistedQuestion.get().getTrainingDefinitionId()); - questionnaireLevel.setQuestions(persistedQuestion.get().getQuestions()); - questionnaireLevel.setOrder(persistedQuestion.get().getOrder()); - - QuestionnaireLevel savedEntity = questionnaireLevelRepository.save(questionnaireLevel); - - return BeanMapper.INSTANCE.toDto(savedEntity); - } - - public QuestionnaireLevelDto updateQuestionnairePhase(Long definitionId, Long phaseId, QuestionnaireUpdateDto questionnaireUpdateDto) { - QuestionnaireLevel questionnaireLevel = BeanMapper.INSTANCE.toEntity(questionnaireUpdateDto); - questionnaireLevel.setId(phaseId); - - QuestionnaireLevel persistedQuestionnairePhase = questionnaireLevelRepository.findById(questionnaireLevel.getId()) - .orElseThrow(() -> new RuntimeException("Questionnaire phase was not found")); - // TODO throw proper exception once kypo2-training is migrated - - // TODO add check to trainingDefinitionId and phaseId (field structure will be probably changed); - - - questionnaireLevel.setTrainingDefinitionId(persistedQuestionnairePhase.getTrainingDefinitionId()); - questionnaireLevel.setOrder(persistedQuestionnairePhase.getOrder()); - - // TODO questions, their choices and realtions among questions and training phases must be set here - - QuestionnaireLevel savedEntity = questionnaireLevelRepository.save(questionnaireLevel); - - return BeanMapper.INSTANCE.toDto(savedEntity); - } -} diff --git a/src/main/java/com/example/demo/service/QuestionnairePhaseService.java b/src/main/java/com/example/demo/service/QuestionnairePhaseService.java new file mode 100644 index 0000000000000000000000000000000000000000..35eab60c2b90e33f491730cc0defd9864b792613 --- /dev/null +++ b/src/main/java/com/example/demo/service/QuestionnairePhaseService.java @@ -0,0 +1,77 @@ +package com.example.demo.service; + +import com.example.demo.domain.QuestionnairePhase; +import com.example.demo.dto.QuestionnairePhaseDto; +import com.example.demo.dto.QuestionnaireUpdateDto; +import com.example.demo.mapper.BeanMapper; +import com.example.demo.repository.AbstractPhaseRepository; +import com.example.demo.repository.QuestionnairePhaseRepository; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.Optional; + +@Service +public class QuestionnairePhaseService { + + private static final Logger LOG = LoggerFactory.getLogger(QuestionnairePhaseService.class); + + @Autowired + private QuestionnairePhaseRepository questionnairePhaseRepository; + + @Autowired + private AbstractPhaseRepository abstractPhaseRepository; + + public QuestionnairePhaseDto createDefaultQuestionnairePhase(Long trainingDefinitionId) { + + QuestionnairePhase questionnairePhase =new QuestionnairePhase(); + questionnairePhase.setTitle("Title of questionnaire level"); + questionnairePhase.setTrainingDefinitionId(trainingDefinitionId); + questionnairePhase.setOrder(abstractPhaseRepository.getCurrentMaxOrder(trainingDefinitionId) + 1); + + QuestionnairePhase persistedEntity = questionnairePhaseRepository.save(questionnairePhase); + + return BeanMapper.INSTANCE.toDto(persistedEntity); + } + + public QuestionnairePhaseDto updateQuestion(QuestionnairePhase questionnairePhase) { + Optional<QuestionnairePhase> persistedQuestion = questionnairePhaseRepository.findById(questionnairePhase.getId()); + + if (persistedQuestion.isEmpty()) { + // TODO return 404 + LOG.error("No questionnaire level found with ID {}.", questionnairePhase.getId()); + return new QuestionnairePhaseDto(); + } + + questionnairePhase.setTrainingDefinitionId(persistedQuestion.get().getTrainingDefinitionId()); + questionnairePhase.setQuestions(persistedQuestion.get().getQuestions()); + questionnairePhase.setOrder(persistedQuestion.get().getOrder()); + + QuestionnairePhase savedEntity = questionnairePhaseRepository.save(questionnairePhase); + + return BeanMapper.INSTANCE.toDto(savedEntity); + } + + public QuestionnairePhaseDto updateQuestionnairePhase(Long definitionId, Long phaseId, QuestionnaireUpdateDto questionnaireUpdateDto) { + QuestionnairePhase questionnairePhase = BeanMapper.INSTANCE.toEntity(questionnaireUpdateDto); + questionnairePhase.setId(phaseId); + + QuestionnairePhase persistedQuestionnairePhase = questionnairePhaseRepository.findById(questionnairePhase.getId()) + .orElseThrow(() -> new RuntimeException("Questionnaire phase was not found")); + // TODO throw proper exception once kypo2-training is migrated + + // TODO add check to trainingDefinitionId and phaseId (field structure will be probably changed); + + + questionnairePhase.setTrainingDefinitionId(persistedQuestionnairePhase.getTrainingDefinitionId()); + questionnairePhase.setOrder(persistedQuestionnairePhase.getOrder()); + + // TODO questions, their choices and realtions among questions and training phases must be set here + + QuestionnairePhase savedEntity = questionnairePhaseRepository.save(questionnairePhase); + + return BeanMapper.INSTANCE.toDto(savedEntity); + } +}