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