Files
video-gen/video-gen-api/alembic/versions/20260813_银行账户与定时任务.py
T
2026-08-13 16:20:55 +08:00

76 lines
3.9 KiB
Python

"""银行账户与定时任务
Revision ID: 20260813_bank_account_scheduled_task
Revises: 20260813_bank_api_log
Create Date: 2026-08-13 16:00:00.000000
"""
from alembic import op
import sqlalchemy as sa
# revision identifiers, used by Alembic.
revision = '20260813_bank_account_scheduled_task'
down_revision = '20260813_bank_api_log'
branch_labels = None
depends_on = None
def upgrade():
# 创建银行账户表
op.create_table(
'bank_accounts',
sa.Column('id', sa.String(32), primary_key=True),
sa.Column('account_name', sa.String(128), nullable=False, comment='账户名称'),
sa.Column('bank_name', sa.String(128), nullable=False, comment='开户银行'),
sa.Column('account_no', sa.String(64), unique=True, nullable=False, comment='银行账号'),
sa.Column('is_active', sa.Boolean, default=True, comment='是否启用'),
sa.Column('is_default', sa.Boolean, default=False, comment='是否默认账户'),
sa.Column('description', sa.String(256), nullable=True, comment='备注'),
sa.Column('created_at', sa.DateTime(timezone=True), server_default=sa.func.now(), comment='创建时间'),
sa.Column('updated_at', sa.DateTime(timezone=True), server_default=sa.func.now(), onupdate=sa.func.now(), comment='更新时间'),
)
# 创建定时任务表
op.create_table(
'scheduled_tasks',
sa.Column('id', sa.String(32), primary_key=True),
sa.Column('name', sa.String(128), nullable=False, comment='任务名称'),
sa.Column('task_type', sa.String(32), nullable=False, comment='类型: external_api / internal_method'),
sa.Column('schedule', sa.String(128), nullable=False, comment='Cron 表达式或间隔秒数'),
sa.Column('config', sa.Text, nullable=True, comment='任务配置 JSON'),
sa.Column('is_active', sa.Boolean, default=True, comment='是否启用'),
sa.Column('last_run_at', sa.String(64), nullable=True, comment='最后执行时间 ISO'),
sa.Column('last_status', sa.String(16), nullable=True, comment='最后执行状态'),
sa.Column('last_error', sa.Text, nullable=True, comment='最后执行错误信息'),
sa.Column('created_by', sa.String(32), nullable=True, comment='创建者管理员 ID'),
sa.Column('created_at', sa.DateTime(timezone=True), server_default=sa.func.now(), comment='创建时间'),
sa.Column('updated_at', sa.DateTime(timezone=True), server_default=sa.func.now(), onupdate=sa.func.now(), comment='更新时间'),
)
# 删除旧的银行接口请求记录表(日志改为文件存储)
op.drop_index('ix_bank_api_logs_created_at', table_name='bank_api_logs')
op.drop_index('ix_bank_api_logs_admin_id', table_name='bank_api_logs')
op.drop_table('bank_api_logs')
def downgrade():
# 恢复 bank_api_logs 表
op.create_table(
'bank_api_logs',
sa.Column('id', sa.String(32), primary_key=True),
sa.Column('request_type', sa.String(32), nullable=False, comment='请求类型'),
sa.Column('request_params', sa.Text, nullable=True, comment='请求参数 JSON'),
sa.Column('response_data', sa.Text, nullable=True, comment='响应数据 JSON'),
sa.Column('status_code', sa.Integer, nullable=True, comment='HTTP 状态码'),
sa.Column('is_success', sa.Boolean, default=True, comment='是否成功'),
sa.Column('error_msg', sa.Text, nullable=True, comment='错误信息'),
sa.Column('admin_id', sa.String(32), nullable=True, comment='操作管理员 ID'),
sa.Column('created_at', sa.DateTime(timezone=True), nullable=False),
sa.Column('updated_at', sa.DateTime(timezone=True), nullable=False),
)
op.create_index('ix_bank_api_logs_admin_id', 'bank_api_logs', ['admin_id'])
op.create_index('ix_bank_api_logs_created_at', 'bank_api_logs', ['created_at'])
# 删除新表
op.drop_table('scheduled_tasks')
op.drop_table('bank_accounts')