from datetime import datetime from fansifter_common.adapters.db.types import ChoiceType from fansifter_common.utils import timezone from fansifter_common.utils.uuid import uuid_string from sqlalchemy.orm import Mapped, mapped_column from dmp.adapters.db import ReportingModel from dmp.rosters.enums import ArtistRosterStatus class CustomList(ReportingModel, kw_only=True): __tablename__ = "custom_list" id: Mapped[str] = mapped_column(primary_key=True) name: Mapped[str] vendor_id: Mapped[int] = mapped_column(primary_key=True) subaccount_id: Mapped[int] = mapped_column(primary_key=True) virtual_participant_id: Mapped[str | None] = mapped_column(default=None) class ArtistRosterMainRep(ReportingModel, kw_only=True): __tablename__ = "artist_roster_main_rep" id: Mapped[str] = mapped_column(primary_key=True, default_factory=uuid_string) global_participant_id: Mapped[str] vendor_id: Mapped[int] subaccount_id: Mapped[int] status: Mapped[ArtistRosterStatus] = mapped_column( ChoiceType(ArtistRosterStatus), default=ArtistRosterStatus.ACTIVE ) created_at: Mapped[datetime] = mapped_column(default_factory=timezone.now) class ArtistRosterLocalRep(ReportingModel, kw_only=True): __tablename__ = "artist_roster_local_rep" id: Mapped[str] = mapped_column(primary_key=True, default_factory=uuid_string) global_participant_id: Mapped[str] vendor_id: Mapped[int] subaccount_id: Mapped[int] country_code: Mapped[str] created_at: Mapped[datetime] = mapped_column(default_factory=timezone.now) class GlobalParticipantAccountDbt(ReportingModel, kw_only=True): __tablename__ = "global_participant_account_dbt" id: Mapped[str] = mapped_column(primary_key=True) spotify_id: Mapped[str | None] = mapped_column(default=None) vendor_id: Mapped[int] = mapped_column(primary_key=True) subaccount_id: Mapped[int] = mapped_column(primary_key=True)