- Fork elmeg-demo codebase for multi-band support - Add data importer infrastructure with base class - Create band-specific importers: - phish.py: Phish.net API v5 - grateful_dead.py: Grateful Stats API - setlistfm.py: Dead & Company, Billy Strings (Setlist.fm) - Add spec-kit configuration for Gemini - Update README with supported bands and architecture
32 lines
1 KiB
Python
32 lines
1 KiB
Python
from typing import List
|
|
from fastapi import APIRouter, Depends, HTTPException
|
|
from sqlmodel import Session, select
|
|
from database import get_session
|
|
from models import User, UserBadge, Badge
|
|
from schemas import UserBadgeRead
|
|
from auth import get_current_user
|
|
from services.stats import check_and_award_badges
|
|
|
|
router = APIRouter(prefix="/badges", tags=["badges"])
|
|
|
|
@router.get("/me", response_model=List[UserBadgeRead])
|
|
def read_my_badges(
|
|
session: Session = Depends(get_session),
|
|
current_user: User = Depends(get_current_user)
|
|
):
|
|
# Trigger a check (lazy evaluation of badges)
|
|
check_and_award_badges(session, current_user.id)
|
|
|
|
# Refresh user to get new badges
|
|
session.refresh(current_user)
|
|
return current_user.badges
|
|
|
|
@router.get("/{user_id}", response_model=List[UserBadgeRead])
|
|
def read_user_badges(
|
|
user_id: int,
|
|
session: Session = Depends(get_session)
|
|
):
|
|
user = session.get(User, user_id)
|
|
if not user:
|
|
raise HTTPException(status_code=404, detail="User not found")
|
|
return user.badges
|