101 行
4.0 KiB
Python
101 行
4.0 KiB
Python
from __future__ import annotations
|
|
from sqlalchemy import Column, Integer, String, Text, DateTime, ForeignKey, JSON, Enum
|
|
from sqlalchemy.orm import relationship
|
|
from sqlalchemy.sql import func
|
|
|
|
from app.database import Base
|
|
|
|
|
|
class VersionConfig(Base):
|
|
__tablename__ = "version_config"
|
|
|
|
id = Column(Integer, primary_key=True, autoincrement=True)
|
|
stats_iterations = Column(Integer)
|
|
stats_years = Column(Integer)
|
|
stats_guests = Column(String(50))
|
|
quote_text = Column(Text)
|
|
quote_author = Column(String(200))
|
|
updated_at = Column(DateTime, server_default=func.now(), onupdate=func.now())
|
|
|
|
upgrades = relationship("VersionUpgrade", back_populates="config", cascade="all, delete-orphan", order_by="VersionUpgrade.sort_order")
|
|
highlights = relationship("VersionHighlight", back_populates="config", cascade="all, delete-orphan", order_by="VersionHighlight.sort_order")
|
|
compare = relationship("VersionCompare", back_populates="config", uselist=False, cascade="all, delete-orphan")
|
|
timeline = relationship("VersionTimeline", back_populates="config", cascade="all, delete-orphan", order_by="VersionTimeline.sort_order")
|
|
philosophy = relationship("VersionPhilosophy", back_populates="config", cascade="all, delete-orphan", order_by="VersionPhilosophy.sort_order")
|
|
|
|
|
|
class VersionUpgrade(Base):
|
|
__tablename__ = "version_upgrades"
|
|
|
|
id = Column(Integer, primary_key=True, autoincrement=True)
|
|
config_id = Column(Integer, ForeignKey("version_config.id", ondelete="CASCADE"), nullable=False)
|
|
tag = Column(String(50))
|
|
name = Column(String(200))
|
|
description = Column(Text)
|
|
reason = Column(Text)
|
|
sort_order = Column(Integer, default=0)
|
|
|
|
config = relationship("VersionConfig", back_populates="upgrades")
|
|
|
|
|
|
class VersionHighlight(Base):
|
|
__tablename__ = "version_highlights"
|
|
|
|
id = Column(Integer, primary_key=True, autoincrement=True)
|
|
config_id = Column(Integer, ForeignKey("version_config.id", ondelete="CASCADE"), nullable=False)
|
|
label = Column(String(50))
|
|
text = Column(Text)
|
|
sort_order = Column(Integer, default=0)
|
|
|
|
config = relationship("VersionConfig", back_populates="highlights")
|
|
|
|
|
|
class VersionCompare(Base):
|
|
__tablename__ = "version_compare"
|
|
|
|
id = Column(Integer, primary_key=True, autoincrement=True)
|
|
config_id = Column(Integer, ForeignKey("version_config.id", ondelete="CASCADE"), nullable=False)
|
|
headers = Column(JSON)
|
|
rows = Column(JSON)
|
|
|
|
config = relationship("VersionConfig", back_populates="compare")
|
|
|
|
|
|
class VersionTimeline(Base):
|
|
__tablename__ = "version_timeline"
|
|
|
|
id = Column(Integer, primary_key=True, autoincrement=True)
|
|
config_id = Column(Integer, ForeignKey("version_config.id", ondelete="CASCADE"), nullable=False)
|
|
version = Column(String(20), nullable=False)
|
|
date = Column(String(20))
|
|
title = Column(String(200))
|
|
reason = Column(Text)
|
|
sort_order = Column(Integer, default=0)
|
|
|
|
config = relationship("VersionConfig", back_populates="timeline")
|
|
changes = relationship("VersionTimelineChange", back_populates="timeline", cascade="all, delete-orphan", order_by="VersionTimelineChange.sort_order")
|
|
|
|
|
|
class VersionTimelineChange(Base):
|
|
__tablename__ = "version_timeline_changes"
|
|
|
|
id = Column(Integer, primary_key=True, autoincrement=True)
|
|
timeline_id = Column(Integer, ForeignKey("version_timeline.id", ondelete="CASCADE"), nullable=False)
|
|
type = Column(Enum("add", "update", "remove"), nullable=False)
|
|
text = Column(Text, nullable=False)
|
|
sort_order = Column(Integer, default=0)
|
|
|
|
timeline = relationship("VersionTimeline", back_populates="changes")
|
|
|
|
|
|
class VersionPhilosophy(Base):
|
|
__tablename__ = "version_philosophy"
|
|
|
|
id = Column(Integer, primary_key=True, autoincrement=True)
|
|
config_id = Column(Integer, ForeignKey("version_config.id", ondelete="CASCADE"), nullable=False)
|
|
label = Column(String(50))
|
|
text = Column(Text)
|
|
sort_order = Column(Integer, default=0)
|
|
|
|
config = relationship("VersionConfig", back_populates="philosophy")
|