import uuid from typing import TYPE_CHECKING, List from barker.models.modifier_category_product import ModifierCategoryProduct from sqlalchemy import text from sqlalchemy.dialects.postgresql import UUID from sqlalchemy.orm import Mapped, mapped_column, relationship from ..db.base_class import reg if TYPE_CHECKING: from .inventory import Inventory from .modifier_category import ModifierCategory from .product_version import ProductVersion @reg.mapped_as_dataclass(unsafe_hash=True) class Product: __tablename__ = "products" id: Mapped[uuid.UUID] = mapped_column( "id", UUID(as_uuid=True), primary_key=True, server_default=text("gen_random_uuid()"), insert_default=uuid.uuid4 ) versions: Mapped[List["ProductVersion"]] = relationship(back_populates="product") inventories: Mapped[List["Inventory"]] = relationship(back_populates="product") modifier_categories: Mapped[List["ModifierCategory"]] = relationship( "ModifierCategory", secondary=ModifierCategoryProduct.__table__, # type: ignore[attr-defined] order_by="ModifierCategory.sort_order", back_populates="products", ) def __init__(self, id_=None, version_id=None): self.id = id_ self.version_id = version_id