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,129 @@
package com.mattrixwv.raidbuilder.service;
import java.io.File;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.List;
import java.util.UUID;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Sort;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.multipart.MultipartFile;
import com.mattrixwv.raidbuilder.entity.GameClass;
import com.mattrixwv.raidbuilder.repository.game_class.GameClassRepository;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
@Slf4j
@Service
@Transactional(rollbackFor = Exception.class)
@RequiredArgsConstructor
public class GameClassService{
private final GameClassRepository gameClassRepository;
//Values
@Value("${uploadFileDirectory}")
private String uploadFileDirectory;
//Write
public GameClass createGameClass(GameClass gameClass, MultipartFile file){
if(file != null){
String fileName = UUID.randomUUID().toString() + "--" + file.getOriginalFilename();
Path filePath = Paths.get(uploadFileDirectory + "/gameClassIcons").resolve(fileName);
try{
file.transferTo(filePath);
gameClass.setGameClassIcon(fileName);
}
catch(Exception error){
log.error("Error uploading file: " + error.getMessage(), error);
throw new RuntimeException("Error uploading file: " + error.getMessage(), error);
}
}
return gameClassRepository.save(gameClass);
}
public GameClass updateGameClass(GameClass gameClass, MultipartFile file){
GameClass existingGameClass = gameClassRepository.findById(gameClass.getGameClassId()).orElse(null);
//Delete the old file if one exists
if((existingGameClass != null) && (existingGameClass.getGameClassIcon() != null) && (gameClass.getGameClassIcon() == null)){
log.debug("Deleting old file: {}", existingGameClass.getGameClassIcon());
File existingFile = new File(uploadFileDirectory + "/gameClassIcons/" + existingGameClass.getGameClassIcon());
if(existingFile.exists()){
existingFile.delete();
}
}
if(file != null){
//Upload the new file
String fileName = UUID.randomUUID().toString() + "--" + file.getOriginalFilename();
Path filePath = Paths.get(uploadFileDirectory + "/gameClassIcons").resolve(fileName);
try{
file.transferTo(filePath);
gameClass.setGameClassIcon(fileName);
}
catch(Exception error){
log.error("Error uploading file: " + error.getMessage(), error);
throw new RuntimeException("Error uploading file: " + error.getMessage(), error);
}
}
return gameClassRepository.save(gameClass);
}
public void deleteById(UUID gameClassId){
GameClass gameClass = gameClassRepository.findById(gameClassId).orElse(null);
if(gameClass != null){
if(gameClass.getGameClassIcon() != null){
File existingFile = new File(uploadFileDirectory + "/gameClassIcons/" + gameClass.getGameClassIcon());
if(existingFile.exists()){
existingFile.delete();
}
}
}
gameClassRepository.deleteById(gameClassId);
}
public void deleteByGameId(UUID gameId){
List<GameClass> gameClasses = gameClassRepository.findAllByGameId(gameId);
for(GameClass gameClass : gameClasses){
if(gameClass.getGameClassIcon() != null){
File existingFile = new File(uploadFileDirectory + "/gameClassIcons/" + gameClass.getGameClassIcon());
if(existingFile.exists()){
existingFile.delete();
}
}
}
gameClassRepository.deleteByGameId(gameId);
}
//Read
public List<GameClass> getByGameId(UUID gameId, int page, int pageSize){
return gameClassRepository.findAllByGameId(gameId, PageRequest.of(page, pageSize, Sort.by("gameClassName").ascending()));
}
public List<GameClass> getByGameId(UUID gameId, int page, int pageSize, String searchTerm){
return gameClassRepository.findAllByGameIdAndGameClassNameContainingIgnoreCase(gameId, searchTerm, PageRequest.of(page, pageSize, Sort.by("gameClassName").ascending()));
}
public long countByGameId(UUID gameId){
return gameClassRepository.countByGameId(gameId);
}
public long countByGameId(UUID gameId, String searchTerm){
return gameClassRepository.countByGameIdAndGameClassNameContainingIgnoreCase(gameId, searchTerm);
}
}