Merge pull request 'refactor: extract common code to method' (!217) from refactor-blackjack-controllers into main
Reviewed-on: #217 Reviewed-by: Jan K9f <jan@kjan.email>
This commit is contained in:
		
				commit
				
					
						b495fdbe74
					
				
			
		
					 4 changed files with 37 additions and 60 deletions
				
			
		|  | @ -1,6 +1,7 @@ | |||
| package de.szut.casino.blackjack; | ||||
| 
 | ||||
| import de.szut.casino.exceptionHandling.exceptions.InsufficientFundsException; | ||||
| import de.szut.casino.exceptionHandling.exceptions.UserBlackJackGameMismatchException; | ||||
| import de.szut.casino.exceptionHandling.exceptions.UserNotFoundException; | ||||
| import de.szut.casino.shared.dto.BetDto; | ||||
| import de.szut.casino.shared.service.BalanceService; | ||||
|  | @ -30,85 +31,35 @@ public class BlackJackGameController { | |||
| 
 | ||||
|     @GetMapping("/blackjack/{id}") | ||||
|     public ResponseEntity<Object> getGame(@PathVariable Long id) { | ||||
|         Optional<UserEntity> optionalUser = userService.getCurrentUser(); | ||||
| 
 | ||||
|         if (optionalUser.isEmpty()) { | ||||
|             throw new UserNotFoundException(); | ||||
|         } | ||||
| 
 | ||||
|         UserEntity user = optionalUser.get(); | ||||
|         BlackJackGameEntity game = blackJackService.getBlackJackGame(id); | ||||
|         if (game == null || !Objects.equals(game.getUserId(), user.getId())) { | ||||
|             return ResponseEntity.notFound().build(); | ||||
|         } | ||||
|         BlackJackGameEntity game = getBlackJackGame(id); | ||||
| 
 | ||||
|         return ResponseEntity.ok(game); | ||||
|     } | ||||
| 
 | ||||
|     @PostMapping("/blackjack/{id}/hit") | ||||
|     public ResponseEntity<Object> hit(@PathVariable Long id) { | ||||
|         Optional<UserEntity> optionalUser = userService.getCurrentUser(); | ||||
| 
 | ||||
|         if (optionalUser.isEmpty()) { | ||||
|             throw new UserNotFoundException(); | ||||
|         } | ||||
| 
 | ||||
|         UserEntity user = optionalUser.get(); | ||||
|         BlackJackGameEntity game = blackJackService.getBlackJackGame(id); | ||||
|         if (game == null || !Objects.equals(game.getUserId(), user.getId())) { | ||||
|             return ResponseEntity.notFound().build(); | ||||
|         } | ||||
|         BlackJackGameEntity game = getBlackJackGame(id); | ||||
| 
 | ||||
|         return ResponseEntity.ok(blackJackService.hit(game)); | ||||
|     } | ||||
| 
 | ||||
|     @PostMapping("/blackjack/{id}/stand") | ||||
|     public ResponseEntity<Object> stand(@PathVariable Long id) { | ||||
|         Optional<UserEntity> optionalUser = userService.getCurrentUser(); | ||||
| 
 | ||||
|         if (optionalUser.isEmpty()) { | ||||
|             throw new UserNotFoundException(); | ||||
|         } | ||||
| 
 | ||||
|         UserEntity user = optionalUser.get(); | ||||
|         BlackJackGameEntity game = blackJackService.getBlackJackGame(id); | ||||
|         if (game == null || !Objects.equals(game.getUserId(), user.getId())) { | ||||
|             return ResponseEntity.notFound().build(); | ||||
|         } | ||||
|         BlackJackGameEntity game = getBlackJackGame(id); | ||||
| 
 | ||||
|         return ResponseEntity.ok(blackJackService.stand(game)); | ||||
|     } | ||||
| 
 | ||||
|     @PostMapping("/blackjack/{id}/doubleDown") | ||||
|     public ResponseEntity<Object> doubleDown(@PathVariable Long id) { | ||||
|         Optional<UserEntity> optionalUser = userService.getCurrentUser(); | ||||
| 
 | ||||
|         if (optionalUser.isEmpty()) { | ||||
|             throw new UserNotFoundException(); | ||||
|         } | ||||
| 
 | ||||
|         UserEntity user = optionalUser.get(); | ||||
|         BlackJackGameEntity game = blackJackService.getBlackJackGame(id); | ||||
|         if (game == null || !Objects.equals(game.getUserId(), user.getId())) { | ||||
|             return ResponseEntity.notFound().build(); | ||||
|         } | ||||
|         BlackJackGameEntity game = getBlackJackGame(id); | ||||
| 
 | ||||
|         return ResponseEntity.ok(blackJackService.doubleDown(game)); | ||||
|     } | ||||
| 
 | ||||
|     @PostMapping("/blackjack/{id}/split") | ||||
|     public ResponseEntity<Object> split(@PathVariable Long id) { | ||||
|         Optional<UserEntity> optionalUser = userService.getCurrentUser(); | ||||
| 
 | ||||
|         if (optionalUser.isEmpty()) { | ||||
|             throw new UserNotFoundException(); | ||||
|         } | ||||
| 
 | ||||
|         UserEntity user = optionalUser.get(); | ||||
|         BlackJackGameEntity game = blackJackService.getBlackJackGame(id); | ||||
|         if (game == null || !Objects.equals(game.getUserId(), user.getId())) { | ||||
|             return ResponseEntity.notFound().build(); | ||||
|         } | ||||
|         BlackJackGameEntity game = getBlackJackGame(id); | ||||
| 
 | ||||
|         return ResponseEntity.ok(blackJackService.split(game)); | ||||
|     } | ||||
|  | @ -129,4 +80,20 @@ public class BlackJackGameController { | |||
| 
 | ||||
|         return ResponseEntity.ok(blackJackService.createBlackJackGame(user, betDto.getBetAmount())); | ||||
|     } | ||||
| 
 | ||||
|     private BlackJackGameEntity getBlackJackGame(Long gameId) { | ||||
|         Optional<UserEntity> optionalUser = userService.getCurrentUser(); | ||||
| 
 | ||||
|         if (optionalUser.isEmpty()) { | ||||
|             throw new UserNotFoundException(); | ||||
|         } | ||||
| 
 | ||||
|         UserEntity user = optionalUser.get(); | ||||
|         BlackJackGameEntity game = blackJackService.getBlackJackGame(gameId); | ||||
|         if (game == null || !Objects.equals(game.getUserId(), user.getId())) { | ||||
|             throw new UserBlackJackGameMismatchException(gameId); | ||||
|         } | ||||
| 
 | ||||
|         return game; | ||||
|     } | ||||
| } | ||||
|  |  | |||
|  | @ -124,10 +124,6 @@ public class BlackJackService { | |||
|         return blackJackGameRepository.save(game); | ||||
|     } | ||||
| 
 | ||||
