需求 2.5.1 要求记录用户管理操作,先落表结构: - operation_logs 表:冗余 username 保证账号删除后仍可追溯, user_id 外键 ON DELETE SET NULL,success 默认 '0' 与 login_logs 口径一致 - 截断常量(USERNAME/ERROR_MESSAGE/REQUEST_DATA)集中定义,供写入方引用 - 修复既有 V1 迁移与迁移模板的 downgrade:索引是外键唯一支撑索引, 先 drop_index 会报 errno 1553,改为只 drop_table - 同步 db/migration/V2 与 init-dev.sql,迁移版本号更新为 a45a8087831b Co-Authored-By: Claude Code <noreply@anthropic.com>
33 lines
1.8 KiB
SQL
33 lines
1.8 KiB
SQL
-- Running upgrade 6165691326d4 -> a45a8087831b
|
||
|
||
CREATE TABLE operation_logs (
|
||
id BIGINT UNSIGNED NOT NULL COMMENT '主键ID' AUTO_INCREMENT,
|
||
user_id BIGINT UNSIGNED COMMENT '操作人ID(账号删除后置空)',
|
||
username VARCHAR(64) NOT NULL COMMENT '操作人用户名(冗余存储便于追溯)',
|
||
module VARCHAR(64) NOT NULL COMMENT '所属模块,如 用户管理',
|
||
action VARCHAR(32) NOT NULL COMMENT '操作类型:新增/修改/删除/导出',
|
||
summary VARCHAR(255) NOT NULL COMMENT '操作摘要(中文,供人阅读)',
|
||
method VARCHAR(8) COMMENT 'HTTP 方法',
|
||
path VARCHAR(255) COMMENT '请求路径',
|
||
ip VARCHAR(45) COMMENT '客户端IP(45位兼容IPv6)',
|
||
user_agent VARCHAR(255) COMMENT '客户端User-Agent(截断存储)',
|
||
request_data TEXT COMMENT '请求参数(已脱敏)',
|
||
success TINYINT NOT NULL COMMENT '是否成功:1成功 0失败' DEFAULT '0',
|
||
error_message VARCHAR(500) COMMENT '失败原因(写入方须截断)',
|
||
duration_ms INTEGER COMMENT '处理耗时(毫秒)',
|
||
create_time DATETIME NOT NULL COMMENT '创建时间' DEFAULT CURRENT_TIMESTAMP,
|
||
CONSTRAINT pk_operation_logs PRIMARY KEY (id),
|
||
CONSTRAINT fk_operation_logs_user_id FOREIGN KEY(user_id) REFERENCES users (id) ON DELETE SET NULL
|
||
)CHARSET=utf8mb4 ENGINE=InnoDB COMMENT='操作日志表' COLLATE utf8mb4_general_ci;
|
||
|
||
CREATE INDEX idx_operation_logs_create_time ON operation_logs (create_time);
|
||
|
||
CREATE INDEX idx_operation_logs_module ON operation_logs (module);
|
||
|
||
CREATE INDEX idx_operation_logs_user_id ON operation_logs (user_id);
|
||
|
||
CREATE INDEX idx_operation_logs_username ON operation_logs (username);
|
||
|
||
UPDATE alembic_version SET version_num='a45a8087831b' WHERE alembic_version.version_num = '6165691326d4';
|
||
|