feat: Rebuild as Court Manager Dashboard v2
- Complete rewrite for single Court Manager user - Feature 1: Player Management (CRUD, ELO, skill level) - Feature 2: Court Reservation (timeline, override) - Feature 3: Match Event Builder (3-step wizard) - Step 1: Event setup with player selection + stage calculator - Step 2: Stage configurator (Open/Skill/RR/Tournament) - Step 3: Auto bracket generation - Feature 4: Live Court View (main dashboard, 2x2 grid) - Event Control: score entry, bracket advancement, court assignment - Screen view: TV display per court (/screen/:id) - Seed: 8 players, 4 courts, 1 completed + 1 active event - Routes: / players courts events events/new events/:id screen/:id
This commit is contained in:
52
backend/app/routers/players.py
Normal file
52
backend/app/routers/players.py
Normal file
@@ -0,0 +1,52 @@
|
||||
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}
|
||||
Reference in New Issue
Block a user