from fastapi import APIRouter, Depends, HTTPException from sqlalchemy.orm import Session from typing import List from ..database import get_db from ..models import Player from ..schemas import PlayerCreate, PlayerUpdate, PlayerOut router = APIRouter(prefix="/api/players", tags=["players"]) @router.get("/", response_model=List[PlayerOut]) def list_players(db: Session = Depends(get_db)): return db.query(Player).order_by(Player.elo.desc()).all() @router.post("/", response_model=PlayerOut) def create_player(data: PlayerCreate, db: Session = Depends(get_db)): player = Player(**data.model_dump()) db.add(player) db.commit() db.refresh(player) return player @router.get("/{player_id}", response_model=PlayerOut) def get_player(player_id: int, db: Session = Depends(get_db)): player = db.query(Player).filter(Player.id == player_id).first() if not player: raise HTTPException(status_code=404, detail="Player not found") return player @router.put("/{player_id}", response_model=PlayerOut) def update_player(player_id: int, data: PlayerUpdate, db: Session = Depends(get_db)): player = db.query(Player).filter(Player.id == player_id).first() if not player: raise HTTPException(status_code=404, detail="Player not found") for k, v in data.model_dump(exclude_none=True).items(): setattr(player, k, v) db.commit() db.refresh(player) return player @router.delete("/{player_id}") def delete_player(player_id: int, db: Session = Depends(get_db)): player = db.query(Player).filter(Player.id == player_id).first() if not player: raise HTTPException(status_code=404, detail="Player not found") db.delete(player) db.commit() return {"ok": True}