From 1dfdedee91444c52a39d9c851a4a8e6272366c70 Mon Sep 17 00:00:00 2001
From: Phan Huy Tran
Date: Wed, 21 May 2025 09:49:09 +0200
Subject: [PATCH 1/2] fix: delete orhpaned blackjack games
---
.../casino/blackjack/BlackJackService.java | 52 +++++++++++--------
1 file changed, 30 insertions(+), 22 deletions(-)
diff --git a/backend/src/main/java/de/szut/casino/blackjack/BlackJackService.java b/backend/src/main/java/de/szut/casino/blackjack/BlackJackService.java
index cb31352..d0a3839 100644
--- a/backend/src/main/java/de/szut/casino/blackjack/BlackJackService.java
+++ b/backend/src/main/java/de/szut/casino/blackjack/BlackJackService.java
@@ -35,8 +35,8 @@ public class BlackJackService {
game.setState(getState(game));
deductBetFromBalance(user, betAmount);
-
- return blackJackGameRepository.save(game);
+
+ return processGameBasedOnState(game);
}
@Transactional
@@ -44,12 +44,11 @@ public class BlackJackService {
if (game.getState() != BlackJackState.IN_PROGRESS) {
return game;
}
-
+
dealCardToPlayer(game);
-
updateGameStateAndBalance(game);
-
- return blackJackGameRepository.save(game);
+
+ return processGameBasedOnState(game);
}
@Transactional
@@ -57,11 +56,11 @@ public class BlackJackService {
if (game.getState() != BlackJackState.IN_PROGRESS) {
return game;
}
-
+
dealCardsToDealerUntilMinimumScore(game);
determineWinnerAndUpdateBalance(game);
-
- return blackJackGameRepository.save(game);
+
+ return processGameBasedOnState(game);
}
@Transactional
@@ -69,50 +68,59 @@ public class BlackJackService {
if (game.getState() != BlackJackState.IN_PROGRESS || game.getPlayerCards().size() != 2) {
return game;
}
-
+
UserEntity user = getUserWithFreshData(game.getUser());
BigDecimal additionalBet = game.getBet();
-
+
deductBetFromBalance(user, additionalBet);
game.setBet(game.getBet().add(additionalBet));
-
+
dealCardToPlayer(game);
updateGameStateAndBalance(game);
-
+
if (game.getState() == BlackJackState.IN_PROGRESS) {
return stand(game);
}
-
+
return game;
}
@Transactional
public BlackJackGameEntity split(BlackJackGameEntity game) {
- if (game.getState() != BlackJackState.IN_PROGRESS ||
- game.getPlayerCards().size() != 2 ||
+ if (game.getState() != BlackJackState.IN_PROGRESS ||
+ game.getPlayerCards().size() != 2 ||
game.isSplit() ||
!game.getPlayerCards().get(0).getRank().equals(game.getPlayerCards().get(1).getRank())) {
return game;
}
-
+
UserEntity user = getUserWithFreshData(game.getUser());
BigDecimal splitBet = game.getBet();
-
+
if (user.getBalance().compareTo(splitBet) < 0) {
return game;
}
-
+
deductBetFromBalance(user, splitBet);
game.setSplitBet(splitBet);
game.setSplit(true);
-
+
CardEntity card = game.getPlayerCards().remove(1);
card.setCardType(CardType.PLAYER_SPLIT);
game.getPlayerSplitCards().add(card);
-
+
dealCardToPlayer(game);
dealCardToSplitHand(game);
-
+
+ return blackJackGameRepository.save(game);
+ }
+
+ private BlackJackGameEntity processGameBasedOnState(BlackJackGameEntity game) {
+ if (game.getState() != BlackJackState.IN_PROGRESS) {
+ this.blackJackGameRepository.delete(game);
+ return game;
+ }
+
return blackJackGameRepository.save(game);
}
From 1931a023691a8ca2ae54ae9a827f0a7b7d1da9bb Mon Sep 17 00:00:00 2001
From: Phan Huy Tran
Date: Wed, 21 May 2025 09:50:00 +0200
Subject: [PATCH 2/2] style: format code
---
.../casino/blackjack/BlackJackService.java | 44 +++++++++----------
1 file changed, 22 insertions(+), 22 deletions(-)
diff --git a/backend/src/main/java/de/szut/casino/blackjack/BlackJackService.java b/backend/src/main/java/de/szut/casino/blackjack/BlackJackService.java
index d0a3839..9bf591f 100644
--- a/backend/src/main/java/de/szut/casino/blackjack/BlackJackService.java
+++ b/backend/src/main/java/de/szut/casino/blackjack/BlackJackService.java
@@ -29,10 +29,10 @@ public class BlackJackService {
BlackJackGameEntity game = new BlackJackGameEntity();
game.setUser(user);
game.setBet(betAmount);
-
+
initializeDeck(game);
dealInitialCards(game);
-
+
game.setState(getState(game));
deductBetFromBalance(user, betAmount);
@@ -88,9 +88,9 @@ public class BlackJackService {
@Transactional
public BlackJackGameEntity split(BlackJackGameEntity game) {
if (game.getState() != BlackJackState.IN_PROGRESS ||
- game.getPlayerCards().size() != 2 ||
- game.isSplit() ||
- !game.getPlayerCards().get(0).getRank().equals(game.getPlayerCards().get(1).getRank())) {
+ game.getPlayerCards().size() != 2 ||
+ game.isSplit() ||
+ !game.getPlayerCards().get(0).getRank().equals(game.getPlayerCards().get(1).getRank())) {
return game;
}
@@ -127,48 +127,48 @@ public class BlackJackService {
private BlackJackGameEntity refreshGameState(BlackJackGameEntity game) {
return blackJackGameRepository.findById(game.getId()).orElse(game);
}
-
+
private UserEntity getUserWithFreshData(UserEntity user) {
return userRepository.findById(user.getId()).orElse(user);
}
-
+
private void dealInitialCards(BlackJackGameEntity game) {
for (int i = 0; i < 2; i++) {
dealCardToPlayer(game);
}
-
+
dealCardToDealer(game);
}
-
+
private void dealCardToPlayer(BlackJackGameEntity game) {
CardEntity card = drawCardFromDeck(game);
card.setCardType(CardType.PLAYER);
game.getPlayerCards().add(card);
}
-
+
private void dealCardToDealer(BlackJackGameEntity game) {
CardEntity card = drawCardFromDeck(game);
card.setCardType(CardType.DEALER);
game.getDealerCards().add(card);
}
-
+
private void dealCardsToDealerUntilMinimumScore(BlackJackGameEntity game) {
while (calculateHandValue(game.getDealerCards()) < 17) {
dealCardToDealer(game);
}
}
-
+
private void dealCardToSplitHand(BlackJackGameEntity game) {
CardEntity card = drawCardFromDeck(game);
card.setCardType(CardType.PLAYER_SPLIT);
game.getPlayerSplitCards().add(card);
}
-
+
private void updateGameStateAndBalance(BlackJackGameEntity game) {
if (game.isSplit()) {
int mainHandValue = calculateHandValue(game.getPlayerCards());
int splitHandValue = calculateHandValue(game.getPlayerSplitCards());
-
+
if (mainHandValue > 21 && splitHandValue > 21) {
game.setState(BlackJackState.PLAYER_LOST);
updateUserBalance(game, false);
@@ -179,7 +179,7 @@ public class BlackJackService {
}
} else {
game.setState(getState(game));
-
+
if (game.getState() == BlackJackState.PLAYER_WON) {
updateUserBalance(game, true);
} else if (game.getState() == BlackJackState.PLAYER_LOST) {
@@ -187,7 +187,7 @@ public class BlackJackService {
}
}
}
-
+
private void determineWinnerAndUpdateBalance(BlackJackGameEntity game) {
int playerValue = calculateHandValue(game.getPlayerCards());
int dealerValue = calculateHandValue(game.getDealerCards());
@@ -203,7 +203,7 @@ public class BlackJackService {
updateUserBalance(game, false);
}
}
-
+
private void deductBetFromBalance(UserEntity user, BigDecimal betAmount) {
user.setBalance(user.getBalance().subtract(betAmount));
userRepository.save(user);
@@ -214,21 +214,21 @@ public class BlackJackService {
UserEntity user = getUserWithFreshData(game.getUser());
BigDecimal totalBet = game.getBet();
BigDecimal balance = user.getBalance();
-
+
if (game.isSplit()) {
totalBet = totalBet.add(game.getSplitBet());
-
+
if (isWin) {
int mainHandValue = calculateHandValue(game.getPlayerCards());
int splitHandValue = calculateHandValue(game.getPlayerSplitCards());
int dealerValue = calculateHandValue(game.getDealerCards());
-
+
if (mainHandValue <= 21 && (dealerValue > 21 || mainHandValue > dealerValue)) {
balance = balance.add(game.getBet().multiply(BigDecimal.valueOf(2)));
} else if (mainHandValue == dealerValue) {
balance = balance.add(game.getBet());
}
-
+
if (splitHandValue <= 21 && (dealerValue > 21 || splitHandValue > dealerValue)) {
balance = balance.add(game.getSplitBet().multiply(BigDecimal.valueOf(2)));
} else if (splitHandValue == dealerValue) {
@@ -244,7 +244,7 @@ public class BlackJackService {
balance = balance.add(totalBet);
}
}
-
+
user.setBalance(balance);
userRepository.save(user);
}