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-03-14 17:48:21 +08:00
2026-03-10 11:20:10 +08:00
2026-02-02 22:13:50 +08:00
2026-03-04 11:29:31 +08:00
2026-02-28 15:01:20 +08:00
2026-01-09 18:26:32 +08:00
2026-03-09 01:18:49 +08:00
2026-03-08 14:12:17 +08:00
2026-03-08 14:12:17 +08:00
2026-02-14 11:23:10 +08:00
2026-02-07 19:04:08 +08:00
2026-03-09 19:55:18 +08:00
2026-03-10 11:20:10 +08:00
2026-02-07 22:14:07 +08:00
2026-03-09 19:55:18 +08:00
2026-03-09 19:55:18 +08:00
2026-01-06 20:31:40 +08:00
2026-03-01 15:45:44 +08:00
2026-02-07 17:12:15 +08:00
2025-12-28 17:48:52 +08:00
2026-02-28 15:01:20 +08:00
2026-03-13 10:38:19 +08:00
2026-02-23 12:45:37 +08:00
2026-02-23 12:45:37 +08:00
2026-02-12 19:01:09 +08:00
2026-03-11 22:15:32 +08:00
2026-03-05 16:46:14 +08:00
2026-02-28 15:01:20 +08:00
2026-03-09 15:08:37 +08:00
2026-02-28 19:28:08 +08:00
2026-03-11 17:32:00 +08:00
2025-12-26 16:45:40 +08:00
2025-12-31 08:50:12 +08:00
2025-12-31 08:50:12 +08:00
2026-03-04 13:54:18 +08:00
2026-03-07 21:55:38 +08:00
2026-02-28 15:01:20 +08:00
2026-03-07 21:55:38 +08:00
2026-02-28 15:01:20 +08:00
2025-12-26 16:45:40 +08:00
2026-02-02 22:13:50 +08:00
2026-02-28 15:01:20 +08:00
2026-02-28 15:01:20 +08:00
2026-02-28 15:01:20 +08:00
2026-02-02 22:13:50 +08:00
2026-03-03 01:05:11 +08:00
2026-03-13 10:38:19 +08:00