from __future__ import annotations from sqlalchemy import Column, Integer, String, Text, DateTime, ForeignKey, JSON from sqlalchemy.orm import relationship from sqlalchemy.sql import func from app.database import Base class GuideConfig(Base): __tablename__ = "guide_config" id = Column(Integer, primary_key=True, autoincrement=True) page_intro = Column(Text) updated_at = Column(DateTime, server_default=func.now(), onupdate=func.now()) sections = relationship("GuideSection", back_populates="config", cascade="all, delete-orphan", order_by="GuideSection.sort_order") class GuideSection(Base): """Each section has unique nested structure, stored as JSON columns.""" __tablename__ = "guide_sections" id = Column(Integer, primary_key=True, autoincrement=True) config_id = Column(Integer, ForeignKey("guide_config.id", ondelete="CASCADE"), nullable=False) section_id = Column(String(50), unique=True, nullable=False) title = Column(String(200)) subtitle = Column(String(500)) icon = Column(String(10)) content = Column(Text) # Flexible JSON columns for varied section structures data = Column(JSON) sort_order = Column(Integer, default=0) config = relationship("GuideConfig", back_populates="sections")