dotb_ai-platform/alembic/versions/0007_outbox_delivery_state.py
2026-09-14 09:57:12 +07:00

88 lines
2.6 KiB
Python

"""Add outbox delivery state, retry and lease tracking.
Revision ID: 0007_outbox_delivery_state
Revises: 0006_reevaluate_child_lineage
Create Date: 2026-08-28
"""
import sqlalchemy as sa
from alembic import op
revision: str = "0007_outbox_delivery_state"
down_revision: str | None = "0006_reevaluate_child_lineage"
branch_labels: str | None = None
depends_on: str | None = None
def upgrade() -> None:
op.add_column(
"outbox_events",
sa.Column(
"delivery_status",
sa.String(length=32),
nullable=False,
server_default="pending",
),
)
op.add_column(
"outbox_events",
sa.Column(
"attempt_count",
sa.Integer(),
nullable=False,
server_default="0",
),
)
op.add_column(
"outbox_events",
sa.Column("next_attempt_at", sa.DateTime(timezone=True), nullable=True),
)
op.add_column(
"outbox_events",
sa.Column("last_attempt_at", sa.DateTime(timezone=True), nullable=True),
)
op.add_column(
"outbox_events",
sa.Column("delivered_at", sa.DateTime(timezone=True), nullable=True),
)
op.add_column(
"outbox_events",
sa.Column("lease_expires_at", sa.DateTime(timezone=True), nullable=True),
)
op.add_column(
"outbox_events",
sa.Column("claim_token", sa.String(length=36), nullable=True),
)
op.add_column(
"outbox_events",
sa.Column("last_error_code", sa.String(length=64), nullable=True),
)
op.add_column(
"outbox_events",
sa.Column("last_error_detail", sa.String(length=2000), nullable=True),
)
op.add_column(
"outbox_events",
sa.Column("last_http_status", sa.Integer(), nullable=True),
)
op.create_index(
"ix_outbox_events_delivery_claim",
"outbox_events",
["delivery_status", "next_attempt_at"],
)
def downgrade() -> None:
op.drop_index("ix_outbox_events_delivery_claim", table_name="outbox_events")
op.drop_column("outbox_events", "last_http_status")
op.drop_column("outbox_events", "last_error_detail")
op.drop_column("outbox_events", "last_error_code")
op.drop_column("outbox_events", "lease_expires_at")
op.drop_column("outbox_events", "claim_token")
op.drop_column("outbox_events", "delivered_at")
op.drop_column("outbox_events", "last_attempt_at")
op.drop_column("outbox_events", "next_attempt_at")
op.drop_column("outbox_events", "attempt_count")
op.drop_column("outbox_events", "delivery_status")