import uuid from datetime import UTC, datetime from sqlalchemy import select from sqlalchemy.ext.asyncio import AsyncSession from app.models.participant import ParticipantList async def get_for_championship(db: AsyncSession, championship_id: str | uuid.UUID) -> ParticipantList | None: cid = championship_id if isinstance(championship_id, uuid.UUID) else uuid.UUID(str(championship_id)) result = await db.execute(select(ParticipantList).where(ParticipantList.championship_id == cid)) return result.scalar_one_or_none() async def create_or_get(db: AsyncSession, championship_id: uuid.UUID, published_by: uuid.UUID) -> ParticipantList: existing = await get_for_championship(db, championship_id) if existing: return existing pl = ParticipantList(championship_id=championship_id, published_by=published_by) db.add(pl) await db.commit() await db.refresh(pl) return pl async def publish(db: AsyncSession, pl: ParticipantList, notes: str | None = None) -> ParticipantList: pl.is_published = True pl.published_at = datetime.now(UTC) if notes is not None: pl.notes = notes await db.commit() await db.refresh(pl) return pl