From 806d0e64f42051003c4cffba86679932e961455a Mon Sep 17 00:00:00 2001 From: Jan Tymel <410388@mail.muni.cz> Date: Wed, 27 Jan 2021 08:39:53 +0100 Subject: [PATCH] Change REST API retrieving phases according to the new design Related to #10 --- ...tiveTrainingDefinitionsRestController.java | 35 ++++++++------- .../demo/controller/PhasesController.java | 43 +++++++++++++++++++ .../com/example/demo/mapper/BeanMapper.java | 4 ++ .../demo/repository/BaseLevelRepository.java | 4 ++ .../demo/service/LevelOperationsService.java | 7 +++ 5 files changed, 75 insertions(+), 18 deletions(-) diff --git a/src/main/java/com/example/demo/controller/AdaptiveTrainingDefinitionsRestController.java b/src/main/java/com/example/demo/controller/AdaptiveTrainingDefinitionsRestController.java index b1e018bf..b35ba070 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.InfoLevelUpdateDto; import com.example.demo.dto.PhaseLevelUpdateDto; import com.example.demo.dto.QuestionChoiceDto; import com.example.demo.dto.QuestionChoiceUpdateDto; @@ -8,7 +9,6 @@ import com.example.demo.dto.QuestionDto; import com.example.demo.dto.QuestionUpdateDto; import com.example.demo.dto.QuestionnaireUpdateDto; import com.example.demo.dto.TaskUpdateDto; -import com.example.demo.dto.InfoLevelUpdateDto; import com.example.demo.enums.QuestionType; import com.example.demo.service.LevelOperationsService; import io.swagger.annotations.Api; @@ -21,7 +21,6 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.MediaType; import org.springframework.web.bind.annotation.CrossOrigin; 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; import org.springframework.web.bind.annotation.PutMapping; @@ -99,22 +98,22 @@ public class AdaptiveTrainingDefinitionsRestController { // return levelOperationsService.createLevel(definitionId, levelType); // } - @ApiOperation(httpMethod = "GET", - value = "Get level by ID", - response = BaseLevelDto.class, - nickname = "getLevel", - produces = MediaType.APPLICATION_JSON_VALUE - ) - @ApiResponses(value = { - @ApiResponse(code = 200, message = "Level returned"), - @ApiResponse(code = 500, message = "Unexpected application error") - }) - @GetMapping(path = "/levels/{levelId}") - public BaseLevelDto getLevel( - @ApiParam(value = "Level ID", required = true) @PathVariable("levelId") Long levelId) { - - return levelOperationsService.getLevel(levelId); - } +// @ApiOperation(httpMethod = "GET", +// value = "Get level by ID", +// response = BaseLevelDto.class, +// nickname = "getLevel", +// produces = MediaType.APPLICATION_JSON_VALUE +// ) +// @ApiResponses(value = { +// @ApiResponse(code = 200, message = "Level returned"), +// @ApiResponse(code = 500, message = "Unexpected application error") +// }) +// @GetMapping(path = "/levels/{levelId}") +// public BaseLevelDto getLevel( +// @ApiParam(value = "Level ID", required = true) @PathVariable("levelId") Long levelId) { +// +// return levelOperationsService.getLevel(levelId); +// } @ApiOperation(httpMethod = "PUT", value = "Update info level", diff --git a/src/main/java/com/example/demo/controller/PhasesController.java b/src/main/java/com/example/demo/controller/PhasesController.java index 03904972..62b6cd20 100644 --- a/src/main/java/com/example/demo/controller/PhasesController.java +++ b/src/main/java/com/example/demo/controller/PhasesController.java @@ -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.GetMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; @@ -20,6 +21,7 @@ import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import javax.validation.Valid; +import java.util.List; @RestController @RequestMapping(value = "/training-definitions/{definitionId}/phases", produces = MediaType.APPLICATION_JSON_VALUE) @@ -54,4 +56,45 @@ public class PhasesController { return new ResponseEntity<>(createdPhase, HttpStatus.CREATED); } + + @ApiOperation(httpMethod = "GET", + value = "Get all phases", + notes = "Get all phases associated with specified training definition", + response = Object.class, + nickname = "getPhases", + produces = MediaType.APPLICATION_JSON_VALUE + ) + @ApiResponses(value = { + @ApiResponse(code = 200, message = "Phases returned"), + @ApiResponse(code = 500, message = "Unexpected application error") + }) + @GetMapping + public ResponseEntity<List<BaseLevelDto>> getPhases( + @ApiParam(value = "Training definition ID", required = true) + @PathVariable(name = "definitionId") Long definitionId) { + + List<BaseLevelDto> phases = levelOperationsService.getPhases(definitionId); + + return new ResponseEntity<>(phases, HttpStatus.OK); + } + + @ApiOperation(httpMethod = "GET", + value = "Get phase by ID", + response = BaseLevelDto.class, + nickname = "getPhase", + produces = MediaType.APPLICATION_JSON_VALUE + ) + @ApiResponses(value = { + @ApiResponse(code = 200, message = "Phase returned"), + @ApiResponse(code = 500, message = "Unexpected application error") + }) + @GetMapping(path = "/levels/{levelId}") + public ResponseEntity<BaseLevelDto> getPhase( + @ApiParam(value = "Level ID", required = true) @PathVariable("levelId") Long levelId) { + + BaseLevelDto phase = levelOperationsService.getLevel(levelId); + + return new ResponseEntity<>(phase, HttpStatus.OK); + } + } diff --git a/src/main/java/com/example/demo/mapper/BeanMapper.java b/src/main/java/com/example/demo/mapper/BeanMapper.java index 79a0550d..7fda2d03 100644 --- a/src/main/java/com/example/demo/mapper/BeanMapper.java +++ b/src/main/java/com/example/demo/mapper/BeanMapper.java @@ -34,6 +34,8 @@ import org.mapstruct.Mapping; import org.mapstruct.MappingTarget; import org.mapstruct.factory.Mappers; +import java.util.List; + @Mapper public interface BeanMapper { @@ -59,6 +61,8 @@ public interface BeanMapper { return baseLevelDto; } + List<BaseLevelDto> toDtoList(List<BaseLevel> baseLevel); + AssessmentLevelDto toDto(AssessmentLevel assessmentLevel); AssessmentLevel toEntity(AssessmentLevelDto assessmentLevel); diff --git a/src/main/java/com/example/demo/repository/BaseLevelRepository.java b/src/main/java/com/example/demo/repository/BaseLevelRepository.java index e3a10676..6cd676b2 100644 --- a/src/main/java/com/example/demo/repository/BaseLevelRepository.java +++ b/src/main/java/com/example/demo/repository/BaseLevelRepository.java @@ -6,8 +6,12 @@ import org.springframework.data.jpa.repository.Modifying; import org.springframework.data.jpa.repository.Query; import org.springframework.data.repository.query.Param; +import java.util.List; + public interface BaseLevelRepository extends JpaRepository<BaseLevel, Long> { + List<BaseLevel> findAllByTrainingDefinitionIdOrderByOrder(long trainingDefinitionId); + @Query("SELECT COALESCE(MAX(l.order), -1) FROM BaseLevel l WHERE l.trainingDefinitionId = :trainingDefinitionId") Integer getCurrentMaxOrder(@Param("trainingDefinitionId") Long trainingDefinitionId); diff --git a/src/main/java/com/example/demo/service/LevelOperationsService.java b/src/main/java/com/example/demo/service/LevelOperationsService.java index 7309f3e3..fd947acc 100644 --- a/src/main/java/com/example/demo/service/LevelOperationsService.java +++ b/src/main/java/com/example/demo/service/LevelOperationsService.java @@ -25,6 +25,7 @@ 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 @@ -128,6 +129,12 @@ public class LevelOperationsService { // return createdTask; // } + 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