Rose Ding
1047f973d5
fix: 按 review 意见重构数据库备份服务(安全性 + 架构 + 健壮性)
1. S3 凭证加密存储:使用 SecretEncryptor (AES-256-GCM) 加密 SecretAccessKey,
防止备份文件中泄露 S3 凭证,兼容旧的未加密数据
2. 修复 saveRecord 竞态条件:添加 recordsMu 互斥锁保护 records 的 load/save
3. 恢复操作增加服务端验证:handler 层要求重新输入管理员密码,通过 bcrypt
校验,前端弹出密码输入框
4. pg_dump/psql/S3 操作抽象为接口:定义 DBDumper 和 BackupObjectStore 接口,
实现放入 repository 层,遵循项目依赖注入架构规范
5. 改为流式处理避免大数据库 OOM:备份时 pg_dump stdout -> gzip -> io.Pipe ->
S3 upload;恢复时 S3 download -> gzip reader -> psql stdin,不再全量加载
6. loadRecords 区分"无数据"和"数据损坏"场景:JSON 解析失败返回明确错误
7. 添加 18 个核心逻辑单元测试:覆盖加密、并发、流式备份/恢复、错误处理等
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-14 17:48:21 +08:00
..
2026-02-28 20:38:35 +08:00
2026-03-09 21:53:46 +08:00
2026-03-01 14:25:16 +08:00
2026-02-28 20:38:35 +08:00
2026-03-12 21:24:01 +08:00
2026-03-04 15:22:46 +08:00
2026-03-01 00:42:21 +08:00
2026-02-12 14:20:14 +08:00
2026-03-12 21:24:01 +08:00
2026-03-07 15:06:13 +08:00
2026-02-11 01:23:21 +08:00
2026-02-28 20:18:14 +08:00
2026-02-28 20:18:14 +08:00
2026-03-14 17:48:21 +08:00
2026-02-28 20:38:35 +08:00
2026-03-11 16:46:58 +08:00
2026-02-28 15:01:20 +08:00
2026-03-11 16:46:58 +08:00
2026-03-11 16:46:58 +08:00
2026-03-11 16:57:18 +08:00
2026-02-28 15:01:20 +08:00
2026-02-28 15:05:54 +08:00
2026-02-10 11:42:39 +08:00
2026-02-24 20:04:05 +08:00
2026-03-07 17:02:19 +08:00
2026-03-04 15:22:46 +08:00
2026-03-04 13:45:49 +08:00
2026-02-23 12:45:37 +08:00
2026-02-23 12:45:37 +08:00
2026-03-12 21:24:01 +08:00
2026-03-10 11:29:31 +08:00
2026-02-12 14:20:14 +08:00
2026-01-14 23:56:45 +08:00
2026-02-07 12:31:10 +08:00
2026-02-12 16:27:29 +08:00
2026-02-12 16:27:29 +08:00
2026-03-04 13:45:49 +08:00
2026-02-12 16:25:44 +08:00
2026-02-12 16:27:29 +08:00
2026-02-28 15:01:20 +08:00
2026-01-10 13:23:03 +08:00
2026-02-05 18:59:30 +08:00
2026-02-05 18:59:30 +08:00
2026-03-01 21:29:31 +08:00
2026-03-01 00:42:21 +08:00
2026-03-08 06:59:53 +08:00
2026-02-07 19:46:42 +08:00
2026-03-10 11:20:10 +08:00
2026-03-11 16:46:58 +08:00
2026-03-11 16:46:58 +08:00
2026-03-10 11:21:11 +08:00
2026-02-23 12:45:37 +08:00
2026-02-28 15:01:20 +08:00
2026-03-04 13:51:27 +08:00
2026-03-04 13:51:27 +08:00
2026-03-04 13:45:49 +08:00
2026-03-04 14:07:17 +08:00