"""add offsite mail worker state""" from alembic import op revision = "20260910_offsite_worker" down_revision = "20260910_offsite_fund" branch_labels = None depends_on = None def upgrade() -> None: op.execute( """ CREATE TABLE offsite_mail_cursor ( id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT, mailbox VARCHAR(255) NOT NULL, folder VARCHAR(64) NOT NULL DEFAULT 'INBOX', last_uid VARCHAR(64) NOT NULL DEFAULT '0', status VARCHAR(32) NOT NULL DEFAULT 'idle', retry_count INT UNSIGNED NOT NULL DEFAULT 0, blocked_uid VARCHAR(64) NULL, blocked_message_id VARCHAR(255) NULL, last_error VARCHAR(500) NULL, next_retry_at DATETIME(6) NULL, lease_id VARCHAR(64) NULL, lease_until DATETIME(6) NULL, created_at DATETIME(6) NOT NULL, updated_at DATETIME(6) NOT NULL, PRIMARY KEY (id), UNIQUE KEY uk_offsite_mail_cursor_scope (mailbox, folder), KEY idx_offsite_mail_cursor_retry (status, next_retry_at), KEY idx_offsite_mail_cursor_lease (lease_until) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci """ ) op.execute( """ ALTER TABLE offsite_fund_mail ADD COLUMN retry_count INT UNSIGNED NOT NULL DEFAULT 0, ADD COLUMN last_error VARCHAR(500) NULL, ADD COLUMN next_retry_at DATETIME(6) NULL, ADD COLUMN last_attempt_at DATETIME(6) NULL """ ) op.execute( """ ALTER TABLE offsite_notification ADD COLUMN updated_at DATETIME(6) NULL """ ) def downgrade() -> None: raise RuntimeError("场外运营业务数据禁止自动删除,请使用前向兼容迁移")