from datetime import datetime from sqlalchemy import DateTime, ForeignKey, Integer, String, Text, UniqueConstraint from sqlalchemy.orm import Mapped, mapped_column, relationship from app.db.base import Base from app.models.document_line_item_version_item import DocumentLineItemVersionItem class DocumentLineItemSetVersion(Base): __tablename__ = "document_line_item_set_versions" __table_args__ = ( UniqueConstraint("document_id", "version_number", name="uq_document_line_item_set_versions_doc_ver"), ) id: Mapped[int] = mapped_column(primary_key=True, index=True) document_id: Mapped[int] = mapped_column(ForeignKey("documents.id"), nullable=False, index=True) version_number: Mapped[int] = mapped_column(Integer, nullable=False) schema_type: Mapped[str | None] = mapped_column(String(50), nullable=True) created_by: Mapped[str | None] = mapped_column(String(100), nullable=True) notes: Mapped[str | None] = mapped_column(Text, nullable=True) created_at: Mapped[datetime] = mapped_column(DateTime, default=datetime.utcnow, nullable=False) document: Mapped["Document"] = relationship(back_populates="line_item_set_versions") items: Mapped[list["DocumentLineItemVersionItem"]] = relationship( back_populates="set_version", cascade="all, delete-orphan", order_by="DocumentLineItemVersionItem.line_number", )