diff --git a/src/main/java/com/example/demo/controller/AdaptiveTrainingDefinitionsRestController.java b/src/main/java/com/example/demo/controller/AdaptiveTrainingDefinitionsRestController.java index e9f925b5b68a3bdb2ed892643cd89e0726354113..fad0589eda40f74e103bbc22a020b3d6144ee12b 100644 --- a/src/main/java/com/example/demo/controller/AdaptiveTrainingDefinitionsRestController.java +++ b/src/main/java/com/example/demo/controller/AdaptiveTrainingDefinitionsRestController.java @@ -1,6 +1,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.QuestionDto; import com.example.demo.dto.TaskUpdateDto; @@ -129,6 +130,22 @@ public class AdaptiveTrainingDefinitionsRestController { levelOperationsService.updateInfoLevel(infoLevelUpdateDto); } + @ApiOperation(httpMethod = "PUT", + value = "Update phase", + nickname = "updatePhaseLevel", + consumes = MediaType.APPLICATION_JSON_VALUE + ) + @ApiResponses(value = { + @ApiResponse(code = 200, message = "Phase level"), + @ApiResponse(code = 500, message = "Unexpected application error") + }) + @PutMapping(path = "/phases") + public void updatePhaseLevel( + @ApiParam(value = "Info level to be updated") @RequestBody PhaseLevelUpdateDto phaseLevelUpdateDto) { + + levelOperationsService.updatePhaseLevel(phaseLevelUpdateDto); + } + @ApiOperation(httpMethod = "PUT", value = "Update task", nickname = "updateTask", diff --git a/src/main/java/com/example/demo/dto/PhaseLevelUpdateDto.java b/src/main/java/com/example/demo/dto/PhaseLevelUpdateDto.java new file mode 100644 index 0000000000000000000000000000000000000000..199653042cfcc0522d9a8af220c47e34cf8c82f8 --- /dev/null +++ b/src/main/java/com/example/demo/dto/PhaseLevelUpdateDto.java @@ -0,0 +1,79 @@ +package com.example.demo.dto; + +import java.util.List; + +public class PhaseLevelUpdateDto { + + private Long id; + private String title; + private Integer order; + private Integer allowedWrongFlags; + private Integer allowedCommands; + private Integer estimatedDuration; + private Long maxScore; + private List<DecisionMatrixRowDto> decisionMatrix; + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getTitle() { + return title; + } + + public void setTitle(String title) { + this.title = title; + } + + public Integer getOrder() { + return order; + } + + public void setOrder(Integer order) { + this.order = order; + } + + public Integer getAllowedWrongFlags() { + return allowedWrongFlags; + } + + public void setAllowedWrongFlags(Integer allowedWrongFlags) { + this.allowedWrongFlags = allowedWrongFlags; + } + + public Integer getAllowedCommands() { + return allowedCommands; + } + + public void setAllowedCommands(Integer allowedCommands) { + this.allowedCommands = allowedCommands; + } + + public Integer getEstimatedDuration() { + return estimatedDuration; + } + + public void setEstimatedDuration(Integer estimatedDuration) { + this.estimatedDuration = estimatedDuration; + } + + public Long getMaxScore() { + return maxScore; + } + + public void setMaxScore(Long maxScore) { + this.maxScore = maxScore; + } + + public List<DecisionMatrixRowDto> getDecisionMatrix() { + return decisionMatrix; + } + + public void setDecisionMatrix(List<DecisionMatrixRowDto> decisionMatrix) { + this.decisionMatrix = decisionMatrix; + } +} diff --git a/src/main/java/com/example/demo/mapper/BeanMapper.java b/src/main/java/com/example/demo/mapper/BeanMapper.java index 4d886e173fbc34495d07703d66a9d3cb66ebecaa..1f380c16fec1c36dfa0b6c4a10f14e00c1c2de10 100644 --- a/src/main/java/com/example/demo/mapper/BeanMapper.java +++ b/src/main/java/com/example/demo/mapper/BeanMapper.java @@ -18,6 +18,7 @@ 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.PhaseLevelUpdateDto; import com.example.demo.dto.QuestionChoiceDto; import com.example.demo.dto.QuestionDto; import com.example.demo.dto.QuestionnaireLevelDto; @@ -87,6 +88,8 @@ public interface BeanMapper { PhaseLevel toEntity(PhaseLevelDto phaseLevel); + PhaseLevel toEntity(PhaseLevelUpdateDto phaseLevelUpdateDto); + AssessmentLevel toAssessmentLevel(GameDefinitionCreateDto gameDefinitionCreateDto); InfoLevel toInfoLevel(GameDefinitionCreateDto gameDefinitionCreateDto); diff --git a/src/main/java/com/example/demo/service/LevelOperationsService.java b/src/main/java/com/example/demo/service/LevelOperationsService.java index 1b61e2b14d53fd02f51c4bd91b1e90918933da24..a450ccee98d30a33b7e1cc2b569026a7682b1783 100644 --- a/src/main/java/com/example/demo/service/LevelOperationsService.java +++ b/src/main/java/com/example/demo/service/LevelOperationsService.java @@ -1,9 +1,11 @@ package com.example.demo.service; import com.example.demo.domain.BaseLevel; +import com.example.demo.domain.PhaseLevel; 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.QuestionDto; import com.example.demo.dto.TaskDto; @@ -128,6 +130,11 @@ public class LevelOperationsService { infoLevelService.updateInfoLevel(infoLevel); } + public void updatePhaseLevel(PhaseLevelUpdateDto phaseLevelUpdateDto) { + PhaseLevel phaseLevel = BeanMapper.INSTANCE.toEntity(phaseLevelUpdateDto); + phaseLevelService.updatePhaseLevel(phaseLevel); + } + public void updateTask(TaskUpdateDto taskUpdateDto) { Task task = BeanMapper.INSTANCE.toEntity(taskUpdateDto); taskService.updateTask(task); diff --git a/src/main/java/com/example/demo/service/PhaseLevelService.java b/src/main/java/com/example/demo/service/PhaseLevelService.java index b4a2ceccab94eddfb4c3123e0d3656bb6a2546d3..e118b5607e6b9420073b1056ddf2dabac2a403a8 100644 --- a/src/main/java/com/example/demo/service/PhaseLevelService.java +++ b/src/main/java/com/example/demo/service/PhaseLevelService.java @@ -6,14 +6,20 @@ import com.example.demo.dto.PhaseLevelDto; import com.example.demo.mapper.BeanMapper; import com.example.demo.repository.BaseLevelRepository; import com.example.demo.repository.PhaseLevelRepository; +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.Collections; +import java.util.Optional; @Service public class PhaseLevelService { + private static final Logger LOG = LoggerFactory.getLogger(PhaseLevelService.class); + @Autowired private PhaseLevelRepository phaseLevelRepository; @@ -42,4 +48,26 @@ public class PhaseLevelService { return BeanMapper.INSTANCE.toDto(persistedEntity); } + + public PhaseLevelDto updatePhaseLevel(PhaseLevel phaseLevel) { + Optional<PhaseLevel> persistedPhaseLevel = phaseLevelRepository.findById(phaseLevel.getId()); + + if (persistedPhaseLevel.isEmpty()) { + // TODO return 404 + LOG.error("No phase level found with ID {}.", phaseLevel.getId()); + return new PhaseLevelDto(); + } + + phaseLevel.setTrainingDefinitionId(persistedPhaseLevel.get().getTrainingDefinitionId()); + phaseLevel.setOrder(persistedPhaseLevel.get().getOrder()); + phaseLevel.setSubLevels(persistedPhaseLevel.get().getSubLevels()); + + if (!CollectionUtils.isEmpty(phaseLevel.getDecisionMatrix())) { + phaseLevel.getDecisionMatrix().forEach(x -> x.setPhaseLevel(phaseLevel)); + } + + PhaseLevel savedEntity = phaseLevelRepository.save(phaseLevel); + + return BeanMapper.INSTANCE.toDto(savedEntity); + } }