From 09f4b484ca231f5a5f581dbf0567b39f0343d845 Mon Sep 17 00:00:00 2001 From: Akito123321 Date: Sat, 15 Jun 2024 19:53:26 +0200 Subject: [PATCH] added maps and profiles post/delete/put endpoints --- .../db/repositories/MapRepository.java | 9 + .../db/repositories/ProfileRepository.java | 9 + .../rest/controller/GroupRestAPI.java | 175 ++++++++++++++++-- .../rest/controller/ProfileRequest.java | 8 + .../valoStrats/rest/requests/MapRequest.java | 8 + .../valoStrats/rest/services/MapService.java | 27 +++ .../rest/services/ProfileService.java | 27 +++ .../akito123321/valoStrats/schemas/Group.java | 8 + 8 files changed, 260 insertions(+), 11 deletions(-) create mode 100644 src/main/java/me/akito123321/valoStrats/db/repositories/MapRepository.java create mode 100644 src/main/java/me/akito123321/valoStrats/db/repositories/ProfileRepository.java create mode 100644 src/main/java/me/akito123321/valoStrats/rest/controller/ProfileRequest.java create mode 100644 src/main/java/me/akito123321/valoStrats/rest/requests/MapRequest.java create mode 100644 src/main/java/me/akito123321/valoStrats/rest/services/MapService.java create mode 100644 src/main/java/me/akito123321/valoStrats/rest/services/ProfileService.java diff --git a/src/main/java/me/akito123321/valoStrats/db/repositories/MapRepository.java b/src/main/java/me/akito123321/valoStrats/db/repositories/MapRepository.java new file mode 100644 index 0000000..110fa84 --- /dev/null +++ b/src/main/java/me/akito123321/valoStrats/db/repositories/MapRepository.java @@ -0,0 +1,9 @@ +package me.akito123321.valoStrats.db.repositories; + +import org.springframework.data.jpa.repository.JpaRepository; + +import me.akito123321.valoStrats.schemas.Map; + +public interface MapRepository extends JpaRepository{ + +} diff --git a/src/main/java/me/akito123321/valoStrats/db/repositories/ProfileRepository.java b/src/main/java/me/akito123321/valoStrats/db/repositories/ProfileRepository.java new file mode 100644 index 0000000..da948c9 --- /dev/null +++ b/src/main/java/me/akito123321/valoStrats/db/repositories/ProfileRepository.java @@ -0,0 +1,9 @@ +package me.akito123321.valoStrats.db.repositories; + +import org.springframework.data.jpa.repository.JpaRepository; + +import me.akito123321.valoStrats.schemas.Profile; + +public interface ProfileRepository extends JpaRepository{ + +} diff --git a/src/main/java/me/akito123321/valoStrats/rest/controller/GroupRestAPI.java b/src/main/java/me/akito123321/valoStrats/rest/controller/GroupRestAPI.java index 1e9c1d8..d8fc34a 100644 --- a/src/main/java/me/akito123321/valoStrats/rest/controller/GroupRestAPI.java +++ b/src/main/java/me/akito123321/valoStrats/rest/controller/GroupRestAPI.java @@ -17,13 +17,18 @@ import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import me.akito123321.valoStrats.rest.requests.GroupRequest; +import me.akito123321.valoStrats.rest.requests.MapRequest; import me.akito123321.valoStrats.rest.requests.StratRequest; import me.akito123321.valoStrats.rest.requests.StratStateRequest; import me.akito123321.valoStrats.rest.services.GroupService; +import me.akito123321.valoStrats.rest.services.MapService; +import me.akito123321.valoStrats.rest.services.ProfileService; import me.akito123321.valoStrats.rest.services.StratService; import me.akito123321.valoStrats.rest.services.StratStateService; import me.akito123321.valoStrats.rest.util.JDBCUserDetailsService; import me.akito123321.valoStrats.schemas.Group; +import me.akito123321.valoStrats.schemas.Map; +import me.akito123321.valoStrats.schemas.Profile; import me.akito123321.valoStrats.schemas.Strat; import me.akito123321.valoStrats.schemas.StratState; import me.akito123321.valoStrats.schemas.StratsUser; @@ -32,6 +37,12 @@ import me.akito123321.valoStrats.schemas.StratsUser; @RequestMapping("/api/group") public class GroupRestAPI { + @Autowired + private ProfileService profileService; + + @Autowired + private MapService mapService; + @Autowired private StratStateService stratStateService; @@ -183,16 +194,15 @@ public class GroupRestAPI { StratsUser user = getUser(); Group group = groupService.getGroupById(id); - if (group == null) { + Strat strat = stratService.getStratById(stratId); + if (group == null | strat == null) { return ResponseEntity.notFound().build(); } if (!group.getMembers().contains(user)) { return ResponseEntity.status(HttpStatus.FORBIDDEN).build(); } - - Strat strat = stratService.getStratById(stratId); - if (strat == null) { - return ResponseEntity.notFound().build(); + if (!group.getStrats().contains(strat)) { + return ResponseEntity.badRequest().build(); } stratService.removeStrat(strat); @@ -209,17 +219,14 @@ public class GroupRestAPI { StratsUser user = getUser(); Group group = groupService.getGroupById(id); - if (group == null) { + Strat strat = stratService.getStratById(stratId); + if (group == null | strat == null) { return ResponseEntity.notFound().build(); } if (!group.getMembers().contains(user)) { return ResponseEntity.status(HttpStatus.FORBIDDEN).build(); } - - Strat strat = stratService.getStratById(stratId); - if (strat == null){ - return ResponseEntity.notFound().build(); - }if (!group.getStrats().contains(strat)) { + if (!group.getStrats().contains(strat)) { return ResponseEntity.badRequest().build(); } @@ -241,6 +248,152 @@ public class GroupRestAPI { return ResponseEntity.ok(group); } + @PostMapping("/{id}/map") + public ResponseEntity addMap(@PathVariable String id, @RequestBody MapRequest mapRequest) { + StratsUser user = getUser(); + + Group group = groupService.getGroupById(id); + if (group == null) { + return ResponseEntity.notFound().build(); + } + if (!group.getMembers().contains(user)) { + return ResponseEntity.status(HttpStatus.FORBIDDEN).build(); + } + + Map map = new Map(mapRequest.name(), mapRequest.image()); + + mapService.saveMap(map); + + group.getMaps().add(map); + + groupService.saveGroup(group); + + return ResponseEntity.ok(group); + } + + @DeleteMapping("/{id}/map/{mapId}") + public ResponseEntity removeMap(@PathVariable String id, @PathVariable String mapId) { + StratsUser user = getUser(); + + Group group = groupService.getGroupById(id); + Map map = mapService.getMapById(mapId); + if (group == null | map == null) { + return ResponseEntity.notFound().build(); + } + if (!group.getMembers().contains(user)) { + return ResponseEntity.status(HttpStatus.FORBIDDEN).build(); + } + if (!group.getMaps().contains(map)) { + return ResponseEntity.badRequest().build(); + } + + mapService.removeMap(map); + + group.getMaps().remove(map); + + groupService.saveGroup(group); + + return ResponseEntity.ok(group); + } + + @PutMapping("/{id}/map/{mapId}") + public ResponseEntity editMap(@PathVariable String id, @PathVariable String mapId, @RequestBody MapRequest newMap) { + StratsUser user = getUser(); + + Group group = groupService.getGroupById(id); + Map map = mapService.getMapById(mapId); + if (group == null | map == null) { + return ResponseEntity.notFound().build(); + } + if (!group.getMembers().contains(user)) { + return ResponseEntity.status(HttpStatus.FORBIDDEN).build(); + } + if (!group.getMaps().contains(map)) { + return ResponseEntity.badRequest().build(); + } + + map.setName(newMap.name()); + map.setImage(newMap.image()); + + mapService.saveMap(map); + groupService.saveGroup(group); + + return ResponseEntity.ok(group); + } + + @PostMapping("/{id}/profile") + public ResponseEntity addProfile(@PathVariable String id, @RequestBody ProfileRequest profileRequest) { + StratsUser user = getUser(); + + Group group = groupService.getGroupById(id); + if (group == null) { + return ResponseEntity.notFound().build(); + } + if (!group.getMembers().contains(user)) { + return ResponseEntity.status(HttpStatus.FORBIDDEN).build(); + } + + Profile profile = new Profile(profileRequest.name(), profileRequest.image()); + + profileService.saveProfile(profile); + + group.getProfiles().add(profile); + + groupService.saveGroup(group); + + return ResponseEntity.ok(group); + } + + @DeleteMapping("/{id}/profile/{profileId}") + public ResponseEntity removeProfile(@PathVariable String id, @PathVariable String profileId) { + StratsUser user = getUser(); + + Group group = groupService.getGroupById(id); + Profile profile = profileService.getProfileById(profileId); + if (group == null | profile == null) { + return ResponseEntity.notFound().build(); + } + if (!group.getMembers().contains(user)) { + return ResponseEntity.status(HttpStatus.FORBIDDEN).build(); + } + if (!group.getProfiles().contains(profile)) { + return ResponseEntity.badRequest().build(); + } + + profileService.removeProfile(profile); + + group.getProfiles().remove(profile); + + groupService.saveGroup(group); + + return ResponseEntity.ok(group); + } + + @PutMapping("/{id}/profile/{profileId}") + public ResponseEntity editProfile(@PathVariable String id, @PathVariable String profileId, @RequestBody MapRequest newMap) { + StratsUser user = getUser(); + + Group group = groupService.getGroupById(id); + Profile profile = profileService.getProfileById(profileId); + if (group == null | profile == null) { + return ResponseEntity.notFound().build(); + } + if (!group.getMembers().contains(user)) { + return ResponseEntity.status(HttpStatus.FORBIDDEN).build(); + } + if (!group.getProfiles().contains(profile)) { + return ResponseEntity.badRequest().build(); + } + + profile.setName(newMap.name()); + profile.setImage(newMap.image()); + + profileService.saveProfile(profile); + groupService.saveGroup(group); + + return ResponseEntity.ok(group); + } + @PostMapping("/{id}/strat/{stratId}/strat-state") public ResponseEntity addStratState(@PathVariable String id, @PathVariable String stratId , @RequestBody StratStateRequest stratStateRequest) { StratsUser user = getUser(); diff --git a/src/main/java/me/akito123321/valoStrats/rest/controller/ProfileRequest.java b/src/main/java/me/akito123321/valoStrats/rest/controller/ProfileRequest.java new file mode 100644 index 0000000..5a4f557 --- /dev/null +++ b/src/main/java/me/akito123321/valoStrats/rest/controller/ProfileRequest.java @@ -0,0 +1,8 @@ +package me.akito123321.valoStrats.rest.controller; + +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.Size; + +public record ProfileRequest( + @Size(max = 50, message = "{name longer than 50 chars}") @NotBlank String name, + byte[] image) {} diff --git a/src/main/java/me/akito123321/valoStrats/rest/requests/MapRequest.java b/src/main/java/me/akito123321/valoStrats/rest/requests/MapRequest.java new file mode 100644 index 0000000..911fa9e --- /dev/null +++ b/src/main/java/me/akito123321/valoStrats/rest/requests/MapRequest.java @@ -0,0 +1,8 @@ +package me.akito123321.valoStrats.rest.requests; + +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.Size; + +public record MapRequest( + @Size(max = 50, message = "{name longer than 50 chars}") @NotBlank String name, + byte[] image) {} diff --git a/src/main/java/me/akito123321/valoStrats/rest/services/MapService.java b/src/main/java/me/akito123321/valoStrats/rest/services/MapService.java new file mode 100644 index 0000000..f733d39 --- /dev/null +++ b/src/main/java/me/akito123321/valoStrats/rest/services/MapService.java @@ -0,0 +1,27 @@ +package me.akito123321.valoStrats.rest.services; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import me.akito123321.valoStrats.db.repositories.MapRepository; +import me.akito123321.valoStrats.schemas.Map; + +@Service +public class MapService { + + @Autowired + private MapRepository mapRepository; + + public Map getMapById(String id) { + return mapRepository.findById(id).orElse(null); + } + + public void saveMap(Map map) { + mapRepository.save(map); + } + + public void removeMap(Map map) { + mapRepository.delete(map); + } + +} diff --git a/src/main/java/me/akito123321/valoStrats/rest/services/ProfileService.java b/src/main/java/me/akito123321/valoStrats/rest/services/ProfileService.java new file mode 100644 index 0000000..ff08e54 --- /dev/null +++ b/src/main/java/me/akito123321/valoStrats/rest/services/ProfileService.java @@ -0,0 +1,27 @@ +package me.akito123321.valoStrats.rest.services; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import me.akito123321.valoStrats.db.repositories.ProfileRepository; +import me.akito123321.valoStrats.schemas.Profile; + +@Service +public class ProfileService { + + @Autowired + private ProfileRepository profileRepository; + + public Profile getProfileById(String id) { + return profileRepository.findById(id).orElse(null); + } + + public void saveProfile(Profile profile) { + profileRepository.save(profile); + } + + public void removeProfile(Profile profile) { + profileRepository.delete(profile); + } + +} diff --git a/src/main/java/me/akito123321/valoStrats/schemas/Group.java b/src/main/java/me/akito123321/valoStrats/schemas/Group.java index 8af92d1..6d48c08 100644 --- a/src/main/java/me/akito123321/valoStrats/schemas/Group.java +++ b/src/main/java/me/akito123321/valoStrats/schemas/Group.java @@ -77,4 +77,12 @@ public class Group { return stratTypes; } + public List getMaps() { + return maps; + } + + public List getProfiles() { + return profiles; + } + }