"""Product Snowflake model.""" from datetime import date from typing import Optional from sqlalchemy import Enum from sqlalchemy.orm import Mapped, mapped_column from collaborator import config from collaborator.connectors import snowflake from collaborator.constants.product import DeletionStatus class Product(snowflake.BaseModel): """Product model.""" __tablename__ = "DIM_RELEASE" if config.ENVIRONMENT != config.TEST_ENVIRONMENT: __table_args__ = {"schema": config.SNOWFLAKE_SCHEMAS["facts"]} product_id: Mapped[int] = mapped_column(primary_key=True) upc: Mapped[str] = mapped_column("releaseid") display_upc: Mapped[Optional[str]] name: Mapped[Optional[str]] = mapped_column("releasename") vendor_id: Mapped[int] = mapped_column("labelid") subaccount_id: Mapped[Optional[int]] = mapped_column("subaccountid") release_status: Mapped[str] release_date: Mapped[Optional[date]] = mapped_column("releasedate") # Use enum values (e.g. "Y"), instead of SQLAlchemy default of names (e.g. "YES") deletions: Mapped[DeletionStatus] = mapped_column( Enum(DeletionStatus, values_callable=lambda x: [i.value for i in x]) )