diff --git a/src/main/java/com/example/demo/controller/InfoLevelController.java b/src/main/java/com/example/demo/controller/InfoLevelController.java new file mode 100644 index 0000000000000000000000000000000000000000..00a87d03b101c73d8b3303a803ac2c6826e594c5 --- /dev/null +++ b/src/main/java/com/example/demo/controller/InfoLevelController.java @@ -0,0 +1,85 @@ +package com.example.demo.controller; + +import com.example.demo.dto.InfoLevelCreateDto; +import com.example.demo.dto.InfoLevelDto; +import com.example.demo.dto.InfoLevelUpdateDto; +import com.example.demo.service.InfoLevelService; +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 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; +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 java.util.List; + +@RestController +@RequestMapping("/info-level") +@CrossOrigin(origins = "*", allowCredentials = "true", allowedHeaders = "*", + methods = {RequestMethod.GET, RequestMethod.POST, RequestMethod.DELETE, RequestMethod.PUT}) +@Api(value = "/info-level", tags = {"Info Level"}) +public class InfoLevelController { + + private final InfoLevelService infoLevelService; + + @Autowired + public InfoLevelController(InfoLevelService infoLevelService) { + this.infoLevelService = infoLevelService; + } + + @PostMapping(produces = MediaType.APPLICATION_JSON_VALUE) + @ApiOperation(value = "Create a new info level") + @ApiResponses(value = {@ApiResponse(code = 200, message = "New info level created"), + @ApiResponse(code = 500, message = "Unexpected application error")}) + public InfoLevelDto createInfoLevel(@ApiParam(value = "Game level", required = true) @RequestBody(required = true) + InfoLevelCreateDto infoLevelCreateDto) { + return infoLevelService.createInfoLevel(infoLevelCreateDto); + } + + @GetMapping(produces = MediaType.APPLICATION_JSON_VALUE) + @ApiOperation(value = "Return info levels") + @ApiResponses(value = {@ApiResponse(code = 200, message = "Return info levels"), + @ApiResponse(code = 500, message = "Unexpected application error")}) + public List<InfoLevelDto> findInfoLevels() { + return infoLevelService.findAllInfoLevels(); + } + + @PutMapping(value = "/{id}", produces = MediaType.APPLICATION_JSON_VALUE) + @ApiOperation(value = "Get info level detail") + @ApiResponses(value = {@ApiResponse(code = 200, message = "Game level detail"), + @ApiResponse(code = 500, message = "Unexpected application error")}) + public InfoLevelDto getInfoLevel( + @ApiParam(value = "Game Level ID", required = true) @PathVariable("id") final Long id) { + return infoLevelService.getInfoLevel(id); + } + + @PutMapping(value = "/{id}", produces = MediaType.APPLICATION_JSON_VALUE) + @ApiOperation(value = "Update info level") + @ApiResponses(value = {@ApiResponse(code = 200, message = "Updated info level"), + @ApiResponse(code = 500, message = "Unexpected application error")}) + public InfoLevelDto updateInfoLevel( + @ApiParam(value = "Game Level ID", required = true) @PathVariable("id") final Long id, + @ApiParam(value = "Update data", required = true) @RequestBody(required = true) + InfoLevelUpdateDto infoLevelUpdateDto) { + return infoLevelService.updateInfoLevel(id, infoLevelUpdateDto); + } + + @DeleteMapping(value = "/{id}", produces = MediaType.APPLICATION_JSON_VALUE) + @ApiOperation(value = "Remove info level") + @ApiResponses(value = {@ApiResponse(code = 200, message = "Game level removed"), + @ApiResponse(code = 500, message = "Unexpected application error")}) + public void removeInfoLevel(@ApiParam(value = "Game Level ID", required = true) @PathVariable("id") final Long id) { + infoLevelService.removeInfoLevel(id); + } +} diff --git a/src/main/java/com/example/demo/dto/InfoLevelCreateDto.java b/src/main/java/com/example/demo/dto/InfoLevelCreateDto.java new file mode 100644 index 0000000000000000000000000000000000000000..4899d35389c44fe31dc856085bdbcf9888790928 --- /dev/null +++ b/src/main/java/com/example/demo/dto/InfoLevelCreateDto.java @@ -0,0 +1,9 @@ +package com.example.demo.dto; + +public class InfoLevelCreateDto extends InfoLevelUpdateDto { + + @Override + public String toString() { + return "InfoLevelCreateDto{} " + super.toString(); + } +} diff --git a/src/main/java/com/example/demo/dto/InfoLevelDto.java b/src/main/java/com/example/demo/dto/InfoLevelDto.java index c6b259e8021acfadb2a2ace4c1a29e187f31b7c8..a09fba3d4d99aa61f9e0bcd98ff1a1a54afd59b5 100644 --- a/src/main/java/com/example/demo/dto/InfoLevelDto.java +++ b/src/main/java/com/example/demo/dto/InfoLevelDto.java @@ -2,11 +2,10 @@ package com.example.demo.dto; import java.io.Serializable; -public class InfoLevelDto extends BaseLevelDto implements Serializable { +public class InfoLevelDto extends InfoLevelUpdateDto implements Serializable { private Long id; - private String content; public Long getId() { return id; @@ -16,19 +15,10 @@ public class InfoLevelDto extends BaseLevelDto implements Serializable { this.id = id; } - public String getContent() { - return content; - } - - public void setContent(String content) { - this.content = content; - } - @Override public String toString() { return "InfoLevelDto{" + "id=" + id + - ", content='" + content + '\'' + "} " + super.toString(); } } diff --git a/src/main/java/com/example/demo/dto/InfoLevelUpdateDto.java b/src/main/java/com/example/demo/dto/InfoLevelUpdateDto.java new file mode 100644 index 0000000000000000000000000000000000000000..f61903bcca0061ad10d3c089184fb408fb1062ad --- /dev/null +++ b/src/main/java/com/example/demo/dto/InfoLevelUpdateDto.java @@ -0,0 +1,19 @@ +package com.example.demo.dto; + +public class InfoLevelUpdateDto extends BaseLevelDto { + + private String content; + + public String getContent() { + return content; + } + + public void setContent(String content) { + this.content = content; + } + + @Override + public String toString() { + return "InfoLevelUpdateDto{" + "content='" + content + '\'' + '}'; + } +} diff --git a/src/main/java/com/example/demo/mapper/BeanMapper.java b/src/main/java/com/example/demo/mapper/BeanMapper.java index 293da7e18f2a44288d9611676758142d1f0e6196..522a136d8ce8b4e868b71a6f5b95f0ac27f54730 100644 --- a/src/main/java/com/example/demo/mapper/BeanMapper.java +++ b/src/main/java/com/example/demo/mapper/BeanMapper.java @@ -11,7 +11,9 @@ import com.example.demo.dto.GameLevelCreateDto; import com.example.demo.dto.GameLevelDto; import com.example.demo.dto.GameLevelUpdateDto; 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 org.mapstruct.Mapper; import org.mapstruct.factory.Mappers; @@ -37,6 +39,10 @@ public interface BeanMapper { InfoLevel toEntity(InfoLevelDto infoLevel); + InfoLevel toEntity(InfoLevelCreateDto gameLevel); + + InfoLevel toEntity(InfoLevelUpdateDto gameLevel); + HintDto toDto(Hint hint); Hint toEntity(HintDto hint); diff --git a/src/main/java/com/example/demo/repository/InfoLevelRepository.java b/src/main/java/com/example/demo/repository/InfoLevelRepository.java new file mode 100644 index 0000000000000000000000000000000000000000..e925a2b3cfe1c7f4be0ce8fa621d58600e3afcf6 --- /dev/null +++ b/src/main/java/com/example/demo/repository/InfoLevelRepository.java @@ -0,0 +1,7 @@ +package com.example.demo.repository; + +import com.example.demo.domain.InfoLevel; +import org.springframework.data.neo4j.repository.Neo4jRepository; + +public interface InfoLevelRepository extends Neo4jRepository<InfoLevel, Long> { +} diff --git a/src/main/java/com/example/demo/service/InfoLevelService.java b/src/main/java/com/example/demo/service/InfoLevelService.java new file mode 100644 index 0000000000000000000000000000000000000000..089dc4492b465104bf9db4020834c54ad58fb14e --- /dev/null +++ b/src/main/java/com/example/demo/service/InfoLevelService.java @@ -0,0 +1,84 @@ +package com.example.demo.service; + +import com.example.demo.domain.InfoLevel; +import com.example.demo.dto.InfoLevelCreateDto; +import com.example.demo.dto.InfoLevelDto; +import com.example.demo.dto.InfoLevelUpdateDto; +import com.example.demo.mapper.BeanMapper; +import com.example.demo.repository.InfoLevelRepository; +import org.apache.commons.collections4.IterableUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.List; +import java.util.Optional; + +@Service +public class InfoLevelService { + + private static final Logger LOG = LoggerFactory.getLogger(InfoLevelService.class); + + private final InfoLevelRepository infoLevelRepository; + + @Autowired + public InfoLevelService(InfoLevelRepository infoLevelRepository) { + this.infoLevelRepository = infoLevelRepository; + } + + public InfoLevelDto createInfoLevel(InfoLevelCreateDto infoLevelCreateDto) { + InfoLevel infoLevel = BeanMapper.INSTANCE.toEntity(infoLevelCreateDto); + + InfoLevel persistedEntity = infoLevelRepository.save(infoLevel); + + return BeanMapper.INSTANCE.toDto(persistedEntity); + } + + public List<InfoLevelDto> findAllInfoLevels() { + + Iterable<InfoLevel> allInfoLevels = infoLevelRepository.findAll(); + + List<InfoLevelDto> result = new ArrayList<>(); + + if (!IterableUtils.isEmpty(allInfoLevels)) { + for (InfoLevel infoLevel : allInfoLevels) { + result.add(BeanMapper.INSTANCE.toDto(infoLevel)); + } + } + + return result; + } + + public InfoLevelDto getInfoLevel(Long id) { + Optional<InfoLevel> infoLevel = infoLevelRepository.findById(id); + + if (infoLevel.isEmpty()) { + LOG.error("No info level found with ID {}.", id); + return new InfoLevelDto(); + } + + return BeanMapper.INSTANCE.toDto(infoLevel.get()); + } + + public InfoLevelDto updateInfoLevel(Long id, InfoLevelUpdateDto infoLevelUpdateDto) { + Optional<InfoLevel> persistedInfoLevel = infoLevelRepository.findById(id); + + if (persistedInfoLevel.isEmpty()) { + LOG.error("No info level found with ID {}.", id); + return new InfoLevelDto(); + } + + InfoLevel infoLevel = BeanMapper.INSTANCE.toEntity(infoLevelUpdateDto); + infoLevel.setId(persistedInfoLevel.get().getId()); + + InfoLevel savedEntity = infoLevelRepository.save(infoLevel); + + return BeanMapper.INSTANCE.toDto(savedEntity); + } + + public void removeInfoLevel(Long id) { + infoLevelRepository.deleteById(id); + } +}