refactor: use userservice and balance service inside blackjack service
All checks were successful
CI / Get Changed Files (pull_request) Successful in 8s
CI / eslint (pull_request) Has been skipped
CI / Docker frontend validation (pull_request) Has been skipped
CI / oxlint (pull_request) Has been skipped
CI / prettier (pull_request) Has been skipped
CI / test-build (pull_request) Has been skipped
CI / Checkstyle Main (pull_request) Successful in 51s
CI / Docker backend validation (pull_request) Successful in 54s
Setup Gitea Tea CLI / setup-and-login (pull_request) Successful in 1m30s

This commit is contained in:
Phan Huy Tran 2025-05-28 11:41:32 +02:00
commit 3cbffba14f
2 changed files with 30 additions and 18 deletions

View file

@ -59,13 +59,7 @@ public class BlackJackGameController {
@PostMapping("/blackjack/start") @PostMapping("/blackjack/start")
public ResponseEntity<Object> createBlackJackGame(@RequestBody @Valid BetDto betDto) { public ResponseEntity<Object> createBlackJackGame(@RequestBody @Valid BetDto betDto) {
UserEntity user = this.userService.getCurrentUser(); return ResponseEntity.ok(blackJackService.createBlackJackGame(betDto));
if (!this.balanceService.hasFunds(user, betDto)) {
throw new InsufficientFundsException();
}
return ResponseEntity.ok(blackJackService.createBlackJackGame(user, betDto.getBetAmount()));
} }
private BlackJackGameEntity getBlackJackGame(Long gameId) { private BlackJackGameEntity getBlackJackGame(Long gameId) {

View file

@ -1,7 +1,11 @@
package de.szut.casino.blackjack; package de.szut.casino.blackjack;
import de.szut.casino.exceptionHandling.exceptions.InsufficientFundsException;
import de.szut.casino.shared.dto.BetDto;
import de.szut.casino.shared.service.BalanceService;
import de.szut.casino.user.UserEntity; import de.szut.casino.user.UserEntity;
import de.szut.casino.user.UserRepository; import de.szut.casino.user.UserRepository;
import de.szut.casino.user.UserService;
import jakarta.transaction.Transactional; import jakarta.transaction.Transactional;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
@ -13,11 +17,22 @@ import java.util.Random;
public class BlackJackService { public class BlackJackService {
private final BlackJackGameRepository blackJackGameRepository; private final BlackJackGameRepository blackJackGameRepository;
private final UserRepository userRepository; private final UserRepository userRepository;
private final Random random = new Random(); private final Random random;
private final BalanceService balanceService;
private final UserService userService;
public BlackJackService(BlackJackGameRepository blackJackGameRepository, UserRepository userRepository) { public BlackJackService(
BlackJackGameRepository blackJackGameRepository,
UserRepository userRepository,
Random random,
BalanceService balanceService,
UserService userService
) {
this.blackJackGameRepository = blackJackGameRepository; this.blackJackGameRepository = blackJackGameRepository;
this.userRepository = userRepository; this.userRepository = userRepository;
this.random = random;
this.balanceService = balanceService;
this.userService = userService;
} }
public BlackJackGameEntity getBlackJackGame(Long id) { public BlackJackGameEntity getBlackJackGame(Long id) {
@ -25,16 +40,23 @@ public class BlackJackService {
} }
@Transactional @Transactional
public BlackJackGameEntity createBlackJackGame(UserEntity user, BigDecimal betAmount) { public BlackJackGameEntity createBlackJackGame(BetDto betDto) {
UserEntity user = userService.getCurrentUser();
if (!this.balanceService.hasFunds(user, betDto)) {
throw new InsufficientFundsException();
}
this.balanceService.subtractFunds(user, betDto.getBetAmount());
BlackJackGameEntity game = new BlackJackGameEntity(); BlackJackGameEntity game = new BlackJackGameEntity();
game.setUser(user); game.setUser(user);
game.setBet(betAmount); game.setBet(betDto.getBetAmount());
initializeDeck(game); initializeDeck(game);
dealInitialCards(game); dealInitialCards(game);
game.setState(getState(game)); game.setState(getState(game));
deductBetFromBalance(user, betAmount);
return processGameBasedOnState(game); return processGameBasedOnState(game);
} }
@ -72,7 +94,8 @@ public class BlackJackService {
UserEntity user = getUserWithFreshData(game.getUser()); UserEntity user = getUserWithFreshData(game.getUser());
BigDecimal additionalBet = game.getBet(); BigDecimal additionalBet = game.getBet();
deductBetFromBalance(user, additionalBet); this.balanceService.subtractFunds(user, additionalBet);
game.setBet(game.getBet().add(additionalBet)); game.setBet(game.getBet().add(additionalBet));
dealCardToPlayer(game); dealCardToPlayer(game);
@ -150,11 +173,6 @@ public class BlackJackService {
} }
} }
private void deductBetFromBalance(UserEntity user, BigDecimal betAmount) {
user.setBalance(user.getBalance().subtract(betAmount));
userRepository.save(user);
}
protected void updateUserBalance(BlackJackGameEntity game, boolean isWin) { protected void updateUserBalance(BlackJackGameEntity game, boolean isWin) {
UserEntity user = getUserWithFreshData(game.getUser()); UserEntity user = getUserWithFreshData(game.getUser());
BigDecimal totalBet = game.getBet(); BigDecimal totalBet = game.getBet();