barker/barker/barker/models/product.py

37 lines
1.2 KiB
Python

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