| from typing import Any |
|
|
| from fastapi import APIRouter, Depends, HTTPException, status |
| from pydantic import BaseModel |
|
|
| from ..auth.dependencies import get_current_user |
| from ..utils import get_supabase_client |
|
|
| router = APIRouter(prefix="/game", tags=["game"]) |
|
|
| class GameSaveRequest(BaseModel): |
| save_data: dict[str, Any] |
|
|
| @router.post("/save") |
| async def save_game(request: GameSaveRequest, current_user: dict = Depends(get_current_user)): |
| user_id = str(current_user.get("id")) |
| supabase = get_supabase_client() |
|
|
| |
| try: |
| res = supabase.table("user_game_saves").upsert({ |
| "user_id": user_id, |
| "save_data": request.save_data, |
| "updated_at": "now()" |
| }).execute() |
|
|
| if not res.data: |
| raise HTTPException( |
| status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, |
| detail="Failed to save game state." |
| ) |
|
|
| return {"status": "success", "message": "Game state saved successfully."} |
| except Exception as e: |
| raise HTTPException( |
| status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, |
| detail=f"Database error: {str(e)}" |
| ) from e |
|
|
| @router.get("/load") |
| async def load_game(current_user: dict = Depends(get_current_user)): |
| user_id = str(current_user.get("id")) |
| supabase = get_supabase_client() |
|
|
| try: |
| res = supabase.table("user_game_saves").select("save_data").eq("user_id", user_id).execute() |
|
|
| if not res.data: |
| return {"status": "not_found", "message": "No save game found for this user.", "save_data": None} |
|
|
| return {"status": "success", "save_data": res.data[0]["save_data"]} |
| except Exception as e: |
| raise HTTPException( |
| status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, |
| detail=f"Database error: {str(e)}" |
| ) from e |
|
|