37 lines
1.3 KiB
Python
37 lines
1.3 KiB
Python
"""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",
|
|
)
|
|
|