import uuid from sqlalchemy import select from sqlalchemy.ext.asyncio import AsyncSession from app.models.championship import Championship def _uuid(v: str | uuid.UUID) -> uuid.UUID: return v if isinstance(v, uuid.UUID) else uuid.UUID(str(v)) async def get(db: AsyncSession, championship_id: str | uuid.UUID) -> Championship | None: result = await db.execute( select(Championship).where(Championship.id == _uuid(championship_id)) ) return result.scalar_one_or_none() async def get_by_instagram_id( db: AsyncSession, instagram_media_id: str ) -> Championship | None: result = await db.execute( select(Championship).where( Championship.instagram_media_id == instagram_media_id ) ) return result.scalar_one_or_none() async def list_all( db: AsyncSession, status: str | None = None, skip: int = 0, limit: int = 20, ) -> list[Championship]: q = select(Championship) if status: q = q.where(Championship.status == status) q = q.order_by(Championship.event_date.asc().nullslast()).offset(skip).limit(limit) result = await db.execute(q) return list(result.scalars().all()) async def create(db: AsyncSession, **kwargs) -> Championship: champ = Championship(**kwargs) db.add(champ) await db.commit() await db.refresh(champ) return champ async def update(db: AsyncSession, champ: Championship, **kwargs) -> Championship: for key, value in kwargs.items(): if value is not None: setattr(champ, key, value) await db.commit() await db.refresh(champ) return champ async def delete(db: AsyncSession, champ: Championship) -> None: await db.delete(champ) await db.commit()