from fastapi import FastAPI, HTTPException from pydantic import BaseModel from calls import register_user, authenticate_user, add_friend, send_match_invite, accept_match_invite app = FastAPI() class RegisterRequest(BaseModel): email: str display_name: str password: str class LoginRequest(BaseModel): email: str password: str class FriendRequest(BaseModel): user_uid: int friend_uid: int class MatchInviteRequest(BaseModel): sender_uid: int receiver_uid: int class AcceptInviteRequest(BaseModel): match_id: int player2_uid: int @app.post("/register") def register(request: RegisterRequest): try: uid = register_user(request.email, request.display_name, request.password) return {"message": "User registered successfully", "uid": uid} except Exception as e: raise HTTPException(status_code=400, detail=str(e)) @app.post("/login") def login(request: LoginRequest): uid = authenticate_user(request.email, request.password) if uid: return {"message": "Login successful", "uid": uid} else: raise HTTPException(status_code=401, detail="Invalid credentials") @app.post("/add_friend") def add_friend_endpoint(request: FriendRequest): try: success = add_friend(request.user_uid, request.friend_uid) return {"message": "Friend added successfully"} if success else HTTPException(400, "Failed to add friend") except Exception as e: raise HTTPException(status_code=400, detail=str(e)) @app.post("/send_match_invite") def send_invite(request: MatchInviteRequest): try: match_id = send_match_invite(request.sender_uid, request.receiver_uid) return {"message": "Match invite sent successfully", "match_id": match_id} except Exception as e: raise HTTPException(status_code=400, detail=str(e)) @app.post("/accept_match_invite") def accept_invite(request: AcceptInviteRequest): try: success = accept_match_invite(request.match_id, request.player2_uid) return {"message": "Match invite accepted"} if success else HTTPException(400, "Failed to accept invite") except Exception as e: raise HTTPException(status_code=400, detail=str(e))