diff --git a/src/main/java/com/example/demo/controller/AdaptiveTrainingDefinitionsRestController.java b/src/main/java/com/example/demo/controller/AdaptiveTrainingDefinitionsRestController.java index 36106eda6e7728c0adbf8331b0a709b706b393bc..3152df7bebf7431603dcca8dfd569cd0227c3846 100644 --- a/src/main/java/com/example/demo/controller/AdaptiveTrainingDefinitionsRestController.java +++ b/src/main/java/com/example/demo/controller/AdaptiveTrainingDefinitionsRestController.java @@ -9,7 +9,6 @@ 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.LevelType; import com.example.demo.enums.QuestionType; import com.example.demo.service.LevelOperationsService; import io.swagger.annotations.Api; @@ -29,7 +28,6 @@ import org.springframework.web.bind.annotation.PutMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; -import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; @RestController @@ -81,25 +79,25 @@ public class AdaptiveTrainingDefinitionsRestController { levelOperationsService.deleteLevel(levelId); } - @ApiOperation(httpMethod = "POST", - value = "Create a new level", - notes = "Creates only default level with a specified type", - response = BaseLevelDto.class, - nickname = "createLevel", - produces = MediaType.APPLICATION_JSON_VALUE - ) - @ApiResponses(value = { - @ApiResponse(code = 200, message = "Level created"), - @ApiResponse(code = 500, message = "Unexpected application error") - }) - @PostMapping(path = "/levels/{levelType}") - public BaseLevelDto createLevel( - @ApiParam(value = "Training definition ID", required = true) @RequestParam(name = "definitionId") Long definitionId, - @ApiParam(value = "Level type", allowableValues = "questionnaire, assessment, info, phase", required = true) - @PathVariable("levelType") LevelType levelType) { - - return levelOperationsService.createLevel(definitionId, levelType); - } +// @ApiOperation(httpMethod = "POST", +// value = "Create a new level", +// notes = "Creates only default level with a specified type", +// response = BaseLevelDto.class, +// nickname = "createLevel", +// produces = MediaType.APPLICATION_JSON_VALUE +// ) +// @ApiResponses(value = { +// @ApiResponse(code = 200, message = "Level created"), +// @ApiResponse(code = 500, message = "Unexpected application error") +// }) +// @PostMapping(path = "/levels/{levelType}") +// public BaseLevelDto createLevel( +// @ApiParam(value = "Training definition ID", required = true) @RequestParam(name = "definitionId") Long definitionId, +// @ApiParam(value = "Level type", allowableValues = "questionnaire, assessment, info, phase", required = true) +// @PathVariable("levelType") LevelType levelType) { +// +// return levelOperationsService.createLevel(definitionId, levelType); +// } @ApiOperation(httpMethod = "GET", value = "Get level by ID", diff --git a/src/main/java/com/example/demo/controller/PhasesController.java b/src/main/java/com/example/demo/controller/PhasesController.java new file mode 100644 index 0000000000000000000000000000000000000000..d95cf6f3bab6d00a8b8bcbc1deec8e9c26277492 --- /dev/null +++ b/src/main/java/com/example/demo/controller/PhasesController.java @@ -0,0 +1,59 @@ +package com.example.demo.controller; + +import com.example.demo.dto.BaseLevelDto; +import com.example.demo.dto.PhaseCreateDTO; +import com.example.demo.service.LevelOperationsService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import io.swagger.annotations.ApiParam; +import io.swagger.annotations.ApiResponse; +import io.swagger.annotations.ApiResponses; +import io.swagger.annotations.Authorization; +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.CrossOrigin; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.RestController; + +import javax.validation.Valid; + +@RestController +@RequestMapping(value = "/training-definitions/{definitionId}/phases", produces = MediaType.APPLICATION_JSON_VALUE) +@Api(value = "/training-definitions/{definitionId}/phases", + tags = "Phases", + consumes = MediaType.APPLICATION_JSON_VALUE, + authorizations = @Authorization(value = "bearerAuth")) +public class PhasesController { + + @Autowired + private LevelOperationsService levelOperationsService; + + @ApiOperation(httpMethod = "POST", + value = "Create a new phase", + notes = "Creates a new default phase with a specified type", + response = BaseLevelDto.class, + nickname = "createLevel", + produces = MediaType.APPLICATION_JSON_VALUE + ) + @ApiResponses(value = { + @ApiResponse(code = 201, message = "Phase created"), + @ApiResponse(code = 500, message = "Unexpected application error") + }) + @PostMapping + public ResponseEntity<BaseLevelDto> createPhase( + @ApiParam(value = "Training definition ID", required = true) + @PathVariable(name = "definitionId") Long definitionId, + @ApiParam(value = "Level type", allowableValues = "questionnaire, info, game", required = true) + @RequestBody @Valid PhaseCreateDTO phaseCreateDTO) { + + BaseLevelDto createdPhase = levelOperationsService.createLevel(definitionId, phaseCreateDTO); + + return new ResponseEntity<>(createdPhase, HttpStatus.CREATED); + } +} diff --git a/src/main/java/com/example/demo/dto/BaseLevelDto.java b/src/main/java/com/example/demo/dto/BaseLevelDto.java index f6c3262ec8524f00c6537e249c709d3c6b32dc45..56d3fe9cc156248a0d2bc3dc61d687fee15c29fc 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.enums.LevelType; +import com.example.demo.enums.PhaseType; import java.io.Serializable; @@ -11,7 +11,7 @@ public abstract class BaseLevelDto implements Serializable { private Integer order; private String estimatedDuration; private Long maxScore; - private LevelType levelType; + private PhaseType phaseType; private Integer allowedCommands; private Integer allowedWrongFlags; @@ -55,12 +55,12 @@ public abstract class BaseLevelDto implements Serializable { this.maxScore = maxScore; } - public LevelType getLevelType() { - return levelType; + public PhaseType getPhaseType() { + return phaseType; } - public void setLevelType(LevelType levelType) { - this.levelType = levelType; + public void setPhaseType(PhaseType phaseType) { + this.phaseType = phaseType; } public Integer getAllowedCommands() { @@ -87,7 +87,7 @@ public abstract class BaseLevelDto implements Serializable { ", order=" + order + ", estimatedDuration='" + estimatedDuration + '\'' + ", maxScore=" + maxScore + - ", levelType=" + levelType + + ", levelType=" + phaseType + ", allowedCommands=" + allowedCommands + ", allowedWrongFlags=" + allowedWrongFlags + '}'; diff --git a/src/main/java/com/example/demo/dto/PhaseCreateDTO.java b/src/main/java/com/example/demo/dto/PhaseCreateDTO.java new file mode 100644 index 0000000000000000000000000000000000000000..7c4b286e390c40828fdc13703d96ead04f181a7c --- /dev/null +++ b/src/main/java/com/example/demo/dto/PhaseCreateDTO.java @@ -0,0 +1,28 @@ +package com.example.demo.dto; + +import com.example.demo.enums.PhaseType; +import io.swagger.annotations.ApiModelProperty; + +import javax.validation.constraints.NotNull; + +public class PhaseCreateDTO { + + @ApiModelProperty(value = "Type of phase.", required = true, allowableValues = "QUESTIONNAIRE, INFO, GAME", example = "GAME") + @NotNull(message = "Phase type must be specified") + private PhaseType phaseType; + + public PhaseType getPhaseType() { + return phaseType; + } + + public void setPhaseType(PhaseType phaseType) { + this.phaseType = phaseType; + } + + @Override + public String toString() { + return "PhaseCreateDTO{" + + "phaseType=" + phaseType + + '}'; + } +} 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 f8d2bde9e2f4b7efed1efdf89e5396e292c331cf..6242cc689fece0b71f5fa55847416a0bb0fa4e05 100644 --- a/src/main/java/com/example/demo/dto/input/GameDefinitionCreateDto.java +++ b/src/main/java/com/example/demo/dto/input/GameDefinitionCreateDto.java @@ -1,7 +1,7 @@ package com.example.demo.dto.input; import com.example.demo.dto.AttachmentDto; -import com.example.demo.enums.LevelType; +import com.example.demo.enums.PhaseType; import java.util.List; @@ -10,7 +10,7 @@ public class GameDefinitionCreateDto { private Long id; private String title; private Integer order; - private LevelType type; + private PhaseType type; // assessment level fields private String assessmentType; @@ -53,11 +53,11 @@ public class GameDefinitionCreateDto { this.order = order; } - public LevelType getType() { + public PhaseType getType() { return type; } - public void setType(LevelType type) { + public void setType(PhaseType type) { this.type = type; } diff --git a/src/main/java/com/example/demo/enums/LevelType.java b/src/main/java/com/example/demo/enums/LevelType.java deleted file mode 100644 index da1504d1a2a5b1a4c4309cec31451a8d96dbdea0..0000000000000000000000000000000000000000 --- a/src/main/java/com/example/demo/enums/LevelType.java +++ /dev/null @@ -1,9 +0,0 @@ -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/PhaseType.java b/src/main/java/com/example/demo/enums/PhaseType.java new file mode 100644 index 0000000000000000000000000000000000000000..a4ae349748f74e28ef1f5366974441c4726469d1 --- /dev/null +++ b/src/main/java/com/example/demo/enums/PhaseType.java @@ -0,0 +1,8 @@ +package com.example.demo.enums; + +public enum PhaseType { + QUESTIONNAIRE, + task, // TODO remove once Task is not a subclass of BaseLevel + INFO, + GAME, +} diff --git a/src/main/java/com/example/demo/mapper/BeanMapper.java b/src/main/java/com/example/demo/mapper/BeanMapper.java index 69a91d52c0e1a7c61cad88d77b557c802fc6b226..79a0550d5520fe91bd8ceec3ec462ee40f2a2e97 100644 --- a/src/main/java/com/example/demo/mapper/BeanMapper.java +++ b/src/main/java/com/example/demo/mapper/BeanMapper.java @@ -59,12 +59,11 @@ public interface BeanMapper { return baseLevelDto; } - @Mapping(target = "levelType", constant = "assessment") AssessmentLevelDto toDto(AssessmentLevel assessmentLevel); AssessmentLevel toEntity(AssessmentLevelDto assessmentLevel); - @Mapping(target = "levelType", constant = "task") + @Mapping(target = "phaseType", constant = "task") TaskDto toDto(Task task); Task toEntity(TaskDto taskDto); @@ -73,7 +72,7 @@ public interface BeanMapper { Task toEntity(TaskUpdateDto taskUpdateDto); - @Mapping(target = "levelType", constant = "info") + @Mapping(target = "phaseType", constant = "INFO") InfoLevelDto toDto(InfoLevel infoLevel); InfoLevel toEntity(InfoLevelDto infoLevel); @@ -86,7 +85,7 @@ public interface BeanMapper { Attachment toEntity(AttachmentDto attachment); - @Mapping(target = "levelType", constant = "phase") + @Mapping(target = "phaseType", constant = "GAME") PhaseLevelDto toDto(PhaseLevel phaseLevel); PhaseLevel toEntity(PhaseLevelDto phaseLevel); @@ -113,16 +112,16 @@ public interface BeanMapper { @Mapping(target = "subLevels", ignore = true) PhaseLevel updatePhaseLevel(@MappingTarget PhaseLevel phaseLevel, GameDefinitionCreateDto gameDefinitionCreateDto); - @Mapping(target = "type", constant = "assessment") +// @Mapping(target = "type", constant = "assessment") GameDefinitionCreateDto toLevelDefinitionDto(AssessmentLevel assessmentLevel); - @Mapping(target = "type", constant = "task") +// @Mapping(target = "type", constant = "task") GameDefinitionCreateDto toLevelDefinitionDto(Task task); - @Mapping(target = "type", constant = "info") +// @Mapping(target = "type", constant = "info") GameDefinitionCreateDto toLevelDefinitionDto(InfoLevel infoLevel); - @Mapping(target = "type", constant = "phase") +// @Mapping(target = "type", constant = "phase") GameDefinitionCreateDto toLevelDefinitionDto(PhaseLevel phaseLevel); DecisionMatrixRow toEntity(DecisionMatrixRowDto decisionMatrixRowDto); diff --git a/src/main/java/com/example/demo/service/LevelOperationsService.java b/src/main/java/com/example/demo/service/LevelOperationsService.java index 77e81f7bfc5fc0edca6c5ef2bb9d1fef79fc0b5e..7837e8d0a6674d8b5328c110a162a859d2566c53 100644 --- a/src/main/java/com/example/demo/service/LevelOperationsService.java +++ b/src/main/java/com/example/demo/service/LevelOperationsService.java @@ -8,6 +8,7 @@ import com.example.demo.domain.QuestionnaireLevel; import com.example.demo.domain.Task; import com.example.demo.domain.InfoLevel; import com.example.demo.dto.BaseLevelDto; +import com.example.demo.dto.PhaseCreateDTO; import com.example.demo.dto.PhaseLevelUpdateDto; import com.example.demo.dto.QuestionChoiceDto; import com.example.demo.dto.QuestionChoiceUpdateDto; @@ -17,7 +18,7 @@ import com.example.demo.dto.QuestionnaireUpdateDto; import com.example.demo.dto.TaskDto; import com.example.demo.dto.TaskUpdateDto; import com.example.demo.dto.InfoLevelUpdateDto; -import com.example.demo.enums.LevelType; +import com.example.demo.enums.PhaseType; import com.example.demo.enums.QuestionType; import com.example.demo.mapper.BeanMapper; import com.example.demo.repository.BaseLevelRepository; @@ -106,26 +107,24 @@ public class LevelOperationsService { questionChoiceService.deleteQuestionChoice(questionChoiceId); } - public BaseLevelDto createLevel(Long trainingDefinitionId, LevelType levelType) { + public BaseLevelDto createLevel(Long trainingDefinitionId, PhaseCreateDTO phaseCreateDTO) { BaseLevelDto baseLevelDto; - if (levelType.equals(LevelType.info)) { + if (PhaseType.INFO.equals(phaseCreateDTO.getPhaseType())) { baseLevelDto = infoLevelService.createDefaultInfoLevel(trainingDefinitionId); - } else if (levelType.equals(LevelType.assessment)) { - baseLevelDto = assessmentLevelService.createDefaultAssessmentLevel(trainingDefinitionId); - } else if (levelType.equals(LevelType.questionnaire)) { + } else if (PhaseType.QUESTIONNAIRE.equals(phaseCreateDTO.getPhaseType())) { baseLevelDto = questionnaireLevelService.createDefaultQuestionnaireLevel(trainingDefinitionId); } else { baseLevelDto = phaseLevelService.createDefaultPhaseLevel(trainingDefinitionId); } - baseLevelDto.setLevelType(levelType); + baseLevelDto.setPhaseType(phaseCreateDTO.getPhaseType()); return baseLevelDto; } public BaseLevelDto createTask(Long phaseId) { TaskDto createdTask = taskService.createDefaultTask(phaseId); - createdTask.setLevelType(LevelType.task); + createdTask.setPhaseType(PhaseType.task); return createdTask; }