Files
shveitechbot/db/models/orders.py
2026-02-15 15:04:50 +07:00

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")