38 lines
1.2 KiB
Python
38 lines
1.2 KiB
Python
import enum
|
|
from typing import List, Optional
|
|
from sqlalchemy import ForeignKey, BigInteger
|
|
from sqlalchemy.orm import Mapped, mapped_column, relationship
|
|
from sqlalchemy.dialects.postgresql import ENUM
|
|
from db.base import Base
|
|
from db.models.products import Product
|
|
|
|
|
|
class OrderStatus(enum.Enum):
|
|
CREATED = "CREATED"
|
|
PAID = "PAID"
|
|
IN_PROGRESS = "IN_PROGRESS"
|
|
CANCELLED = "CANCELLED"
|
|
DRAFT = "DRAFT"
|
|
|
|
|
|
class Order(Base):
|
|
__tablename__ = "orders"
|
|
|
|
id: Mapped[int] = mapped_column(primary_key=True, autoincrement=True)
|
|
customer: Mapped[Optional[int]] = mapped_column(BigInteger)
|
|
status: Mapped[OrderStatus] = mapped_column(ENUM(OrderStatus, name="order_status"))
|
|
|
|
items: Mapped[List["OrderItem"]] = relationship("OrderItem", back_populates="order")
|
|
|
|
|
|
class OrderItem(Base):
|
|
__tablename__ = "order_items"
|
|
|
|
id: Mapped[int] = mapped_column(primary_key=True, autoincrement=True)
|
|
order_id: Mapped[int] = mapped_column(ForeignKey("orders.id", ondelete="CASCADE"))
|
|
product_id: Mapped[int] = mapped_column(ForeignKey("products.id"))
|
|
quantity: Mapped[int] = mapped_column(default=1)
|
|
|
|
order: Mapped["Order"] = relationship("Order", back_populates="items")
|
|
product: Mapped["Product"] = relationship("Product")
|