from datetime import datetime from sqlalchemy import DateTime, ForeignKey, Integer, String, UniqueConstraint from sqlalchemy.orm import Mapped, mapped_column, relationship from app.db.base import Base from app.models.document_line_item import DocumentLineItem class DocumentLineItemSet(Base): __tablename__ = "document_line_item_sets" __table_args__ = ( UniqueConstraint("document_id", name="uq_document_line_item_sets_document_id"), ) id: Mapped[int] = mapped_column(primary_key=True, index=True) document_id: Mapped[int] = mapped_column(ForeignKey("documents.id"), nullable=False, index=True) schema_type: Mapped[str | None] = mapped_column(String(50), nullable=True) created_at: Mapped[datetime] = mapped_column(DateTime, default=datetime.utcnow, nullable=False) updated_at: Mapped[datetime] = mapped_column(DateTime, default=datetime.utcnow, onupdate=datetime.utcnow, nullable=False) document: Mapped["Document"] = relationship(back_populates="line_item_set") items: Mapped[list["DocumentLineItem"]] = relationship( back_populates="line_item_set", cascade="all, delete-orphan", order_by="DocumentLineItem.line_number", )