Game Classes tab working

This commit is contained in:
2025-03-06 22:32:04 -05:00
parent 78453ebfa1
commit 0bcc57b614
18 changed files with 420 additions and 67 deletions

View File

@@ -0,0 +1,140 @@
package com.mattrixwv.raidbuilder.controller;
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.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.node.ObjectNode;
import com.mattrixwv.raidbuilder.annotation.AccountAuthorization;
import com.mattrixwv.raidbuilder.annotation.GameAuthorization;
import com.mattrixwv.raidbuilder.entity.GameClass;
import com.mattrixwv.raidbuilder.service.GameClassService;
import com.mattrixwv.raidbuilder.util.DatabaseTypeUtil.AccountPermissionType;
import com.mattrixwv.raidbuilder.util.DatabaseTypeUtil.GamePermissionType;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
@Slf4j
@RestController
@RequestMapping("/gameClass")
@RequiredArgsConstructor
public class GameClassController{
private final ObjectMapper mapper;
private final GameClassService gameClassService;
@GetMapping("/game/{gameId}")
@AccountAuthorization(permissions = {AccountPermissionType.ADMIN, AccountPermissionType.USER})
public List<GameClass> getByGameId(@PathVariable("gameId") UUID gameId, @RequestParam("page") int page, @RequestParam("pageSize") int pageSize, @RequestParam(name = "searchTerm", required = false) String searchTerm){
log.info("Getting game classes for game {} with page {} of size {} with search term {}", gameId, page, pageSize, searchTerm);
List<GameClass> gameClasses;
if((searchTerm == null) || (searchTerm.isBlank())){
gameClasses = gameClassService.getByGameId(gameId, page, pageSize);
}
else{
gameClasses = gameClassService.getByGameId(gameId, page, pageSize, searchTerm);
}
return gameClasses;
}
@GetMapping("/game/{gameId}/count")
@AccountAuthorization(permissions = {AccountPermissionType.ADMIN, AccountPermissionType.USER})
public ObjectNode getByGameCount(@PathVariable("gameId") UUID gameId, @RequestParam(name = "searchTerm", required = false) String searchTerm){
log.info("Getting game classes count for game {} with search term {}", gameId, searchTerm);
Long gameClassesCount;
if((searchTerm == null) || (searchTerm.isBlank())){
gameClassesCount = gameClassService.countByGameId(gameId);
}
else{
gameClassesCount = gameClassService.countByGameId(gameId, searchTerm);
}
ObjectNode countNode = mapper.createObjectNode();
countNode.put("count", gameClassesCount);
countNode.put("status", "success");
return countNode;
}
@PostMapping("/game/{gameId}")
@AccountAuthorization(permissions = {AccountPermissionType.ADMIN, AccountPermissionType.USER})
@GameAuthorization(permissions = {GamePermissionType.ADMIN})
public ObjectNode createGameClass(@PathVariable("gameId") UUID gameId, @RequestParam(value = "iconFile", required = false) MultipartFile file, @RequestParam("gameClassName") String gameClassName){
log.info("Creating game class {}", gameClassName);
ObjectNode returnNode = mapper.createObjectNode();
GameClass gameClass = new GameClass();
gameClass.setGameId(gameId);
gameClass.setGameClassName(gameClassName);
gameClassService.createGameClass(gameClass, file);
returnNode.put("gameClassId", gameClass.getGameClassId().toString());
returnNode.put("status", "success");
log.info("Successfully created game class: {}", gameClass.getGameClassId());
return returnNode;
}
@PutMapping("/{gameClassId}/game/{gameId}")
@AccountAuthorization(permissions = {AccountPermissionType.ADMIN, AccountPermissionType.USER})
@GameAuthorization(permissions = {GamePermissionType.ADMIN})
public ObjectNode updateGameClass(@PathVariable("gameClassId") UUID gameClassId, @PathVariable("gameId") UUID gameId, @RequestParam(value = "iconFile", required = false) MultipartFile file, @RequestParam("gameClassName") String gameClassName, @RequestParam(value = "gameClassIcon", required = false) String gameClassIcon){
log.info("Updating game class {}", gameClassName);
ObjectNode returnNode = mapper.createObjectNode();
GameClass gameClass = new GameClass();
gameClass.setGameClassId(gameClassId);
gameClass.setGameId(gameId);
gameClass.setGameClassName(gameClassName);
gameClass.setGameClassIcon(gameClassIcon);
gameClassService.updateGameClass(gameClass, file);
returnNode.put("gameClassId", gameClass.getGameClassId().toString());
returnNode.put("status", "success");
log.info("Successfully updated game class: {}", gameClass.getGameClassId());
return returnNode;
}
@DeleteMapping("/{gameClassId}/game/{gameId}")
@AccountAuthorization(permissions = {AccountPermissionType.ADMIN, AccountPermissionType.USER})
@GameAuthorization(permissions = {GamePermissionType.ADMIN})
public ObjectNode deleteGameClass(@PathVariable("gameClassId") UUID gameClassId, @PathVariable("gameId") UUID gameId){
log.info("Deleting game class {}", gameClassId);
ObjectNode returnNode = mapper.createObjectNode();
gameClassService.deleteById(gameClassId);
returnNode.put("status", "success");
log.info("Successfully deleted game class: {}", gameClassId);
return returnNode;
}
}

View File

@@ -17,6 +17,7 @@ import com.mattrixwv.raidbuilder.annotation.AccountAuthorization;
import lombok.extern.slf4j.Slf4j;
@Slf4j
@RestController
@RequestMapping("/icons")
@@ -46,6 +47,18 @@ public class IconController{
byte[] resource = Files.readAllBytes(Path.of(uploadFileDirectory + "/raidGroupIcons/" + raidGroupIconName));
return ResponseEntity.ok().body(resource);
}
@GetMapping("/gameClassIcons/{gameClassIconName}")
@AccountAuthorization(permissions = {})
public ResponseEntity<byte[]> getGameClassIcons(@PathVariable("gameClassIconName") String gameClassIconName) throws IOException{
log.info("Getting game class icon {}", gameClassIconName);
byte[] resource = Files.readAllBytes(Path.of(uploadFileDirectory + "/gameClassIcons/" + gameClassIconName));
return ResponseEntity.ok().body(resource);
}
}