"""采集任务状态表 ingest_jobs Revision ID: 0019_ingest_jobs Revises: 0018_match_checks Create Date: 2026-09-22 """ from typing import Sequence, Union from alembic import op import sqlalchemy as sa revision: str = '0019_ingest_jobs' down_revision: Union[str, None] = '0018_match_checks' branch_labels: Union[str, Sequence[str], None] = None depends_on: Union[str, Sequence[str], None] = None def upgrade() -> None: op.create_table( 'ingest_jobs', sa.Column('id', sa.String(36), primary_key=True), sa.Column('task', sa.String(20), nullable=False), sa.Column('params', sa.JSON(), nullable=False, server_default='{}'), sa.Column('status', sa.String(20), nullable=False, server_default='pending'), sa.Column('result', sa.JSON(), nullable=True), sa.Column('error', sa.Text(), nullable=True), sa.Column('created_at', sa.DateTime(timezone=True), server_default=sa.func.now()), sa.Column('started_at', sa.DateTime(timezone=True), nullable=True), sa.Column('finished_at', sa.DateTime(timezone=True), nullable=True), ) op.create_index('ix_ingest_job_status_created', 'ingest_jobs', ['status', 'created_at']) op.create_check_constraint( 'ck_ingest_job_status', 'ingest_jobs', "status IN ('pending', 'running', 'success', 'failed')", ) def downgrade() -> None: op.drop_constraint('ck_ingest_job_status', 'ingest_jobs', type_='check') op.drop_index('ix_ingest_job_status_created', table_name='ingest_jobs') op.drop_table('ingest_jobs')