Skip to content
Snippets Groups Projects
Commit 07e47ba0 authored by Jan Tymel's avatar Jan Tymel
Browse files

Change REST API for phases deletion according to the new design

Related to #10
parent 2382029a
No related branches found
No related tags found
No related merge requests found
......@@ -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",
......
......@@ -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);
}
}
......@@ -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 " +
......
......@@ -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);
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment