From 07e47ba0d06d0d877ada94f9055a59544cfeacb1 Mon Sep 17 00:00:00 2001 From: Jan Tymel <410388@mail.muni.cz> Date: Fri, 29 Jan 2021 18:46:49 +0100 Subject: [PATCH] Change REST API for phases deletion according to the new design Related to #10 --- ...tiveTrainingDefinitionsRestController.java | 28 ++++---- .../demo/controller/PhasesController.java | 40 +++++++++-- .../demo/repository/BaseLevelRepository.java | 6 +- .../demo/service/LevelOperationsService.java | 71 +++++++++---------- 4 files changed, 83 insertions(+), 62 deletions(-) diff --git a/src/main/java/com/example/demo/controller/AdaptiveTrainingDefinitionsRestController.java b/src/main/java/com/example/demo/controller/AdaptiveTrainingDefinitionsRestController.java index 6e4aee12..b0fe84f1 100644 --- a/src/main/java/com/example/demo/controller/AdaptiveTrainingDefinitionsRestController.java +++ b/src/main/java/com/example/demo/controller/AdaptiveTrainingDefinitionsRestController.java @@ -63,20 +63,20 @@ public class AdaptiveTrainingDefinitionsRestController { levelOperationsService.moveLevelToSpecifiedOrder(levelIdFrom, newPosition); } - @ApiOperation(httpMethod = "DELETE", - value = "Delete a specified level", - nickname = "deleteLevel", - produces = MediaType.APPLICATION_JSON_VALUE - ) - @ApiResponses(value = { - @ApiResponse(code = 200, message = "Level deleted"), - @ApiResponse(code = 500, message = "Unexpected application error") - }) - @DeleteMapping(value = "/levels/{levelId}", produces = MediaType.APPLICATION_JSON_VALUE) - public void deleteLevel( - @ApiParam(value = "Level ID", required = true) @PathVariable(name = "levelId") Long levelId) { - levelOperationsService.deleteLevel(levelId); - } +// @ApiOperation(httpMethod = "DELETE", +// value = "Delete a specified level", +// nickname = "deleteLevel", +// produces = MediaType.APPLICATION_JSON_VALUE +// ) +// @ApiResponses(value = { +// @ApiResponse(code = 200, message = "Level deleted"), +// @ApiResponse(code = 500, message = "Unexpected application error") +// }) +// @DeleteMapping(value = "/levels/{levelId}", produces = MediaType.APPLICATION_JSON_VALUE) +// public void deleteLevel( +// @ApiParam(value = "Level ID", required = true) @PathVariable(name = "levelId") Long levelId) { +// levelOperationsService.deleteLevel(levelId); +// } // @ApiOperation(httpMethod = "POST", // value = "Create a new level", diff --git a/src/main/java/com/example/demo/controller/PhasesController.java b/src/main/java/com/example/demo/controller/PhasesController.java index 62b6cd20..7b8f336b 100644 --- a/src/main/java/com/example/demo/controller/PhasesController.java +++ b/src/main/java/com/example/demo/controller/PhasesController.java @@ -2,7 +2,7 @@ package com.example.demo.controller; import com.example.demo.dto.BaseLevelDto; import com.example.demo.dto.PhaseCreateDTO; -import com.example.demo.service.LevelOperationsService; +import com.example.demo.facade.TrainingPhaseFacade; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiParam; @@ -13,6 +13,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.DeleteMapping; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.PostMapping; @@ -32,7 +33,7 @@ import java.util.List; public class PhasesController { @Autowired - private LevelOperationsService levelOperationsService; + private TrainingPhaseFacade trainingPhaseFacade; @ApiOperation(httpMethod = "POST", value = "Create a new phase", @@ -52,7 +53,7 @@ public class PhasesController { @ApiParam(value = "Level type", allowableValues = "questionnaire, info, game", required = true) @RequestBody @Valid PhaseCreateDTO phaseCreateDTO) { - BaseLevelDto createdPhase = levelOperationsService.createLevel(definitionId, phaseCreateDTO); + BaseLevelDto createdPhase = trainingPhaseFacade.createPhase(definitionId, phaseCreateDTO); return new ResponseEntity<>(createdPhase, HttpStatus.CREATED); } @@ -73,7 +74,7 @@ public class PhasesController { @ApiParam(value = "Training definition ID", required = true) @PathVariable(name = "definitionId") Long definitionId) { - List<BaseLevelDto> phases = levelOperationsService.getPhases(definitionId); + List<BaseLevelDto> phases = trainingPhaseFacade.getPhases(definitionId); return new ResponseEntity<>(phases, HttpStatus.OK); } @@ -88,13 +89,38 @@ public class PhasesController { @ApiResponse(code = 200, message = "Phase returned"), @ApiResponse(code = 500, message = "Unexpected application error") }) - @GetMapping(path = "/levels/{levelId}") + @GetMapping(path = "/{phaseId}") public ResponseEntity<BaseLevelDto> getPhase( - @ApiParam(value = "Level ID", required = true) @PathVariable("levelId") Long levelId) { + @ApiParam(value = "Training definition ID", required = true) + @PathVariable(name = "definitionId") Long definitionId, + @ApiParam(value = "Level ID", required = true) + @PathVariable("phaseId") Long phaseId) { - BaseLevelDto phase = levelOperationsService.getLevel(levelId); + BaseLevelDto phase = trainingPhaseFacade.getPhase(definitionId, phaseId); return new ResponseEntity<>(phase, HttpStatus.OK); } + @ApiOperation(httpMethod = "DELETE", + value = "Remove phase by ID", + response = BaseLevelDto.class, + nickname = "getPhase", + produces = MediaType.APPLICATION_JSON_VALUE + ) + @ApiResponses(value = { + @ApiResponse(code = 200, message = "Phase removed"), + @ApiResponse(code = 500, message = "Unexpected application error") + }) + @DeleteMapping(path = "/{phaseId}") + public ResponseEntity<List<BaseLevelDto>> removePhase( + @ApiParam(value = "Training definition ID", required = true) + @PathVariable(name = "definitionId") Long definitionId, + @ApiParam(value = "Level ID", required = true) + @PathVariable("phaseId") Long phaseId) { + + List<BaseLevelDto> remainingPhases = trainingPhaseFacade.deletePhase(definitionId, phaseId); + + return new ResponseEntity<>(remainingPhases, HttpStatus.OK); + } + } diff --git a/src/main/java/com/example/demo/repository/BaseLevelRepository.java b/src/main/java/com/example/demo/repository/BaseLevelRepository.java index 6cd676b2..fbb6ef76 100644 --- a/src/main/java/com/example/demo/repository/BaseLevelRepository.java +++ b/src/main/java/com/example/demo/repository/BaseLevelRepository.java @@ -18,11 +18,9 @@ public interface BaseLevelRepository extends JpaRepository<BaseLevel, Long> { @Modifying @Query("UPDATE BaseLevel l SET l.order = l.order - 1 " + "WHERE l.trainingDefinitionId = :trainingDefinitionId " + - "AND l.order > :order " + - "AND ( (l.phaseLevel.id = :phaseLevelId) OR (:phaseLevelId IS NULL) )") + "AND l.order > :order ") void decreaseOrderAfterLevelWasDeleted(@Param("trainingDefinitionId") Long trainingDefinitionId, - @Param("order") int order, - @Param("phaseLevelId") Long phaseLevelId); + @Param("order") int order); @Modifying @Query("UPDATE BaseLevel l SET l.order = l.order + 1 " + diff --git a/src/main/java/com/example/demo/service/LevelOperationsService.java b/src/main/java/com/example/demo/service/LevelOperationsService.java index fdf52126..ebccb113 100644 --- a/src/main/java/com/example/demo/service/LevelOperationsService.java +++ b/src/main/java/com/example/demo/service/LevelOperationsService.java @@ -8,14 +8,12 @@ import com.example.demo.domain.QuestionChoice; import com.example.demo.domain.QuestionnaireLevel; import com.example.demo.dto.BaseLevelDto; import com.example.demo.dto.InfoLevelUpdateDto; -import com.example.demo.dto.PhaseCreateDTO; import com.example.demo.dto.PhaseLevelUpdateDto; 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.QuestionnaireUpdateDto; -import com.example.demo.enums.PhaseType; import com.example.demo.enums.QuestionType; import com.example.demo.mapper.BeanMapper; import com.example.demo.repository.BaseLevelRepository; @@ -23,7 +21,6 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; -import java.util.List; import java.util.Optional; @Service @@ -79,21 +76,21 @@ public class LevelOperationsService { phaseLevelService.alignDecisionMatrixForPhasesInTrainingDefinition(levelFrom.get().getTrainingDefinitionId()); } - @Transactional - public void deleteLevel(Long levelId) { - Optional<BaseLevel> levelEntity = baseLevelRepository.findById(levelId); - - if (levelEntity.isEmpty()) { - // TODO throw a proper exception - return; - } - - int levelOrder = levelEntity.get().getOrder(); - Long phaseId = levelEntity.get().getPhaseLevel() == null ? null : levelEntity.get().getPhaseLevel().getId(); - baseLevelRepository.decreaseOrderAfterLevelWasDeleted(levelEntity.get().getTrainingDefinitionId(), levelOrder, phaseId); - - baseLevelRepository.delete(levelEntity.get()); - } +// @Transactional +// public void deleteLevel(Long levelId) { +// Optional<BaseLevel> levelEntity = baseLevelRepository.findById(levelId); +// +// if (levelEntity.isEmpty()) { +// // TODO throw a proper exception +// return; +// } +// +// int levelOrder = levelEntity.get().getOrder(); +// Long phaseId = levelEntity.get().getPhaseLevel() == null ? null : levelEntity.get().getPhaseLevel().getId(); +// baseLevelRepository.decreaseOrderAfterLevelWasDeleted(levelEntity.get().getTrainingDefinitionId(), levelOrder, phaseId); +// +// baseLevelRepository.delete(levelEntity.get()); +// } @Transactional public void deleteQuestion(Long questionId) { @@ -105,20 +102,20 @@ public class LevelOperationsService { questionChoiceService.deleteQuestionChoice(questionChoiceId); } - public BaseLevelDto createLevel(Long trainingDefinitionId, PhaseCreateDTO phaseCreateDTO) { - BaseLevelDto baseLevelDto; - if (PhaseType.INFO.equals(phaseCreateDTO.getPhaseType())) { - baseLevelDto = infoLevelService.createDefaultInfoLevel(trainingDefinitionId); - } else if (PhaseType.QUESTIONNAIRE.equals(phaseCreateDTO.getPhaseType())) { - baseLevelDto = questionnaireLevelService.createDefaultQuestionnaireLevel(trainingDefinitionId); - } else { - baseLevelDto = phaseLevelService.createDefaultPhaseLevel(trainingDefinitionId); - } - - baseLevelDto.setPhaseType(phaseCreateDTO.getPhaseType()); - - return baseLevelDto; - } +// public BaseLevelDto createLevel(Long trainingDefinitionId, PhaseCreateDTO phaseCreateDTO) { +// BaseLevelDto baseLevelDto; +// if (PhaseType.INFO.equals(phaseCreateDTO.getPhaseType())) { +// baseLevelDto = infoLevelService.createDefaultInfoLevel(trainingDefinitionId); +// } else if (PhaseType.QUESTIONNAIRE.equals(phaseCreateDTO.getPhaseType())) { +// baseLevelDto = questionnaireLevelService.createDefaultQuestionnaireLevel(trainingDefinitionId); +// } else { +// baseLevelDto = phaseLevelService.createDefaultPhaseLevel(trainingDefinitionId); +// } +// +// baseLevelDto.setPhaseType(phaseCreateDTO.getPhaseType()); +// +// return baseLevelDto; +// } // public BaseLevelDto createTask(Long phaseId) { // TaskDto createdTask = taskService.createDefaultTask(phaseId); @@ -127,11 +124,11 @@ public class LevelOperationsService { // return createdTask; // } - public List<BaseLevelDto> getPhases(Long trainingDefinitionId) { - List<BaseLevel> phases = baseLevelRepository.findAllByTrainingDefinitionIdOrderByOrder(trainingDefinitionId); - - return BeanMapper.INSTANCE.toDtoList(phases); - } +// public List<BaseLevelDto> getPhases(Long trainingDefinitionId) { +// List<BaseLevel> phases = baseLevelRepository.findAllByTrainingDefinitionIdOrderByOrder(trainingDefinitionId); +// +// return BeanMapper.INSTANCE.toDtoList(phases); +// } public BaseLevelDto getLevel(Long levelId) { Optional<BaseLevel> level = baseLevelRepository.findById(levelId); -- GitLab