fediversion/backend/routers/nicknames.py
fullsizemalt b4cddf41ea feat: Initialize Fediversion multi-band platform
- 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
2025-12-28 12:39:28 -08:00

44 lines
1.5 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 PerformanceNickname, User, Performance
from schemas import PerformanceNicknameCreate, PerformanceNicknameRead
from auth import get_current_user
router = APIRouter(prefix="/nicknames", tags=["nicknames"])
@router.post("/", response_model=PerformanceNicknameRead)
def suggest_nickname(
nickname: PerformanceNicknameCreate,
session: Session = Depends(get_session),
current_user: User = Depends(get_current_user)
):
# Verify performance exists
perf = session.get(Performance, nickname.performance_id)
if not perf:
raise HTTPException(status_code=404, detail="Performance not found")
db_nickname = PerformanceNickname.model_validate(nickname)
db_nickname.suggested_by = current_user.id
db_nickname.status = "pending" # Default to pending
session.add(db_nickname)
session.commit()
session.refresh(db_nickname)
return db_nickname
@router.get("/performance/{performance_id}", response_model=List[PerformanceNicknameRead])
def read_performance_nicknames(
performance_id: int,
session: Session = Depends(get_session)
):
# Only show approved nicknames publicly
nicknames = session.exec(
select(PerformanceNickname)
.where(PerformanceNickname.performance_id == performance_id)
.where(PerformanceNickname.status == "approved")
).all()
return nicknames
# Moderator endpoints would go here (approve/reject)