"""processing_queue 테이블 ORM (비동기 가공 큐)""" from datetime import datetime from sqlalchemy import BigInteger, DateTime, Enum, ForeignKey, SmallInteger, Text, UniqueConstraint from sqlalchemy.orm import Mapped, mapped_column from core.database import Base class ProcessingQueue(Base): __tablename__ = "processing_queue" id: Mapped[int] = mapped_column(BigInteger, primary_key=True) document_id: Mapped[int] = mapped_column(BigInteger, ForeignKey("documents.id"), nullable=False) stage: Mapped[str] = mapped_column( Enum("extract", "classify", "embed", name="process_stage"), nullable=False ) status: Mapped[str] = mapped_column( Enum("pending", "processing", "completed", "failed", name="process_status"), default="pending" ) attempts: Mapped[int] = mapped_column(SmallInteger, default=0) max_attempts: Mapped[int] = mapped_column(SmallInteger, default=3) error_message: Mapped[str | None] = mapped_column(Text) created_at: Mapped[datetime] = mapped_column( DateTime(timezone=True), default=datetime.now ) started_at: Mapped[datetime | None] = mapped_column(DateTime(timezone=True)) completed_at: Mapped[datetime | None] = mapped_column(DateTime(timezone=True)) __table_args__ = ( UniqueConstraint("document_id", "stage", "status"), )