diff --git a/hopper/api/views.py b/hopper/api/views.py index ee88c92..7d51cb5 100644 --- a/hopper/api/views.py +++ b/hopper/api/views.py @@ -15,10 +15,25 @@ from hopper.api.dto import ( from hopper.engine import GameEngine from hopper.enums import Direction, PlayerMoveResult from hopper.errors import Collision, PositionOutOfBounds +from hopper.models.player import Player router = APIRouter() +def get_player(uuid: str, engine: GameEngine = Depends(get_game_engine)) -> Player: + player = engine.players.find(uuid) + if player is None: + raise HTTPException( + status_code=status.HTTP_404_NOT_FOUND, detail="Player not found" + ) + if not player.active: + raise HTTPException( + status_code=status.HTTP_404_NOT_FOUND, + detail="Player kicked out due to inactivity", + ) + return player + + @router.get("/ping", response_model=PingResponse) async def ping() -> PingResponse: return PingResponse( @@ -60,19 +75,8 @@ async def start_game( status_code=status.HTTP_201_CREATED, ) async def get_player_info( - uuid: str, - engine: GameEngine = Depends(get_game_engine), + player: Player = Depends(get_player), ) -> MovePlayerResponseDto: - player = engine.players.find(uuid) - if player is None: - raise HTTPException( - status_code=status.HTTP_404_NOT_FOUND, detail="Player not found" - ) - if not player.active: - raise HTTPException( - status_code=status.HTTP_404_NOT_FOUND, - detail="Player kicked out due to inactivity", - ) return PlayerInfoResponseDto(player=player) @@ -96,22 +100,11 @@ async def get_player_info( }, ) async def move_player( - uuid: str, direction: Direction, response: Response, engine: GameEngine = Depends(get_game_engine), + player: Player = Depends(get_player), ) -> MovePlayerResponseDto: - player = engine.players.find(uuid) - if player is None: - raise HTTPException( - status_code=status.HTTP_404_NOT_FOUND, detail="Player not found" - ) - if not player.active: - raise HTTPException( - status_code=status.HTTP_404_NOT_FOUND, - detail="Player kicked out due to inactivity", - ) - try: move_result = await engine.move_player(player, direction) except PositionOutOfBounds: