Add multi-league foundation

This commit is contained in:
Christian Krakau-Louis
2026-05-22 20:47:28 +02:00
parent e032994628
commit 15e1dc227b
23 changed files with 775 additions and 205 deletions
+9 -2
View File
@@ -10,6 +10,7 @@ from datetime import datetime, timedelta
from ..db import SessionLocal
from ..models import Team, TeamMembership, QRCode, User
from ..league_context import get_active_leagues, resolve_selected_league
from ..templates_config import templates
router = APIRouter()
@@ -25,6 +26,7 @@ def get_db():
async def show_leaderboard(
request: Request,
timeframe: str = Query("all", regex="^(week|month|all)$"),
league_id: int = Query(None),
db: Session = Depends(get_db)
):
"""Show the leaderboard with team rankings."""
@@ -34,6 +36,9 @@ async def show_leaderboard(
user_id = request.session.get("user_id")
if user_id:
user = db.query(User).get(user_id)
selected_league = resolve_selected_league(db, league_id)
leagues = get_active_leagues(db)
# Define cutoff date based on timeframe
cutoff_date = None
@@ -56,7 +61,7 @@ async def show_leaderboard(
QRCode,
QRCode.redeemed_at_team == Team.id,
isouter=True
)
).filter(Team.league_id == selected_league.id)
# Apply time filter if needed
if cutoff_date:
@@ -64,7 +69,7 @@ async def show_leaderboard(
query = query.filter(QRCode.redeemed_at >= cutoff_date)
# Group and order
teams_ranking = query.group_by(Team.id).order_by(desc('total_points')).all()
teams_ranking = query.group_by(Team.id, Team.name).order_by(desc('total_points')).all()
# Add ranks
ranked_teams = []
@@ -88,6 +93,8 @@ async def show_leaderboard(
"top_teams": top_teams,
"timeframe": timeframe,
"time_label": time_label,
"leagues": leagues,
"selected_league": selected_league,
"user": user # Add user to the context
}
)