|     private BlackJackGameEntity refreshGameState(BlackJackGameEntity game) { | ||||
|         return blackJackGameRepository.findById(game.getId()).orElse(game); | ||||
|     } | ||||
| 
 | ||||
|     private UserEntity getUserWithFreshData(UserEntity user) { | ||||
|         return userRepository.findById(user.getId()).orElse(user); | ||||
|     } | ||||
|  | @ -210,7 +206,7 @@ public class BlackJackService { | |||
|     } | ||||
| 
 | ||||
|     @Transactional | ||||
|     private void updateUserBalance(BlackJackGameEntity game, boolean isWin) { | ||||
|     protected void updateUserBalance(BlackJackGameEntity game, boolean isWin) { | ||||
|         UserEntity user = getUserWithFreshData(game.getUser()); | ||||
|         BigDecimal totalBet = game.getBet(); | ||||
|         BigDecimal balance = user.getBalance(); | ||||
|  |  | |||
|  | @ -2,6 +2,7 @@ package de.szut.casino.exceptionHandling; | |||
| 
 | ||||
| import de.szut.casino.exceptionHandling.exceptions.EmailNotVerifiedException; | ||||
| import de.szut.casino.exceptionHandling.exceptions.InsufficientFundsException; | ||||
| import de.szut.casino.exceptionHandling.exceptions.UserBlackJackGameMismatchException; | ||||
| import de.szut.casino.exceptionHandling.exceptions.UserNotFoundException; | ||||
| import jakarta.persistence.EntityExistsException; | ||||
| import org.springframework.http.HttpStatus; | ||||
|  | @ -38,4 +39,10 @@ public class GlobalExceptionHandler { | |||
|         ErrorDetails errorDetails = new ErrorDetails(new Date(), ex.getMessage(), request.getDescription(false)); | ||||
|         return new ResponseEntity<>(errorDetails, HttpStatus.UNAUTHORIZED); | ||||
|     } | ||||
| 
 | ||||
|     @ExceptionHandler(UserBlackJackGameMismatchException.class) | ||||
|     public ResponseEntity<?> handleUserBlackJackGameMismatchException(UserBlackJackGameMismatchException ex, WebRequest request) { | ||||
|         ErrorDetails errorDetails = new ErrorDetails(new Date(), ex.getMessage(), request.getDescription(false)); | ||||
|         return new ResponseEntity<>(errorDetails, HttpStatus.NOT_FOUND); | ||||
|     } | ||||
| } | ||||
|  |  | |||
|  | @ -0,0 +1,7 @@ | |||
| package de.szut.casino.exceptionHandling.exceptions; | ||||
| 
 | ||||
| public class UserBlackJackGameMismatchException extends RuntimeException { | ||||
|     public UserBlackJackGameMismatchException(Long gameId) { | ||||
|         super(String.format("Blackjack game with ID %d not found or does not belong to the current user.", gameId)); | ||||
|     } | ||||
| } | ||||
		Reference in a new issue