diff --git a/src/main/java/com/example/demo/controller/GameDefinitionController.java b/src/main/java/com/example/demo/controller/GameDefinitionController.java index 7b27160b9218bc46578170dd684a2cb9f4183ba4..18b333e2a4e4525a68a970f6ca105a1802179e39 100644 --- a/src/main/java/com/example/demo/controller/GameDefinitionController.java +++ b/src/main/java/com/example/demo/controller/GameDefinitionController.java @@ -18,6 +18,8 @@ import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RestController; +import java.util.List; + @RestController @RequestMapping("/game-definition") @CrossOrigin(origins = "*", allowCredentials = "true", allowedHeaders = "*", @@ -39,7 +41,7 @@ public class GameDefinitionController { @ApiResponses(value = {@ApiResponse(code = 200, message = "New game definition created"), @ApiResponse(code = 500, message = "Unexpected application error")}) public GameDefinitionCreateDto createGameLevel(@ApiParam(value = "Game definition", required = true) @RequestBody(required = true) - GameDefinitionCreateDto gameLevelCreateDto) { - return gameDefinitionService.createGameDefinition(gameLevelCreateDto); + List<GameDefinitionCreateDto> gameDefinition) { + return gameDefinitionService.createGameDefinition(gameDefinition); } } diff --git a/src/main/java/com/example/demo/domain/UnityLevel.java b/src/main/java/com/example/demo/domain/UnityLevel.java index 3b145a3844a9b997e43c1c44b39cbb940aa1a43b..fe50f737a8a623c80bc16f3e81f72d3b884d3711 100644 --- a/src/main/java/com/example/demo/domain/UnityLevel.java +++ b/src/main/java/com/example/demo/domain/UnityLevel.java @@ -3,20 +3,22 @@ package com.example.demo.domain; import javax.persistence.CascadeType; import javax.persistence.Entity; import javax.persistence.FetchType; -import javax.persistence.GeneratedValue; -import javax.persistence.Id; import javax.persistence.OneToMany; import javax.persistence.OrderBy; import java.util.List; @Entity -public class UnityLevel { - - @Id - @GeneratedValue - private Long id; +public class UnityLevel extends BaseLevel { @OrderBy @OneToMany(mappedBy = "unityLevel", cascade = CascadeType.ALL, orphanRemoval = true, fetch = FetchType.LAZY) private List<BaseLevel> subLevels; + + public List<BaseLevel> getSubLevels() { + return subLevels; + } + + public void setSubLevels(List<BaseLevel> subLevels) { + this.subLevels = subLevels; + } } diff --git a/src/main/java/com/example/demo/dto/UnityLevelDto.java b/src/main/java/com/example/demo/dto/UnityLevelDto.java new file mode 100644 index 0000000000000000000000000000000000000000..be0ac4affb6fc1d9e74835ecaf6abba7c6a28d01 --- /dev/null +++ b/src/main/java/com/example/demo/dto/UnityLevelDto.java @@ -0,0 +1,17 @@ +package com.example.demo.dto; + +import java.util.List; + +public class UnityLevelDto extends BaseLevelDto { + + // TODO any class extending BaseLevel could be used here - this piece of art is here in order to make mapstruct happy + private List<GameLevelDto> subLevels; + + public List<GameLevelDto> getSubLevels() { + return subLevels; + } + + public void setSubLevels(List<GameLevelDto> subLevels) { + this.subLevels = subLevels; + } +} 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 60ead66063b2b48054f81bc03a430810ac4cafd2..c19d1608415ba0e33d96d947615fddc938f7d334 100644 --- a/src/main/java/com/example/demo/dto/input/GameDefinitionCreateDto.java +++ b/src/main/java/com/example/demo/dto/input/GameDefinitionCreateDto.java @@ -1,14 +1,51 @@ package com.example.demo.dto.input; -import lombok.Data; - import java.util.List; -@Data public class GameDefinitionCreateDto { private Long id; private String title; private Integer order; private LevelType type; private List<? extends GameDefinitionCreateDto> subLevels; + + 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 LevelType getType() { + return type; + } + + public void setType(LevelType type) { + this.type = type; + } + + public List<? extends GameDefinitionCreateDto> getSubLevels() { + return subLevels; + } + + public void setSubLevels(List<? extends GameDefinitionCreateDto> subLevels) { + this.subLevels = subLevels; + } } diff --git a/src/main/java/com/example/demo/dto/input/LevelType.java b/src/main/java/com/example/demo/dto/input/LevelType.java index 9b0c5cd37d5fc1527367e55a11f7c85a8d027bd0..14855c59109b17b2a1e87cc90fb0226380de9ee7 100644 --- a/src/main/java/com/example/demo/dto/input/LevelType.java +++ b/src/main/java/com/example/demo/dto/input/LevelType.java @@ -1,8 +1,8 @@ package com.example.demo.dto.input; public enum LevelType { - ASSESSMENT, - GAME, - INFO, - UNITY + assessment, + game, + info, + unity } diff --git a/src/main/java/com/example/demo/mapper/BeanMapper.java b/src/main/java/com/example/demo/mapper/BeanMapper.java index 522a136d8ce8b4e868b71a6f5b95f0ac27f54730..3707c0d02ff2030bcc9a05bb87cc809a73777226 100644 --- a/src/main/java/com/example/demo/mapper/BeanMapper.java +++ b/src/main/java/com/example/demo/mapper/BeanMapper.java @@ -5,6 +5,7 @@ import com.example.demo.domain.Attachment; import com.example.demo.domain.GameLevel; import com.example.demo.domain.Hint; import com.example.demo.domain.InfoLevel; +import com.example.demo.domain.UnityLevel; import com.example.demo.dto.AssessmentLevelDto; import com.example.demo.dto.AttachmentDto; import com.example.demo.dto.GameLevelCreateDto; @@ -14,6 +15,7 @@ import com.example.demo.dto.HintDto; import com.example.demo.dto.InfoLevelCreateDto; import com.example.demo.dto.InfoLevelDto; import com.example.demo.dto.InfoLevelUpdateDto; +import com.example.demo.dto.UnityLevelDto; import org.mapstruct.Mapper; import org.mapstruct.factory.Mappers; @@ -50,4 +52,8 @@ public interface BeanMapper { AttachmentDto toDto(Attachment hint); Attachment toEntity(AttachmentDto hint); + + UnityLevelDto toDto(UnityLevel unityLevel); + + UnityLevel toEntity(UnityLevelDto unityLevel); } diff --git a/src/main/java/com/example/demo/repository/UnityLevelRepository.java b/src/main/java/com/example/demo/repository/UnityLevelRepository.java new file mode 100644 index 0000000000000000000000000000000000000000..0843c7cd4649492c91ac9bde77d74cb17ed6b9f1 --- /dev/null +++ b/src/main/java/com/example/demo/repository/UnityLevelRepository.java @@ -0,0 +1,7 @@ +package com.example.demo.repository; + +import com.example.demo.domain.UnityLevel; +import org.springframework.data.jpa.repository.JpaRepository; + +public interface UnityLevelRepository extends JpaRepository<UnityLevel, Long> { +} diff --git a/src/main/java/com/example/demo/service/GameDefinitionService.java b/src/main/java/com/example/demo/service/GameDefinitionService.java index 3e343398e482dc3d00dc4bc2db64dadcb714c8e5..5dc2624f6f55410c81d9631ef5f08274dbc971c8 100644 --- a/src/main/java/com/example/demo/service/GameDefinitionService.java +++ b/src/main/java/com/example/demo/service/GameDefinitionService.java @@ -1,13 +1,65 @@ package com.example.demo.service; +import com.example.demo.domain.AssessmentLevel; +import com.example.demo.domain.BaseLevel; +import com.example.demo.domain.GameLevel; +import com.example.demo.domain.UnityLevel; import com.example.demo.dto.input.GameDefinitionCreateDto; +import com.example.demo.dto.input.LevelType; +import com.example.demo.repository.AssessmentLevelRepository; +import com.example.demo.repository.GameLevelRepository; +import com.example.demo.repository.UnityLevelRepository; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import java.util.ArrayList; +import java.util.List; + @Service public class GameDefinitionService { - public GameDefinitionCreateDto createGameDefinition(GameDefinitionCreateDto gameDefinitionCreateDto) { + @Autowired + private AssessmentLevelRepository assessmentLevelRepository; + + @Autowired + private UnityLevelRepository unityLevelRepository; + + @Autowired + private GameLevelRepository gameLevelRepository; + + public GameDefinitionCreateDto createGameDefinition(List<GameDefinitionCreateDto> gameDefinition) { + + for (GameDefinitionCreateDto gameDefinitionCreateDto : gameDefinition) { + if (gameDefinitionCreateDto.getType() == LevelType.assessment) { + AssessmentLevel assessmentLevel = new AssessmentLevel(); + assessmentLevel.setTitle(gameDefinitionCreateDto.getTitle()); + assessmentLevel.setOrderInTrainingDefinition(gameDefinitionCreateDto.getOrder()); + + assessmentLevelRepository.save(assessmentLevel); + } else if (gameDefinitionCreateDto.getType() == LevelType.unity) { + UnityLevel unityLevel = new UnityLevel(); + unityLevel.setTitle(gameDefinitionCreateDto.getTitle()); + unityLevel.setOrderInTrainingDefinition(gameDefinitionCreateDto.getOrder()); + + unityLevelRepository.save(unityLevel); + + + List<BaseLevel> subLevels = new ArrayList<>(); + for (GameDefinitionCreateDto subLevel : gameDefinitionCreateDto.getSubLevels()) { + if (subLevel.getType() == LevelType.game) { + GameLevel gameLevel = new GameLevel(); + gameLevel.setTitle(subLevel.getTitle()); + gameLevel.setOrderInTrainingDefinition(subLevel.getOrder()); + gameLevel.setUnityLevel(unityLevel); + subLevels.add(gameLevel); + gameLevelRepository.save(gameLevel); + } + } + unityLevel.setSubLevels(subLevels); + unityLevelRepository.save(unityLevel); + } + } return null; } diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index 5e482e30f530847a5a70400fc2064b5c4c74333a..e3165b96bf6e632766ef3c46d69a0a5cc16f1b79 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -3,3 +3,6 @@ #spring.datasource.username=sa #spring.datasource.password=password #spring.jpa.database-platform=org.hibernate.dialect.H2Dialect + +spring.h2.console.enabled=true +spring.h2.console.path=/h2-console