"""admin extension — 管理后台数据库扩展迁移 新增 config_change_logs 表(配置变更日志)。 扩展 agents 表:新增 role(角色)和 skill_tags(技能标签)字段。 扩展 quick_reply_templates 表:新增 status(审核状态)、version(版本号)、 submitted_by(提交人)字段。 Revision ID: 006_admin_ext Revises: 005_reply_to_id Create Date: 2026-07-15 10:00:00.000000 """ from alembic import op import sqlalchemy as sa # revision identifiers, used by Alembic. revision = '006_admin_ext' down_revision = '005_reply_to_id' branch_labels = None depends_on = None def upgrade() -> None: """执行管理后台数据库扩展迁移。""" # 1. 创建 config_change_logs 表 op.create_table( 'config_change_logs', sa.Column('id', sa.String(36), primary_key=True), sa.Column('config_key', sa.String(128), nullable=False, comment='配置键'), sa.Column('old_value', sa.Text, nullable=False, server_default='', comment='变更前的值'), sa.Column('new_value', sa.Text, nullable=False, server_default='', comment='变更后的值'), sa.Column('changed_by', sa.String(36), nullable=False, comment='变更操作人 agent_id'), sa.Column('changed_at', sa.DateTime(timezone=True), nullable=False, server_default=sa.func.now(), comment='变更时间'), ) # 创建索引 op.create_index('idx_ccl_config_key', 'config_change_logs', ['config_key']) op.create_index('idx_ccl_changed_at', 'config_change_logs', ['changed_at']) # 2. 给 agents 表新增 role 字段 op.add_column( 'agents', sa.Column( 'role', sa.String(20), nullable=False, server_default='agent', comment='角色:admin=组长, agent=坐席', ) ) # 3. 给 agents 表新增 skill_tags 字段 op.add_column( 'agents', sa.Column( 'skill_tags', sa.JSON, nullable=False, server_default='[]', comment='技能标签列表(电脑/软件/外设/网络/安全/资产/其他)', ) ) # 4. 给 quick_reply_templates 表新增 status 字段 op.add_column( 'quick_reply_templates', sa.Column( 'status', sa.String(20), nullable=False, server_default='approved', comment='状态:draft/pending_review/approved/rejected', ) ) # 5. 给 quick_reply_templates 表新增 version 字段 op.add_column( 'quick_reply_templates', sa.Column( 'version', sa.Integer(), nullable=False, server_default='1', comment='版本号,每次审核通过后 +1', ) ) # 6. 给 quick_reply_templates 表新增 submitted_by 字段 op.add_column( 'quick_reply_templates', sa.Column( 'submitted_by', sa.String(36), nullable=True, comment='提交人 agent_id', ) ) def downgrade() -> None: """回滚管理后台数据库扩展迁移。""" # 删除 quick_reply_templates 新增字段 op.drop_column('quick_reply_templates', 'submitted_by') op.drop_column('quick_reply_templates', 'version') op.drop_column('quick_reply_templates', 'status') # 删除 agents 新增字段 op.drop_column('agents', 'skill_tags') op.drop_column('agents', 'role') # 删除 config_change_logs 表索引和表 op.drop_index('idx_ccl_changed_at', table_name='config_change_logs') op.drop_index('idx_ccl_config_key', table_name='config_change_logs') op.drop_table('config_change_logs')