# models.py from sqlalchemy import create_engine, Column, Integer, String, Float, DateTime, ForeignKey, Text from sqlalchemy.orm import declarative_base, relationship from datetime import datetime Base = declarative_base() class Bundle(Base): __tablename__ = 'bundles' id = Column(Integer, primary_key=True) machine_name = Column(String, unique=True) human_name = Column(String) current_version_id = Column(Integer, ForeignKey('bundle_versions.id')) current_version = relationship("BundleVersion", uselist=False, foreign_keys=[current_version_id], post_update=True) versions = relationship("BundleVersion", back_populates="bundle", foreign_keys=lambda: [BundleVersion.bundle_id]) sales_history = relationship("BundleSalesHistory", back_populates="bundle") items = relationship("BundleItem", back_populates="bundle") class BundleVersion(Base): __tablename__ = 'bundle_versions' id = Column(Integer, primary_key=True) bundle_id = Column(Integer, ForeignKey('bundles.id')) version_hash = Column(String) version_data = Column(Text) timestamp = Column(DateTime, default=datetime.utcnow) bundle = relationship("Bundle", back_populates="versions", foreign_keys=[bundle_id]) class BundleSalesHistory(Base): __tablename__ = 'bundle_sales_history' id = Column(Integer, primary_key=True) bundle_id = Column(Integer, ForeignKey('bundles.id')) bundles_sold = Column(Float) timestamp = Column(DateTime, default=datetime.utcnow) bundle = relationship("Bundle", back_populates="sales_history") class BundleItem(Base): __tablename__ = 'bundle_items' id = Column(Integer, primary_key=True) bundle_id = Column(Integer, ForeignKey('bundles.id')) title = Column(String) category = Column(String) details = Column(Text) bundle = relationship("Bundle", back_populates="items")