From 15036d7e0ff8a3c6401c759baa7ad3c5ce66ef3e Mon Sep 17 00:00:00 2001 From: Mattrixwv Date: Mon, 10 Mar 2025 22:55:26 -0400 Subject: [PATCH] Person page working --- .../controller/GameClassController.java | 9 ++++ .../controller/PersonCharacterController.java | 46 +++++++++++++++++++ .../PersonCharacterRepository.java | 6 +++ .../service/PersonCharacterService.java | 18 ++++++++ 4 files changed, 79 insertions(+) diff --git a/src/main/java/com/mattrixwv/raidbuilder/controller/GameClassController.java b/src/main/java/com/mattrixwv/raidbuilder/controller/GameClassController.java index e9d8d55..bbdf079 100644 --- a/src/main/java/com/mattrixwv/raidbuilder/controller/GameClassController.java +++ b/src/main/java/com/mattrixwv/raidbuilder/controller/GameClassController.java @@ -36,6 +36,15 @@ public class GameClassController{ private final GameClassService gameClassService; + @GetMapping("/{gameClassId}") + @AccountAuthorization(permissions = {AccountPermissionType.ADMIN, AccountPermissionType.USER}) + public GameClass getGameClass(@PathVariable("gameClassId") UUID gameClassId){ + log.info("Getting game class {}", gameClassId); + + + return gameClassService.getById(gameClassId); + } + @GetMapping("/game/{gameId}") @AccountAuthorization(permissions = {AccountPermissionType.ADMIN, AccountPermissionType.USER}) public List getByGameId(@PathVariable("gameId") UUID gameId, @RequestParam("page") int page, @RequestParam("pageSize") int pageSize, @RequestParam(name = "searchTerm", required = false) String searchTerm){ diff --git a/src/main/java/com/mattrixwv/raidbuilder/controller/PersonCharacterController.java b/src/main/java/com/mattrixwv/raidbuilder/controller/PersonCharacterController.java index 3024a35..39b3512 100644 --- a/src/main/java/com/mattrixwv/raidbuilder/controller/PersonCharacterController.java +++ b/src/main/java/com/mattrixwv/raidbuilder/controller/PersonCharacterController.java @@ -11,8 +11,11 @@ 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.RequestParam; import org.springframework.web.bind.annotation.RestController; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.node.ObjectNode; import com.mattrixwv.raidbuilder.annotation.AccountAuthorization; import com.mattrixwv.raidbuilder.annotation.RaidGroupAuthorization; import com.mattrixwv.raidbuilder.entity.PersonCharacter; @@ -29,6 +32,7 @@ import lombok.extern.slf4j.Slf4j; @RequestMapping("/raidGroup/{raidGroupId}/person/{personId}/character") @RequiredArgsConstructor public class PersonCharacterController{ + private final ObjectMapper mapper; private final PersonCharacterService personCharacterService; @@ -42,6 +46,48 @@ public class PersonCharacterController{ return personCharacterService.getByPersonId(personId); } + @GetMapping("/page") + @AccountAuthorization(permissions = {AccountPermissionType.ADMIN, AccountPermissionType.USER}) + @RaidGroupAuthorization(permissions = {RaidGroupPermissionType.ADMIN, RaidGroupPermissionType.LEADER}) + public List getCharactersForPersonPaged(@PathVariable("raidGroupId") UUID raidGroupId, @PathVariable("personId") UUID personId, @RequestParam("page") int page, @RequestParam("pageSize") int pageSize, @RequestParam(name = "searchTerm", required = false) String searchTerm){ + log.info("Getting person characters for person {} with page {} of size {} with search term {}", personId, page, pageSize, searchTerm); + + + List personCharacters; + if(searchTerm == null){ + personCharacters = personCharacterService.getByPersonId(personId, page, pageSize); + } + else{ + personCharacters = personCharacterService.getByPersonId(personId, page, pageSize, searchTerm); + } + + + return personCharacters; + } + + @GetMapping("/count") + @AccountAuthorization(permissions = {AccountPermissionType.ADMIN, AccountPermissionType.USER}) + @RaidGroupAuthorization(permissions = {RaidGroupPermissionType.ADMIN, RaidGroupPermissionType.LEADER}) + public ObjectNode getCharactersCountForPerson(@PathVariable("raidGroupId") UUID raidGroupId, @PathVariable("personId") UUID personId, @RequestParam(name = "searchTerm", required = false) String searchTerm){ + log.info("Getting person characters count for person {} with search term {}", personId, searchTerm); + + + Long count; + if(searchTerm == null){ + count = personCharacterService.getCountByPersonId(personId); + } + else{ + count = personCharacterService.getCountByPersonId(personId, searchTerm); + } + + ObjectNode returnNode = mapper.createObjectNode(); + returnNode.put("status", "success"); + returnNode.put("count", count); + + return returnNode; + } + + @PostMapping @AccountAuthorization(permissions = {AccountPermissionType.ADMIN, AccountPermissionType.USER}) @RaidGroupAuthorization(permissions = {RaidGroupPermissionType.ADMIN, RaidGroupPermissionType.LEADER}) diff --git a/src/main/java/com/mattrixwv/raidbuilder/repository/person_character/PersonCharacterRepository.java b/src/main/java/com/mattrixwv/raidbuilder/repository/person_character/PersonCharacterRepository.java index 2ef519f..91c04e1 100644 --- a/src/main/java/com/mattrixwv/raidbuilder/repository/person_character/PersonCharacterRepository.java +++ b/src/main/java/com/mattrixwv/raidbuilder/repository/person_character/PersonCharacterRepository.java @@ -4,6 +4,7 @@ package com.mattrixwv.raidbuilder.repository.person_character; import java.util.List; import java.util.UUID; +import org.springframework.data.domain.PageRequest; import org.springframework.data.jpa.repository.JpaRepository; import com.mattrixwv.raidbuilder.entity.PersonCharacter; @@ -16,4 +17,9 @@ public interface PersonCharacterRepository extends PersonCharacterCustomReposito public PersonCharacter findByPersonCharacterId(UUID personCharacterId); public List findAllByPersonId(UUID personId); + public List findAllByPersonId(UUID personId, PageRequest pageRequest); + public List findAllByPersonIdAndCharacterNameContainingIgnoreCase(UUID personId, String searchTerm, PageRequest pageRequest); + + public long countByPersonId(UUID personId); + public long countByPersonIdAndCharacterNameContainingIgnoreCase(UUID personId, String searchTerm); } diff --git a/src/main/java/com/mattrixwv/raidbuilder/service/PersonCharacterService.java b/src/main/java/com/mattrixwv/raidbuilder/service/PersonCharacterService.java index f5397f7..cc73be4 100644 --- a/src/main/java/com/mattrixwv/raidbuilder/service/PersonCharacterService.java +++ b/src/main/java/com/mattrixwv/raidbuilder/service/PersonCharacterService.java @@ -4,6 +4,8 @@ package com.mattrixwv.raidbuilder.service; import java.util.List; import java.util.UUID; +import org.springframework.data.domain.PageRequest; +import org.springframework.data.domain.Sort; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -47,4 +49,20 @@ public class PersonCharacterService{ public List getByPersonId(UUID personId){ return personCharacterRepository.findAllByPersonId(personId); } + + public List getByPersonId(UUID personId, int page, int pageSize){ + return personCharacterRepository.findAllByPersonId(personId, PageRequest.of(page, pageSize, Sort.by("characterName").ascending())); + } + + public List getByPersonId(UUID personId, int page, int pageSize, String searchTerm){ + return personCharacterRepository.findAllByPersonIdAndCharacterNameContainingIgnoreCase(personId, searchTerm, PageRequest.of(page, pageSize, Sort.by("characterName").ascending())); + } + + public long getCountByPersonId(UUID personId){ + return personCharacterRepository.countByPersonId(personId); + } + + public long getCountByPersonId(UUID personId, String searchTerm){ + return personCharacterRepository.countByPersonIdAndCharacterNameContainingIgnoreCase(personId, searchTerm); + } }