diff --git a/README.md b/README.md index d1c63369564acb76542ea3a19ee9209e3e7269a3..5821e81238df781f4172c65e241f8e9a1980cc0b 100644 --- a/README.md +++ b/README.md @@ -7,4 +7,6 @@ * Deleting level should work * Including decreasing of order attribute * except for tasks, there is still a problem with setting the order attribute +* Questionnaires added + * Currently only POST methods implemented. However, creating a new question choice is not working yet diff --git a/src/main/java/com/example/demo/controller/AdaptiveTrainingDefinitionsRestController.java b/src/main/java/com/example/demo/controller/AdaptiveTrainingDefinitionsRestController.java index 80c084dc2ef460fadadbd7855b8d1b6948854fa0..405c1e845c1248dd5ccac08a67ccd66f828aad2c 100644 --- a/src/main/java/com/example/demo/controller/AdaptiveTrainingDefinitionsRestController.java +++ b/src/main/java/com/example/demo/controller/AdaptiveTrainingDefinitionsRestController.java @@ -1,9 +1,11 @@ package com.example.demo.controller; import com.example.demo.dto.BaseLevelDto; +import com.example.demo.dto.QuestionChoiceDto; +import com.example.demo.dto.QuestionDto; import com.example.demo.dto.TaskUpdateDto; import com.example.demo.dto.InfoLevelUpdateDto; -import com.example.demo.dto.input.LevelType; +import com.example.demo.enums.LevelType; import com.example.demo.service.LevelOperationsService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; @@ -88,7 +90,7 @@ public class AdaptiveTrainingDefinitionsRestController { @PostMapping(path = "/levels/{levelType}") public BaseLevelDto createLevel( @ApiParam(value = "Training definition ID", required = true) @RequestParam(name = "definitionId") Long definitionId, - @ApiParam(value = "Level type", allowableValues = "task, assessment, info, phase", required = true) + @ApiParam(value = "Level type", allowableValues = "questionnaire, assessment, info, phase", required = true) @PathVariable("levelType") LevelType levelType) { return levelOperationsService.createLevel(definitionId, levelType); @@ -159,4 +161,38 @@ public class AdaptiveTrainingDefinitionsRestController { return levelOperationsService.createTask(phaseId); } + + @ApiOperation(httpMethod = "POST", + value = "Create a new question in questionnaire", + response = BaseLevelDto.class, + nickname = "createQuestion", + produces = MediaType.APPLICATION_JSON_VALUE + ) + @ApiResponses(value = { + @ApiResponse(code = 200, message = "Question created"), + @ApiResponse(code = 500, message = "Unexpected application error") + }) + @PostMapping(path = "/questionnaires/{questionnaireId}") + public QuestionDto createQuestion( + @ApiParam(value = "Questionnaire ID", required = true) @PathVariable(name = "questionnaireId") Long questionnaireId) { + + return levelOperationsService.createQuestion(questionnaireId); + } + + @ApiOperation(httpMethod = "POST", + value = "Create a new choice in question", + response = BaseLevelDto.class, + nickname = "createQuestionChoice", + produces = MediaType.APPLICATION_JSON_VALUE + ) + @ApiResponses(value = { + @ApiResponse(code = 200, message = "Question choice created"), + @ApiResponse(code = 500, message = "Unexpected application error") + }) + @PostMapping(path = "/questions/{questionId}") + public QuestionChoiceDto createQuestionChoice( + @ApiParam(value = "Question ID", required = true) @PathVariable(name = "questionId") Long questionId) { + + return levelOperationsService.createQuestionChoice(questionId); + } } diff --git a/src/main/java/com/example/demo/domain/Question.java b/src/main/java/com/example/demo/domain/Question.java new file mode 100644 index 0000000000000000000000000000000000000000..31cc79727641ae82db5d6cef3828d5261de4e294 --- /dev/null +++ b/src/main/java/com/example/demo/domain/Question.java @@ -0,0 +1,111 @@ +package com.example.demo.domain; + +import com.example.demo.enums.QuestionType; + +import javax.persistence.CascadeType; +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.FetchType; +import javax.persistence.GeneratedValue; +import javax.persistence.Id; +import javax.persistence.ManyToOne; +import javax.persistence.OneToMany; +import javax.persistence.OrderBy; +import java.util.ArrayList; +import java.util.List; + +@Entity +public class Question { + + @Id + @GeneratedValue + private Long id; + + private QuestionType questionType; + private String text; + private Integer points; + private Integer penalty; + private boolean required; + + @Column(name = "order_in_questionnaire", nullable = false) + private Integer order; + + @ManyToOne(fetch = FetchType.LAZY) + private QuestionnaireLevel questionnaireLevel; + + @OrderBy + @OneToMany(mappedBy = "question", cascade = CascadeType.ALL, orphanRemoval = true, fetch = FetchType.LAZY) + private List<QuestionChoice> choices = new ArrayList<>(); + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public QuestionType getQuestionType() { + return questionType; + } + + public void setQuestionType(QuestionType questionType) { + this.questionType = questionType; + } + + public String getText() { + return text; + } + + public void setText(String text) { + this.text = text; + } + + public Integer getPoints() { + return points; + } + + public void setPoints(Integer points) { + this.points = points; + } + + public Integer getPenalty() { + return penalty; + } + + public void setPenalty(Integer penalty) { + this.penalty = penalty; + } + + public boolean isRequired() { + return required; + } + + public void setRequired(boolean required) { + this.required = required; + } + + public Integer getOrder() { + return order; + } + + public void setOrder(Integer order) { + this.order = order; + } + + public QuestionnaireLevel getQuestionnaireLevel() { + return questionnaireLevel; + } + + public void setQuestionnaireLevel(QuestionnaireLevel questionnaireLevel) { + this.questionnaireLevel = questionnaireLevel; + } + + public List<QuestionChoice> getChoices() { + return choices; + } + + public void setChoices(List<QuestionChoice> choices) { + this.choices = choices; + } +} diff --git a/src/main/java/com/example/demo/domain/QuestionChoice.java b/src/main/java/com/example/demo/domain/QuestionChoice.java new file mode 100644 index 0000000000000000000000000000000000000000..b1bafaa5bee671a8ee452efea7063ba78931dc33 --- /dev/null +++ b/src/main/java/com/example/demo/domain/QuestionChoice.java @@ -0,0 +1,65 @@ +package com.example.demo.domain; + +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.FetchType; +import javax.persistence.GeneratedValue; +import javax.persistence.Id; +import javax.persistence.ManyToOne; + +@Entity +public class QuestionChoice { + + @Id + @GeneratedValue + private Long id; + + private String text; + private boolean correct; + + @Column(name = "order_in_question", nullable = false) + private Integer order; + + @ManyToOne(fetch = FetchType.LAZY) + private Question question; + + 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; + } + + public Integer getOrder() { + return order; + } + + public void setOrder(Integer order) { + this.order = order; + } + + public Question getQuestion() { + return question; + } + + public void setQuestion(Question question) { + this.question = question; + } +} diff --git a/src/main/java/com/example/demo/domain/QuestionnaireLevel.java b/src/main/java/com/example/demo/domain/QuestionnaireLevel.java new file mode 100644 index 0000000000000000000000000000000000000000..9049f76f311be6ecc1da91e2fa8512c50ffb1f12 --- /dev/null +++ b/src/main/java/com/example/demo/domain/QuestionnaireLevel.java @@ -0,0 +1,24 @@ +package com.example.demo.domain; + +import javax.persistence.CascadeType; +import javax.persistence.Entity; +import javax.persistence.FetchType; +import javax.persistence.OneToMany; +import javax.persistence.OrderBy; +import java.util.List; + +@Entity +public class QuestionnaireLevel extends BaseLevel { + + @OrderBy + @OneToMany(mappedBy = "questionnaireLevel", cascade = CascadeType.ALL, orphanRemoval = true, fetch = FetchType.LAZY) + private List<Question> questions; + + public List<Question> getQuestions() { + return questions; + } + + public void setQuestions(List<Question> questions) { + this.questions = questions; + } +} diff --git a/src/main/java/com/example/demo/dto/BaseLevelDto.java b/src/main/java/com/example/demo/dto/BaseLevelDto.java index 2094cceffd0b6aee6c4d4fc092d088be4b71ae73..f6c3262ec8524f00c6537e249c709d3c6b32dc45 100644 --- a/src/main/java/com/example/demo/dto/BaseLevelDto.java +++ b/src/main/java/com/example/demo/dto/BaseLevelDto.java @@ -1,6 +1,6 @@ package com.example.demo.dto; -import com.example.demo.dto.input.LevelType; +import com.example.demo.enums.LevelType; import java.io.Serializable; diff --git a/src/main/java/com/example/demo/dto/QuestionChoiceDto.java b/src/main/java/com/example/demo/dto/QuestionChoiceDto.java new file mode 100644 index 0000000000000000000000000000000000000000..6259a57ed9b494cd73ed330755a8ba5716742495 --- /dev/null +++ b/src/main/java/com/example/demo/dto/QuestionChoiceDto.java @@ -0,0 +1,43 @@ +package com.example.demo.dto; + +import java.io.Serializable; + +public class QuestionChoiceDto implements Serializable { + + private Long id; + private String text; + private boolean correct; + private Integer order; + + 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; + } + + public Integer getOrder() { + return order; + } + + public void setOrder(Integer order) { + this.order = order; + } +} diff --git a/src/main/java/com/example/demo/dto/QuestionDto.java b/src/main/java/com/example/demo/dto/QuestionDto.java new file mode 100644 index 0000000000000000000000000000000000000000..03044ee1ba8893e0d499e13f25e75fa418238973 --- /dev/null +++ b/src/main/java/com/example/demo/dto/QuestionDto.java @@ -0,0 +1,84 @@ +package com.example.demo.dto; + +import com.example.demo.domain.QuestionnaireLevel; +import com.example.demo.enums.QuestionType; + +import java.io.Serializable; +import java.util.List; + +public class QuestionDto implements Serializable { + + private Long id; + + private QuestionType questionType; + private String text; + private Integer points; + private Integer penalty; + private boolean required; + private Integer order; + private List<QuestionChoiceDto> choices; + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public QuestionType getQuestionType() { + return questionType; + } + + public void setQuestionType(QuestionType questionType) { + this.questionType = questionType; + } + + public String getText() { + return text; + } + + public void setText(String text) { + this.text = text; + } + + public Integer getPoints() { + return points; + } + + public void setPoints(Integer points) { + this.points = points; + } + + public Integer getPenalty() { + return penalty; + } + + public void setPenalty(Integer penalty) { + this.penalty = penalty; + } + + public boolean isRequired() { + return required; + } + + public void setRequired(boolean required) { + this.required = required; + } + + public Integer getOrder() { + return order; + } + + public void setOrder(Integer order) { + this.order = order; + } + + public List<QuestionChoiceDto> getChoices() { + return choices; + } + + public void setChoices(List<QuestionChoiceDto> choices) { + this.choices = choices; + } +} diff --git a/src/main/java/com/example/demo/dto/QuestionnaireLevelDto.java b/src/main/java/com/example/demo/dto/QuestionnaireLevelDto.java new file mode 100644 index 0000000000000000000000000000000000000000..bec77996a766b2efd9c979d828029ff8a2a739ae --- /dev/null +++ b/src/main/java/com/example/demo/dto/QuestionnaireLevelDto.java @@ -0,0 +1,16 @@ +package com.example.demo.dto; + +import java.util.List; + +public class QuestionnaireLevelDto extends BaseLevelDto { + + private List<QuestionDto> questions; + + public List<QuestionDto> getQuestions() { + return questions; + } + + public void setQuestions(List<QuestionDto> questions) { + this.questions = questions; + } +} diff --git a/src/main/java/com/example/demo/dto/input/GameDefinitionCreateDto.java b/src/main/java/com/example/demo/dto/input/GameDefinitionCreateDto.java index 214536add251d4da40ab068755d2f9b6e545b4c1..4a230bc1ed3e0b26586116b77ca5421db116026d 100644 --- a/src/main/java/com/example/demo/dto/input/GameDefinitionCreateDto.java +++ b/src/main/java/com/example/demo/dto/input/GameDefinitionCreateDto.java @@ -1,6 +1,7 @@ package com.example.demo.dto.input; import com.example.demo.dto.AttachmentDto; +import com.example.demo.enums.LevelType; import java.util.List; diff --git a/src/main/java/com/example/demo/dto/input/LevelType.java b/src/main/java/com/example/demo/dto/input/LevelType.java deleted file mode 100644 index 94326905bd546252090b59a231b1671965097536..0000000000000000000000000000000000000000 --- a/src/main/java/com/example/demo/dto/input/LevelType.java +++ /dev/null @@ -1,8 +0,0 @@ -package com.example.demo.dto.input; - -public enum LevelType { - assessment, - task, - info, - phase -} diff --git a/src/main/java/com/example/demo/enums/LevelType.java b/src/main/java/com/example/demo/enums/LevelType.java new file mode 100644 index 0000000000000000000000000000000000000000..da1504d1a2a5b1a4c4309cec31451a8d96dbdea0 --- /dev/null +++ b/src/main/java/com/example/demo/enums/LevelType.java @@ -0,0 +1,9 @@ +package com.example.demo.enums; + +public enum LevelType { + assessment, // TODO deprecated, should be replaced by questionnaire + questionnaire, + task, + info, + phase +} diff --git a/src/main/java/com/example/demo/enums/QuestionType.java b/src/main/java/com/example/demo/enums/QuestionType.java new file mode 100644 index 0000000000000000000000000000000000000000..a040769c6ef09d362a84a4e3414804a383ba9781 --- /dev/null +++ b/src/main/java/com/example/demo/enums/QuestionType.java @@ -0,0 +1,4 @@ +package com.example.demo.enums; + +public enum QuestionType { +} diff --git a/src/main/java/com/example/demo/mapper/BeanMapper.java b/src/main/java/com/example/demo/mapper/BeanMapper.java index 424de9bddf28b07597461dc0b324703d82976b53..4d886e173fbc34495d07703d66a9d3cb66ebecaa 100644 --- a/src/main/java/com/example/demo/mapper/BeanMapper.java +++ b/src/main/java/com/example/demo/mapper/BeanMapper.java @@ -4,20 +4,26 @@ import com.example.demo.domain.AssessmentLevel; import com.example.demo.domain.Attachment; import com.example.demo.domain.BaseLevel; import com.example.demo.domain.DecisionMatrixRow; -import com.example.demo.domain.Task; import com.example.demo.domain.InfoLevel; import com.example.demo.domain.PhaseLevel; +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.AssessmentLevelDto; import com.example.demo.dto.AttachmentDto; import com.example.demo.dto.BaseLevelDto; import com.example.demo.dto.DecisionMatrixRowDto; -import com.example.demo.dto.TaskCreateDto; -import com.example.demo.dto.TaskDto; -import com.example.demo.dto.TaskUpdateDto; import com.example.demo.dto.InfoLevelCreateDto; import com.example.demo.dto.InfoLevelDto; import com.example.demo.dto.InfoLevelUpdateDto; import com.example.demo.dto.PhaseLevelDto; +import com.example.demo.dto.QuestionChoiceDto; +import com.example.demo.dto.QuestionDto; +import com.example.demo.dto.QuestionnaireLevelDto; +import com.example.demo.dto.TaskCreateDto; +import com.example.demo.dto.TaskDto; +import com.example.demo.dto.TaskUpdateDto; import com.example.demo.dto.input.GameDefinitionCreateDto; import org.mapstruct.Mapper; import org.mapstruct.Mapping; @@ -40,6 +46,8 @@ public interface BeanMapper { baseLevelDto = toDto((InfoLevel) baseLevel); } else if (baseLevel instanceof Task) { baseLevelDto = toDto((Task) baseLevel); + } else if (baseLevel instanceof QuestionnaireLevel) { + baseLevelDto = toDto((QuestionnaireLevel) baseLevel); } else { throw new RuntimeException("Unknown level type " + baseLevel.getClass().getName()); } @@ -92,7 +100,8 @@ public interface BeanMapper { InfoLevel updateInfoLevel(@MappingTarget InfoLevel infoLevel, GameDefinitionCreateDto gameDefinitionCreateDto); @Mapping(target = "phaseLevel", ignore = true) - @Mapping(target = "attachments", ignore = true) // TODO not really sure about this + @Mapping(target = "attachments", ignore = true) + // TODO not really sure about this Task updateTask(@MappingTarget Task task, GameDefinitionCreateDto gameDefinitionCreateDto); @Mapping(target = "subLevels", ignore = true) @@ -113,4 +122,16 @@ public interface BeanMapper { DecisionMatrixRow toEntity(DecisionMatrixRowDto decisionMatrixRowDto); DecisionMatrixRowDto toDto(DecisionMatrixRow decisionMatrixRow); + + QuestionChoice toEntity(QuestionChoiceDto questionChoiceDto); + + QuestionChoiceDto toDto(QuestionChoice questionChoice); + + Question toEntity(QuestionDto questionDto); + + QuestionDto toDto(Question question); + + QuestionnaireLevel toEntity(QuestionnaireLevelDto questionnaireLevelDto); + + QuestionnaireLevelDto toDto(QuestionnaireLevel questionnaireLevel); } diff --git a/src/main/java/com/example/demo/repository/QuestionChoiceRepository.java b/src/main/java/com/example/demo/repository/QuestionChoiceRepository.java new file mode 100644 index 0000000000000000000000000000000000000000..b7d14cd0a1bc364cd38895fbe6dbc1a647a87657 --- /dev/null +++ b/src/main/java/com/example/demo/repository/QuestionChoiceRepository.java @@ -0,0 +1,12 @@ +package com.example.demo.repository; + +import com.example.demo.domain.QuestionChoice; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Query; +import org.springframework.data.repository.query.Param; + +public interface QuestionChoiceRepository extends JpaRepository<QuestionChoice, Long> { + + @Query("SELECT COALESCE(MAX(q.order), -1) FROM QuestionChoice q WHERE q.question.id = :questionId") + Integer getCurrentMaxOrder(@Param("questionId") Long questionId); +} diff --git a/src/main/java/com/example/demo/repository/QuestionRepository.java b/src/main/java/com/example/demo/repository/QuestionRepository.java new file mode 100644 index 0000000000000000000000000000000000000000..9fb220afd1f217ee0552ef6865e3cd05b5c1f0ab --- /dev/null +++ b/src/main/java/com/example/demo/repository/QuestionRepository.java @@ -0,0 +1,12 @@ +package com.example.demo.repository; + +import com.example.demo.domain.Question; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Query; +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") + Integer getCurrentMaxOrder(@Param("questionnaireId") Long questionnaireId); +} diff --git a/src/main/java/com/example/demo/repository/QuestionnaireLevelRepository.java b/src/main/java/com/example/demo/repository/QuestionnaireLevelRepository.java new file mode 100644 index 0000000000000000000000000000000000000000..cbd04783dcf2b60d9adb2d1cba891133f9a69a92 --- /dev/null +++ b/src/main/java/com/example/demo/repository/QuestionnaireLevelRepository.java @@ -0,0 +1,9 @@ +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/service/LevelOperationsService.java b/src/main/java/com/example/demo/service/LevelOperationsService.java index da3cdfb909624e2df72823816dc30ae36674263c..429823d9640813551eea4d982ab0215f457c0af2 100644 --- a/src/main/java/com/example/demo/service/LevelOperationsService.java +++ b/src/main/java/com/example/demo/service/LevelOperationsService.java @@ -4,12 +4,15 @@ import com.example.demo.domain.BaseLevel; import com.example.demo.domain.Task; import com.example.demo.domain.InfoLevel; import com.example.demo.dto.BaseLevelDto; +import com.example.demo.dto.QuestionChoiceDto; +import com.example.demo.dto.QuestionDto; import com.example.demo.dto.TaskDto; import com.example.demo.dto.TaskUpdateDto; import com.example.demo.dto.InfoLevelUpdateDto; -import com.example.demo.dto.input.LevelType; +import com.example.demo.enums.LevelType; import com.example.demo.mapper.BeanMapper; import com.example.demo.repository.BaseLevelRepository; +import com.example.demo.repository.QuestionChoiceRepository; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -28,12 +31,21 @@ public class LevelOperationsService { @Autowired private AssessmentLevelService assessmentLevelService; + @Autowired + private QuestionnaireLevelService questionnaireLevelService; + @Autowired private PhaseLevelService phaseLevelService; @Autowired private TaskService taskService; + @Autowired + private QuestionService questionService; + + @Autowired + private QuestionChoiceService questionChoiceService; + public void swapLevelsOrder(Long levelIdFrom, Long levelIdTo) { Optional<BaseLevel> levelFrom = baseLevelRepository.findById(levelIdFrom); Optional<BaseLevel> levelTo = baseLevelRepository.findById(levelIdTo); @@ -75,6 +87,8 @@ public class LevelOperationsService { baseLevelDto = infoLevelService.createDefaultInfoLevel(trainingDefinitionId); } else if (levelType.equals(LevelType.assessment)) { baseLevelDto = assessmentLevelService.createDefaultAssessmentLevel(trainingDefinitionId); + } else if (levelType.equals(LevelType.questionnaire)) { + baseLevelDto = questionnaireLevelService.createDefaultQuestionnaireLevel(trainingDefinitionId); } else { baseLevelDto = phaseLevelService.createDefaultPhaseLevel(trainingDefinitionId); } @@ -111,4 +125,16 @@ public class LevelOperationsService { Task task = BeanMapper.INSTANCE.toEntity(taskUpdateDto); taskService.updateTask(task); } + + public QuestionDto createQuestion(Long questionnaireId) { + QuestionDto createdQuestion = questionService.createDefaultQuestion(questionnaireId); + + return createdQuestion; + } + + public QuestionChoiceDto createQuestionChoice(Long questionId) { + QuestionChoiceDto createdQuestionChoice = questionChoiceService.createDefaultQuestionChoice(questionId); + + return createdQuestionChoice; + } } diff --git a/src/main/java/com/example/demo/service/QuestionChoiceService.java b/src/main/java/com/example/demo/service/QuestionChoiceService.java new file mode 100644 index 0000000000000000000000000000000000000000..51a65589f9c229d304ffb0bb23fcbe80cea73040 --- /dev/null +++ b/src/main/java/com/example/demo/service/QuestionChoiceService.java @@ -0,0 +1,41 @@ +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.dto.QuestionChoiceDto; +import com.example.demo.dto.QuestionDto; +import com.example.demo.mapper.BeanMapper; +import com.example.demo.repository.QuestionChoiceRepository; +import com.example.demo.repository.QuestionRepository; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.Optional; + +@Service +public class QuestionChoiceService { + + @Autowired + private QuestionRepository questionRepository; + + @Autowired + private QuestionChoiceRepository questionChoiceRepository; + + public QuestionChoiceDto createDefaultQuestionChoice(Long questionId) { + Optional<Question> question = questionRepository.findById(questionId); + if (question.isEmpty()) { + // TODO return 404 + return null; + } + + QuestionChoice questionChoice = new QuestionChoice(); + questionChoice.setText("Title of question choice"); + questionChoice.setQuestion(question.get()); + questionChoice.setOrder(questionChoiceRepository.getCurrentMaxOrder(questionId) + 1); + + QuestionChoice persistedEntity = questionChoiceRepository.save(questionChoice); + + return BeanMapper.INSTANCE.toDto(persistedEntity); + } +} diff --git a/src/main/java/com/example/demo/service/QuestionService.java b/src/main/java/com/example/demo/service/QuestionService.java new file mode 100644 index 0000000000000000000000000000000000000000..faed7120a722fa404d6eb792647b56603d4d0600 --- /dev/null +++ b/src/main/java/com/example/demo/service/QuestionService.java @@ -0,0 +1,42 @@ +package com.example.demo.service; + +import com.example.demo.domain.PhaseLevel; +import com.example.demo.domain.Question; +import com.example.demo.domain.QuestionnaireLevel; +import com.example.demo.domain.Task; +import com.example.demo.dto.QuestionDto; +import com.example.demo.dto.TaskDto; +import com.example.demo.mapper.BeanMapper; +import com.example.demo.repository.QuestionRepository; +import com.example.demo.repository.QuestionnaireLevelRepository; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.Optional; + +@Service +public class QuestionService { + + @Autowired + private QuestionnaireLevelRepository questionnaireLevelRepository; + + @Autowired + private QuestionRepository questionRepository; + + public QuestionDto createDefaultQuestion(Long questionnaireId) { + Optional<QuestionnaireLevel> questionnaireLevel = questionnaireLevelRepository.findById(questionnaireId); + if (questionnaireLevel.isEmpty()) { + // TODO return 404 + return null; + } + + Question question = new Question(); + question.setText("Title of question"); + question.setQuestionnaireLevel(questionnaireLevel.get()); + question.setOrder(questionRepository.getCurrentMaxOrder(questionnaireId) + 1); + + Question persistedEntity = questionRepository.save(question); + + return BeanMapper.INSTANCE.toDto(persistedEntity); + } +} diff --git a/src/main/java/com/example/demo/service/QuestionnaireLevelService.java b/src/main/java/com/example/demo/service/QuestionnaireLevelService.java new file mode 100644 index 0000000000000000000000000000000000000000..1e693a218afb49c2176c2890f04f01030729a0fb --- /dev/null +++ b/src/main/java/com/example/demo/service/QuestionnaireLevelService.java @@ -0,0 +1,32 @@ +package com.example.demo.service; + +import com.example.demo.domain.AssessmentLevel; +import com.example.demo.domain.QuestionnaireLevel; +import com.example.demo.dto.QuestionnaireLevelDto; +import com.example.demo.mapper.BeanMapper; +import com.example.demo.repository.BaseLevelRepository; +import com.example.demo.repository.QuestionnaireLevelRepository; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +@Service +public class QuestionnaireLevelService { + + @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); + } +}