package com.example.demo.service; import com.example.demo.domain.AssessmentLevel; import com.example.demo.domain.BaseLevel; import com.example.demo.domain.PhaseLevel; import com.example.demo.domain.Question; import com.example.demo.domain.QuestionnaireLevel; import com.example.demo.dto.QuestionDto; import com.example.demo.dto.QuestionUpdateDto; import com.example.demo.dto.QuestionnaireLevelDto; import com.example.demo.dto.QuestionnaireUpdateDto; import com.example.demo.mapper.BeanMapper; import com.example.demo.repository.BaseLevelRepository; 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 org.springframework.util.CollectionUtils; import java.util.Optional; @Service public class QuestionnaireLevelService { private static final Logger LOG = LoggerFactory.getLogger(QuestionnaireLevelService.class); @Autowired private QuestionnaireLevelRepository questionnaireLevelRepository; @Autowired private BaseLevelRepository baseLevelRepository; public QuestionnaireLevelDto createDefaultQuestionnaireLevel(Long trainingDefinitionId) { QuestionnaireLevel questionnaireLevel =new QuestionnaireLevel(); questionnaireLevel.setTitle("Title of questionnaire level"); questionnaireLevel.setTrainingDefinitionId(trainingDefinitionId); questionnaireLevel.setOrder(baseLevelRepository.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); } }