from app.models import EventEdition, MediaAsset from app.schemas import EditionTicketsPublic, EventEditionAdmin, EventEditionPublic, MediaAssetPublic def tickets_for_edition(edition: EventEdition) -> EditionTicketsPublic: return EditionTicketsPublic( bookmyshow=edition.bookmyshow_url, district=edition.district_url, instagram=edition.instagram_url, ) def edition_to_public(edition: EventEdition, include_unpublished_media: bool = False) -> EventEditionPublic: cover = None if edition.cover_image_path: from app.services.media import public_url_for_path, thumb_url_for_path cover = public_url_for_path(edition.cover_image_path) media: list[MediaAssetPublic] = [] for m in edition.media: if not include_unpublished_media and not m.is_published: continue from app.services.media import public_url_for_path, thumb_url_for_path media.append( MediaAssetPublic( id=m.id, url=public_url_for_path(m.file_path), thumb_url=thumb_url_for_path(m.file_path), caption=m.caption, sort_order=m.sort_order, ) ) return EventEditionPublic( id=edition.id, title=edition.title, slug=edition.slug, event_type=edition.event_type, city=edition.city, venue_name=edition.venue_name, event_date=edition.event_date, description=edition.description, is_featured=edition.is_featured, cover_image_url=cover, cover_thumb_url=thumb_url_for_path(edition.cover_image_path) if edition.cover_image_path else None, tickets=tickets_for_edition(edition), meta_description=edition.meta_description, media=media, ) def edition_to_admin(edition: EventEdition) -> EventEditionAdmin: base = edition_to_public(edition, include_unpublished_media=True) return EventEditionAdmin( **base.model_dump(), is_published=edition.is_published, sort_order=edition.sort_order, )