from uuid import uuid4 from sqlalchemy import Column, DateTime, Float, ForeignKey, Integer, String, Text from sqlalchemy.orm import relationship from sqlalchemy.sql import func from app.core.database import Base class CartItem(Base): __tablename__ = "cart_items" id = Column(String(36), primary_key=True, default=lambda: str(uuid4())) user_id = Column(String(36), ForeignKey("users.id", ondelete="CASCADE"), nullable=False) product_id = Column(String(36), ForeignKey("products.id", ondelete="CASCADE"), nullable=False) quantity = Column(Integer, default=1, nullable=False) price_at_addition = Column(Float, nullable=False) # Price when added to cart custom_properties = Column(Text, nullable=True) # JSON string for custom product properties created_at = Column(DateTime(timezone=True), server_default=func.now()) updated_at = Column(DateTime(timezone=True), onupdate=func.now()) # Relationships user = relationship("User", back_populates="cart_items") product = relationship("Product", back_populates="cart_items") def __repr__(self): return f"" @property def subtotal(self): """Calculate the subtotal for this cart item""" return self.price_at_addition * self.quantity