Class Groups tab working

This commit is contained in:
2025-03-08 18:45:51 -05:00
parent 868daeb517
commit 01c27d0c5a
18 changed files with 466 additions and 6 deletions

View File

@@ -0,0 +1,159 @@
package com.mattrixwv.raidbuilder.controller;
import java.util.ArrayList;
import java.util.List;
import java.util.UUID;
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.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import com.fasterxml.jackson.core.JsonProcessingException;
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.ClassGroup;
import com.mattrixwv.raidbuilder.entity.ClassGroupGameClassXref;
import com.mattrixwv.raidbuilder.service.ClassGroupService;
import com.mattrixwv.raidbuilder.util.DatabaseTypeUtil.AccountPermissionType;
import com.mattrixwv.raidbuilder.util.DatabaseTypeUtil.RaidGroupPermissionType;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
@Slf4j
@RestController
@RequestMapping("/raidGroup/{raidGroupId}/classGroup")
@RequiredArgsConstructor
public class ClassGroupController{
private final ObjectMapper mapper = new ObjectMapper();
private final ClassGroupService classGroupService;
@GetMapping
@AccountAuthorization(permissions = {AccountPermissionType.ADMIN, AccountPermissionType.USER})
@RaidGroupAuthorization(permissions = {RaidGroupPermissionType.ADMIN, RaidGroupPermissionType.LEADER, RaidGroupPermissionType.RAIDER})
public List<ClassGroup> getClassGroupByRaidGroupId(@PathVariable("raidGroupId") UUID raidGroupId, @RequestParam("page") int page, @RequestParam("pageSize") int pageSize, @RequestParam(name = "searchTerm", required = false) String searchTerm){
log.info("Getting class groups for raid group {} page {} of size {} with search {}", raidGroupId, page, pageSize, searchTerm);
List<ClassGroup> classGroups;
if(searchTerm == null){
classGroups = classGroupService.getClassGroupsByRaidGroupId(raidGroupId, page, pageSize);
}
else{
classGroups = classGroupService.getClassGroupsByRaidGroupIdAndSearchTerm(raidGroupId, page, pageSize, searchTerm);
}
return classGroups;
}
@GetMapping("/count")
@AccountAuthorization(permissions = {AccountPermissionType.ADMIN, AccountPermissionType.USER})
@RaidGroupAuthorization(permissions = {RaidGroupPermissionType.ADMIN, RaidGroupPermissionType.LEADER, RaidGroupPermissionType.RAIDER})
public ObjectNode getClassGroupCountByRaidGroupId(@PathVariable("raidGroupId") UUID raidGroupId, @RequestParam(name = "searchTerm", required = false) String searchTerm){
log.info("Getting class group count for raid group {} with search {}", raidGroupId, searchTerm);
Long count;
if(searchTerm == null){
count = classGroupService.getClassGroupCountByRaidGroupId(raidGroupId);
}
else{
count = classGroupService.getClassGroupCountByRaidGroupId(raidGroupId, searchTerm);
}
ObjectNode returnNode = mapper.createObjectNode();
returnNode.put("count", count);
returnNode.put("status", "success");
return returnNode;
}
@GetMapping("/{classGroupId}")
@AccountAuthorization(permissions = {AccountPermissionType.ADMIN, AccountPermissionType.USER})
@RaidGroupAuthorization(permissions = {RaidGroupPermissionType.ADMIN, RaidGroupPermissionType.LEADER, RaidGroupPermissionType.RAIDER})
public ClassGroup getClassGroup(@PathVariable("raidGroupId") UUID raidGroupId, @PathVariable("classGroupId") UUID classGroupId){
log.info("Getting class group {} for raid group {}", classGroupId, raidGroupId);
return classGroupService.getClassGroup(classGroupId, raidGroupId);
}
@PostMapping
@AccountAuthorization(permissions = {AccountPermissionType.ADMIN, AccountPermissionType.USER})
@RaidGroupAuthorization(permissions = {RaidGroupPermissionType.ADMIN, RaidGroupPermissionType.LEADER})
public ObjectNode createClassGroup(@PathVariable("raidGroupId") UUID raidGroupId, @RequestBody ObjectNode bodyNode) throws JsonProcessingException{
log.info("Creating class group for raid group {}", raidGroupId);
ClassGroup classGroup = mapper.treeToValue(bodyNode.get("classGroup"), ClassGroup.class);
UUID[] gameClassIds = mapper.treeToValue(bodyNode.get("gameClassIds"), UUID[].class);
List<ClassGroupGameClassXref> xrefs = new ArrayList<>(gameClassIds.length);
for(UUID gameClassId : gameClassIds){
ClassGroupGameClassXref xref = new ClassGroupGameClassXref();
xref.setGameClassId(gameClassId);
xrefs.add(xref);
}
classGroup = classGroupService.createClassGroup(classGroup, xrefs);
ObjectNode returnNode = mapper.createObjectNode();
returnNode.put("classGroupId", classGroup.getClassGroupId().toString());
returnNode.put("status", "success");
return returnNode;
}
@PutMapping("/{classGroupId}")
@AccountAuthorization(permissions = {AccountPermissionType.ADMIN, AccountPermissionType.USER})
@RaidGroupAuthorization(permissions = {RaidGroupPermissionType.ADMIN, RaidGroupPermissionType.LEADER})
public ObjectNode updateClassGroup(@PathVariable("raidGroupId") UUID raidGroupId, @PathVariable("classGroupId") UUID classGroupId, @RequestBody ObjectNode bodyNode) throws JsonProcessingException{
log.info("Updating class group {} for raid group {}", classGroupId, raidGroupId);
ClassGroup classGroup = mapper.treeToValue(bodyNode.get("classGroup"), ClassGroup.class);
UUID[] gameClassIds = mapper.treeToValue(bodyNode.get("gameClassIds"), UUID[].class);
List<ClassGroupGameClassXref> xrefs = new ArrayList<>(gameClassIds.length);
for(UUID gameClassId : gameClassIds){
ClassGroupGameClassXref xref = new ClassGroupGameClassXref();
xref.setClassGroupId(classGroup.getClassGroupId());
xref.setGameClassId(gameClassId);
xrefs.add(xref);
}
classGroupService.updateClassGroup(classGroup, xrefs);
ObjectNode returnNode = mapper.createObjectNode();
returnNode.put("classGroupId", classGroup.getClassGroupId().toString());
returnNode.put("status", "success");
return returnNode;
}
@DeleteMapping("/{classGroupId}")
@AccountAuthorization(permissions = {AccountPermissionType.ADMIN, AccountPermissionType.USER})
@RaidGroupAuthorization(permissions = {RaidGroupPermissionType.ADMIN, RaidGroupPermissionType.LEADER})
public ObjectNode deleteClassGroup(@PathVariable("raidGroupId") UUID raidGroupId, @PathVariable("classGroupId") UUID classGroupId){
log.info("Deleting class group {} for raid group {}", classGroupId, raidGroupId);
classGroupService.deleteClassGroup(classGroupId, raidGroupId);
ObjectNode returnNode = mapper.createObjectNode();
returnNode.put("status", "success");
return returnNode;
}
}

View File

@@ -77,6 +77,15 @@ public class GameClassController{
return countNode;
}
@GetMapping("/classGroup/{classGroupId}")
@AccountAuthorization(permissions = {AccountPermissionType.ADMIN, AccountPermissionType.USER})
public List<GameClass> getByClassGroupId(@PathVariable("classGroupId") UUID classGroupId){
log.info("Getting game classes for class group {}", classGroupId);
return gameClassService.getByClassGroupId(classGroupId);
}
@PostMapping("/game/{gameId}")
@AccountAuthorization(permissions = {AccountPermissionType.ADMIN, AccountPermissionType.USER})