import uuid from datetime import datetime from sqlalchemy import String, Integer, Index, func, DateTime from sqlalchemy import Uuid from sqlalchemy.orm import Mapped, mapped_column from app.database import Base, JSONType class PlatformRuleVersion(Base): __tablename__ = "platform_rule_versions" id: Mapped[uuid.UUID] = mapped_column( Uuid(as_uuid=True), primary_key=True, default=uuid.uuid4, ) rule_id: Mapped[str] = mapped_column(String(100), nullable=False, index=True) platform: Mapped[str] = mapped_column(String(50), nullable=False) version: Mapped[int] = mapped_column(Integer, nullable=False) rule_data: Mapped[dict] = mapped_column(JSONType, nullable=False) change_summary: Mapped[str | None] = mapped_column(String(500), nullable=True) created_by: Mapped[str | None] = mapped_column(String(100), nullable=True) created_at: Mapped[datetime] = mapped_column(DateTime(timezone=True), server_default=func.now()) __table_args__ = ( Index("idx_rule_versions_rule_id", "rule_id"), Index("idx_rule_versions_platform", "platform"), )