2025-06-04 22:37:35 +00:00

49 lines
1.5 KiB
Python

from enum import Enum as PyEnum
from sqlalchemy import Column, Enum, Float, ForeignKey, Integer, String, Text
from sqlalchemy.orm import relationship
from app.db.session import Base
from app.models.base import Base as BaseModel
class OrderStatus(str, PyEnum):
"""Order status enum."""
PENDING = "pending"
PAID = "paid"
SHIPPED = "shipped"
DELIVERED = "delivered"
CANCELLED = "cancelled"
class Order(Base, BaseModel):
"""Order model."""
total_amount = Column(Float, nullable=False)
status = Column(Enum(OrderStatus), default=OrderStatus.PENDING, nullable=False)
shipping_address = Column(Text, nullable=True)
tracking_number = Column(String(100), nullable=True)
payment_id = Column(String(100), nullable=True)
# Foreign keys
user_id = Column(String(36), ForeignKey("user.id"), nullable=False)
# Relationships
user = relationship("User", back_populates="orders")
items = relationship("OrderItem", back_populates="order", cascade="all, delete-orphan")
class OrderItem(Base, BaseModel):
"""Order item model."""
quantity = Column(Integer, nullable=False)
price = Column(Float, nullable=False) # Price at the time of purchase
# Foreign keys
order_id = Column(String(36), ForeignKey("order.id"), nullable=False)
product_id = Column(String(36), ForeignKey("product.id"), nullable=False)
# Relationships
order = relationship("Order", back_populates="items")
product = relationship("Product", back_populates="order_items")