"""asset manifest ingest jobs Revision ID: 0002_asset_ingest_jobs Revises: 0001_initial Create Date: 2026-06-14 """ from __future__ import annotations from collections.abc import Sequence import sqlalchemy as sa from alembic import op from sqlalchemy.dialects import postgresql revision: str = "0002_asset_ingest_jobs" down_revision: str | None = "0001_initial" branch_labels: str | Sequence[str] | None = None depends_on: str | Sequence[str] | None = None def upgrade() -> None: op.create_table( "asset_ingest_jobs", sa.Column("id", postgresql.UUID(as_uuid=True), primary_key=True), sa.Column( "document_id", postgresql.UUID(as_uuid=True), sa.ForeignKey("documents.id", ondelete="CASCADE"), nullable=False, ), sa.Column("asset_id", sa.Text, nullable=False), sa.Column("manifest_version", sa.String(32), nullable=False), sa.Column("sha256", sa.String(64), nullable=False), sa.Column("owner_module", sa.Text, nullable=False), sa.Column("owner_record_type", sa.Text, nullable=False), sa.Column("owner_record_id", sa.Text, nullable=False), sa.Column("status", sa.String(32), nullable=False, server_default="QUEUED"), sa.Column("idempotency_key", sa.Text, nullable=True), sa.Column("storage_bucket", sa.Text, nullable=False), sa.Column("storage_key", sa.Text, nullable=False), sa.Column("storage_version_id", sa.Text, nullable=True), sa.Column("manifest", postgresql.JSONB, nullable=False), sa.Column( "ingest_options", postgresql.JSONB, nullable=False, server_default=sa.text("'{}'::jsonb"), ), sa.Column("created_at", sa.DateTime(timezone=True), server_default=sa.func.now(), nullable=False), sa.Column("updated_at", sa.DateTime(timezone=True), server_default=sa.func.now(), nullable=False), sa.UniqueConstraint( "asset_id", "sha256", "manifest_version", name="uq_asset_ingest_identity", ), ) op.create_index("ix_asset_ingest_document", "asset_ingest_jobs", ["document_id"]) op.create_index("ix_asset_ingest_asset", "asset_ingest_jobs", ["asset_id"]) op.create_index( "ix_asset_ingest_owner", "asset_ingest_jobs", ["owner_module", "owner_record_type", "owner_record_id"], ) def downgrade() -> None: op.drop_index("ix_asset_ingest_owner", table_name="asset_ingest_jobs") op.drop_index("ix_asset_ingest_asset", table_name="asset_ingest_jobs") op.drop_index("ix_asset_ingest_document", table_name="asset_ingest_jobs") op.drop_table("asset_ingest_jobs")