Files

117 lines
3.7 KiB
Python

"""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')