""" Merch MVP models - MerchProduct and Order for commerce. Job ID: MTAD-IMPL-2025-11-18-CL """ from sqlalchemy import Column, String, Text, Integer, Float, DateTime, ForeignKey from sqlalchemy.orm import relationship from sqlalchemy.sql import func from app.database import Base class MerchProduct(Base): """Merch Product - Store products.""" __tablename__ = "merch_products" id = Column(String(36), primary_key=True, index=True) name = Column(String(255), nullable=False, index=True) description = Column(Text, nullable=True) price = Column(Float, nullable=False) stock_count = Column(Integer, default=0) image_url = Column(String(500), nullable=True) created_at = Column(DateTime, server_default=func.now()) updated_at = Column(DateTime, server_default=func.now(), onupdate=func.now()) # Relationships order_items = relationship("OrderItem", back_populates="product", cascade="all, delete-orphan") class Order(Base): """Order - Purchase orders.""" __tablename__ = "orders" id = Column(String(36), primary_key=True, index=True) user_id = Column(String(36), ForeignKey("users.id"), index=True, nullable=False) total = Column(Float, nullable=False) status = Column(String(50), default="pending", index=True) # pending, completed, cancelled shipping_address = Column(String(500), nullable=True) # PII - Encrypted created_at = Column(DateTime, server_default=func.now(), index=True) updated_at = Column(DateTime, server_default=func.now(), onupdate=func.now()) # Relationships user = relationship("User", back_populates="orders") items = relationship("OrderItem", back_populates="order", cascade="all, delete-orphan") class OrderItem(Base): """Order Item - Individual items in an order.""" __tablename__ = "order_items" id = Column(String(36), primary_key=True, index=True) order_id = Column(String(36), ForeignKey("orders.id"), index=True, nullable=False) product_id = Column(String(36), ForeignKey("merch_products.id"), index=True, nullable=False) quantity = Column(Integer, default=1) price = Column(Float, nullable=False) created_at = Column(DateTime, server_default=func.now()) # Relationships order = relationship("Order", back_populates="items") product = relationship("MerchProduct", back_populates="order_items")