88from app .core .security import get_current_user # JWT-based dependency
99from typing import Optional
1010
11- router = APIRouter (
12- prefix = "/games" ,
13- tags = ["Games" ]
14- )
11+ router = APIRouter (prefix = "/games" , tags = ["Games" ])
12+
1513
1614# -----------------------------
1715# Create a new game
1816# -----------------------------
1917# -----------------------------
2018# Create a new game
2119# -----------------------------
22- @router .post ("/create_game" , response_model = GameResponse , status_code = status .HTTP_201_CREATED )
20+ @router .post (
21+ "/create_game" , response_model = GameResponse , status_code = status .HTTP_201_CREATED
22+ )
2323def create_game (
2424 payload : Optional [GameCreate ] = None , # if you want extra info later
2525 current_user : User = Depends (get_current_user ),
26- db : Session = Depends (get_db )
26+ db : Session = Depends (get_db ),
2727):
2828 """
2929 Create a new game for the current user. Player2 is optional and can join later.
@@ -32,11 +32,11 @@ def create_game(
3232 new_game = Game (
3333 game_id = uuid .uuid4 (),
3434 player1 = current_user .id ,
35- player2 = None , # nullable, will join later
36- board = [" " ] * 9 , # initialize empty board as JSON list
35+ player2 = None , # nullable, will join later
36+ board = [" " ] * 9 , # initialize empty board as JSON list
3737 current_turn = current_user .id ,
3838 winner = None ,
39- status = "in_progress"
39+ status = "in_progress" ,
4040 )
4141
4242 db .add (new_game )
@@ -50,14 +50,15 @@ def create_game(
5050# Make a move
5151# -----------------------------
5252@router .post ("/move" )
53- def make_move (payload : MoveRequest , current_user : User = Depends (get_current_user ), db : Session = Depends (get_db )):
53+ def make_move (
54+ payload : MoveRequest ,
55+ current_user : User = Depends (get_current_user ),
56+ db : Session = Depends (get_db ),
57+ ):
5458
5559 # Fetch the game and lock it for update
5660 game = (
57- db .query (Game )
58- .filter (Game .game_id == payload .game_id )
59- .with_for_update ()
60- .first ()
61+ db .query (Game ).filter (Game .game_id == payload .game_id ).with_for_update ().first ()
6162 )
6263
6364 if not game :
@@ -67,7 +68,7 @@ def make_move(payload: MoveRequest, current_user: User = Depends(get_current_use
6768 return {
6869 "message" : "Game already finished" ,
6970 "board" : game .board ,
70- "winner" : game .winner
71+ "winner" : game .winner ,
7172 }
7273
7374 if game .current_turn != current_user .id :
@@ -109,15 +110,19 @@ def make_move(payload: MoveRequest, current_user: User = Depends(get_current_use
109110 "message" : "Move applied" ,
110111 "board" : game .board ,
111112 "current_turn" : game .current_turn ,
112- "winner" : game .winner
113+ "winner" : game .winner ,
113114 }
114115
115116
116117# -----------------------------
117118# Get game state
118119# -----------------------------
119120@router .get ("/{game_id}" , response_model = GameResponse )
120- def get_game_state (game_id : uuid .UUID , current_user : User = Depends (get_current_user ), db : Session = Depends (get_db )):
121+ def get_game_state (
122+ game_id : uuid .UUID ,
123+ current_user : User = Depends (get_current_user ),
124+ db : Session = Depends (get_db ),
125+ ):
121126
122127 game = db .query (Game ).filter (Game .game_id == game_id ).first ()
123128
@@ -126,6 +131,8 @@ def get_game_state(game_id: uuid.UUID, current_user: User = Depends(get_current_
126131
127132 # Optional: restrict to players only
128133 if current_user .id not in [game .player1 , game .player2 ]:
129- raise HTTPException (status_code = status .HTTP_403_FORBIDDEN , detail = "Not a player in this game" )
134+ raise HTTPException (
135+ status_code = status .HTTP_403_FORBIDDEN , detail = "Not a player in this game"
136+ )
130137
131- return game
138+ return game
0 commit comments