44 lines
1.5 KiB
Python
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)
|