117 lines
3.7 KiB
Python
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')
|