diff --git a/backend/src/main/java/de/szut/casino/dice/DiceController.java b/backend/src/main/java/de/szut/casino/dice/DiceController.java deleted file mode 100644 index 949a002..0000000 --- a/backend/src/main/java/de/szut/casino/dice/DiceController.java +++ /dev/null @@ -1,44 +0,0 @@ -package de.szut.casino.dice; - -import de.szut.casino.exceptionHandling.exceptions.InsufficientFundsException; -import de.szut.casino.exceptionHandling.exceptions.UserNotFoundException; -import de.szut.casino.shared.service.BalanceService; -import de.szut.casino.user.UserEntity; -import de.szut.casino.user.UserService; -import jakarta.validation.Valid; -import org.springframework.http.ResponseEntity; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RestController; - -import java.util.Optional; - -@RestController -public class DiceController { - private final UserService userService; - private final BalanceService balanceService; - private final DiceService diceService; - - public DiceController(UserService userService, BalanceService balanceService, DiceService diceService) { - this.userService = userService; - this.balanceService = balanceService; - this.diceService = diceService; - } - - @PostMapping("/dice") - public ResponseEntity rollDice(@RequestBody @Valid DiceDto diceDto) { - Optional optionalUser = userService.getCurrentUser(); - - if (optionalUser.isEmpty()) { - throw new UserNotFoundException(); - } - - UserEntity user = optionalUser.get(); - - if (!this.balanceService.hasFunds(user, diceDto)) { - throw new InsufficientFundsException(); - } - - return ResponseEntity.ok(diceService.play(user, diceDto)); - } -} diff --git a/backend/src/main/java/de/szut/casino/dice/DiceDto.java b/backend/src/main/java/de/szut/casino/dice/DiceDto.java deleted file mode 100644 index ccec485..0000000 --- a/backend/src/main/java/de/szut/casino/dice/DiceDto.java +++ /dev/null @@ -1,25 +0,0 @@ -package de.szut.casino.dice; - -import de.szut.casino.shared.dto.BetDto; -import jakarta.validation.constraints.DecimalMin; -import jakarta.validation.constraints.NotNull; -import lombok.Getter; -import lombok.Setter; - -import java.math.BigDecimal; - -@Getter -@Setter -public class DiceDto extends BetDto { - private boolean rollOver; - - @NotNull - @DecimalMin(value = "1.00") - private BigDecimal targetValue; - - public DiceDto(BigDecimal betAmount, boolean rollOver, BigDecimal targetValue) { - super(betAmount); - this.rollOver = rollOver; - this.targetValue = targetValue; - } -} diff --git a/backend/src/main/java/de/szut/casino/dice/DiceResult.java b/backend/src/main/java/de/szut/casino/dice/DiceResult.java deleted file mode 100644 index 65a7f69..0000000 --- a/backend/src/main/java/de/szut/casino/dice/DiceResult.java +++ /dev/null @@ -1,20 +0,0 @@ -package de.szut.casino.dice; - -import lombok.Getter; -import lombok.Setter; - -import java.math.BigDecimal; - -@Setter -@Getter -public class DiceResult { - private boolean win; - private BigDecimal payout; - private BigDecimal rolledValue; - - public DiceResult(boolean win, BigDecimal payout, BigDecimal rolledValue) { - this.win = win; - this.payout = payout; - this.rolledValue = rolledValue; - } -} diff --git a/backend/src/main/java/de/szut/casino/dice/DiceService.java b/backend/src/main/java/de/szut/casino/dice/DiceService.java deleted file mode 100644 index 71e4584..0000000 --- a/backend/src/main/java/de/szut/casino/dice/DiceService.java +++ /dev/null @@ -1,68 +0,0 @@ -package de.szut.casino.dice; - -import de.szut.casino.shared.service.BalanceService; -import de.szut.casino.user.UserEntity; -import org.springframework.stereotype.Service; - -import java.math.BigDecimal; -import java.math.RoundingMode; -import java.util.Random; - -@Service -public class DiceService { - private static final int MAX_DICE_VALUE = 100; - private final Random random = new Random(); - private final BalanceService balanceService; - - public DiceService(BalanceService balanceService) { - this.balanceService = balanceService; - } - - public DiceResult play(UserEntity user, DiceDto diceDto) { - balanceService.subtractFunds(user, diceDto.getBetAmount()); - - int rolledValue = random.nextInt(MAX_DICE_VALUE) + 1; - BigDecimal rolledValueDecimal = BigDecimal.valueOf(rolledValue); - - BigDecimal targetValue = diceDto.getTargetValue(); - boolean isRollOver = diceDto.isRollOver(); - - boolean winConditionMet = isWinConditionMet(rolledValueDecimal, targetValue, isRollOver); - - if (!winConditionMet) { - return new DiceResult(false, BigDecimal.ZERO, rolledValueDecimal); - } - - BigDecimal winChance = calculateWinChance(targetValue, isRollOver); - BigDecimal multiplier = calculateMultiplier(winChance); - - BigDecimal payout = diceDto.getBetAmount().multiply(multiplier); - balanceService.addFunds(user, payout); - - return new DiceResult(true, payout, rolledValueDecimal); - } - - private boolean isWinConditionMet(BigDecimal rolledValue, BigDecimal targetValue, boolean isRollOver) { - if (isRollOver) { - return rolledValue.compareTo(targetValue) > 0; - } - - return rolledValue.compareTo(targetValue) < 0; - } - - private BigDecimal calculateWinChance(BigDecimal targetValue, boolean isRollOver) { - if (isRollOver) { - return BigDecimal.valueOf(MAX_DICE_VALUE).subtract(targetValue); - } - - return targetValue.subtract(BigDecimal.ONE); - } - - private BigDecimal calculateMultiplier(BigDecimal winChance) { - if (winChance.compareTo(BigDecimal.ZERO) > 0) { - return BigDecimal.valueOf(MAX_DICE_VALUE - 1).divide(winChance, 4, RoundingMode.HALF_UP); - } - - return BigDecimal.ZERO; - } -}