from sqlalchemy import Column, Integer, String, Boolean, Float, ForeignKey from sqlalchemy.orm import relationship from database import Base class Category(Base): __tablename__ = "categories" id = Column(Integer, primary_key=True, index=True) name = Column(String, nullable=False) color = Column(String, nullable=True) sort_order = Column(Integer, default=0) products = relationship("Product", back_populates="category") class Product(Base): __tablename__ = "products" id = Column(Integer, primary_key=True, index=True) name = Column(String, nullable=False) category_id = Column(Integer, ForeignKey("categories.id"), nullable=True) base_price = Column(Float, nullable=False) is_available = Column(Boolean, default=True, nullable=False) printer_zone_id = Column(Integer, ForeignKey("printers.id"), nullable=True) category = relationship("Category", back_populates="products") printer_zone = relationship("Printer", back_populates="products") options = relationship("ProductOption", back_populates="product", cascade="all, delete-orphan") ingredients = relationship("ProductIngredient", back_populates="product", cascade="all, delete-orphan") order_items = relationship("OrderItem", back_populates="product") class ProductOption(Base): __tablename__ = "product_options" id = Column(Integer, primary_key=True, index=True) product_id = Column(Integer, ForeignKey("products.id"), nullable=False) name = Column(String, nullable=False) extra_cost = Column(Float, default=0.0) product = relationship("Product", back_populates="options") class ProductIngredient(Base): __tablename__ = "product_ingredients" id = Column(Integer, primary_key=True, index=True) product_id = Column(Integer, ForeignKey("products.id"), nullable=False) name = Column(String, nullable=False) product = relationship("Product", back_populates="ingredients")