myrmidon / python /src /server /api_routes /game_api.py
tek Atrust
chore(deploy): build monolithic server for Hugging Face
d5ef46f
Raw
History Blame Contribute Delete
1.89 kB
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()
# Perform upsert to supabase
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