"""Workflow run ORM model.""" from sqlalchemy import Enum, ForeignKey, Integer, String from sqlalchemy.orm import Mapped, mapped_column, relationship from app.domain.enums import OrderStatus, WorkflowStepName from app.infra.db.base import Base, TimestampMixin class WorkflowRunORM(TimestampMixin, Base): """Persisted workflow execution state.""" __tablename__ = "workflow_runs" id: Mapped[int] = mapped_column(Integer, primary_key=True, autoincrement=True) order_id: Mapped[int] = mapped_column(ForeignKey("orders.id"), nullable=False, index=True) workflow_id: Mapped[str] = mapped_column(String(255), nullable=False, unique=True) workflow_type: Mapped[str] = mapped_column(String(255), nullable=False) status: Mapped[OrderStatus] = mapped_column( Enum(OrderStatus, native_enum=False), nullable=False, default=OrderStatus.CREATED, ) current_step: Mapped[WorkflowStepName | None] = mapped_column( Enum(WorkflowStepName, native_enum=False), nullable=True, ) order = relationship("OrderORM", back_populates="workflow_runs") steps = relationship( "WorkflowStepORM", back_populates="workflow_run", lazy="selectin", order_by="WorkflowStepORM.started_at", )