from sqlalchemy.orm import Mapped, mapped_column from dmp.adapters.db import ReportingModel from dmp.audiences.types import FanDataListId from dmp.rosters.exceptions import FanDataListIdIsRequiredError class CrmSublistDbt(ReportingModel, kw_only=True): __tablename__ = "crm_sublist_id_dbt" id: Mapped[str] = mapped_column(primary_key=True) vendor_id: Mapped[int] = mapped_column(primary_key=True) subaccount_id: Mapped[int] = mapped_column(primary_key=True) global_participant_id: Mapped[str | None] custom_list_id: Mapped[str | None] name: Mapped[str] territory_name: Mapped[str | None] label_name: Mapped[str | None] @property def fandata_list_id(self) -> FanDataListId: if self.global_participant_id is not None: return FanDataListId.from_artist_id(self.global_participant_id) elif self.custom_list_id is not None: return FanDataListId.from_custom_list_id(self.custom_list_id) else: raise FanDataListIdIsRequiredError class CrmSublistFanDbt(ReportingModel, kw_only=True): __tablename__ = "crm_sublist_fan_dbt" fan_id: Mapped[str] = mapped_column(primary_key=True) sublist_id: Mapped[str] = mapped_column(primary_key=True) vendor_id: Mapped[int] = mapped_column(primary_key=True) subaccount_id: Mapped[int] = mapped_column(primary_key=True) global_participant_id: Mapped[str | None] custom_list_id: Mapped[str | None]