import uuid from fastapi import APIRouter, Depends, HTTPException, status from sqlalchemy.ext.asyncio import AsyncSession from app.crud import crud_participant, crud_registration from app.database import get_db from app.dependencies import get_approved_user, get_organizer from app.models.user import User from app.schemas.participant import ParticipantListOut, ParticipantListPublish from app.schemas.registration import RegistrationWithUser router = APIRouter() @router.get("/championships/{champ_id}/participant-list", response_model=ParticipantListOut | None) async def get_participant_list( champ_id: uuid.UUID, _user: User = Depends(get_approved_user), db: AsyncSession = Depends(get_db), ): return await crud_participant.get_for_championship(db, champ_id) @router.post( "/championships/{champ_id}/participant-list/publish", response_model=ParticipantListOut, status_code=status.HTTP_201_CREATED, ) async def publish_participant_list( champ_id: uuid.UUID, data: ParticipantListPublish, current_user: User = Depends(get_organizer), db: AsyncSession = Depends(get_db), ): pl = await crud_participant.create_or_get(db, champ_id, current_user.id) if pl.is_published: raise HTTPException(status_code=409, detail="Participant list already published") pl = await crud_participant.publish(db, pl, data.notes) # TODO: send push notifications to accepted participants return pl @router.get( "/championships/{champ_id}/participant-list/registrations", response_model=list[RegistrationWithUser], ) async def list_accepted_registrations( champ_id: uuid.UUID, _user: User = Depends(get_approved_user), db: AsyncSession = Depends(get_db), ): regs = await crud_registration.list_for_championship(db, champ_id) return [r for r in regs if r.status == "accepted"]