Skip to content

perf(media): 缩略图优化、测试覆盖与手机地图修复 - #175

Merged
LC044 merged 5 commits into
masterfrom
nightly/test-watch-20260904
Sep 4, 2026
Merged

perf(media): 缩略图优化、测试覆盖与手机地图修复#175
LC044 merged 5 commits into
masterfrom
nightly/test-watch-20260904

Conversation

@LC044

@LC044 LC044 commented Sep 4, 2026

Copy link
Copy Markdown
Owner

描述

本 PR 包含两组改动:

1. 缩略图性能优化(#173

/api/medias/{photo_id}/thumbnail 原先每次请求都要打开 DB 会话查 Photo 记录来定位用户存储根。虚拟列表快速滚动时会瞬间产生上百个短生命周期请求,DB 开销全部花在拿 owner 存储路径上。 后端: - 新增 owner 前缀确定性路由 /api/medias/{owner_id}/{photo_id}/thumbnail:全程不打开 DB 会话,仅靠文件系统操作解析路径,保留路径穿越校验,返回 Cache-Control: immutable - API 启动时(lifespan)通过 warm_storage_base_cache() 预热全部用户的 storage base 到内存 - 旧路由保留做向后兼容(老客户端、已保存头像、Agent 历史消息) - 新增 app/service/media_urls.py 统一 URL 构造器,年度报告 / 相似照片 / 主动回忆 / Agent 提示词全部切换 - Photo 响应 schema 新增 owner_id 字段 前端: - 新增 src/utils/mediaUrl.tsthumbnailUrl / thumbnailPath / thumbnailToFileUrl / photoIdFromMediaUrl),全站 20+ 处手拼 URL 统一收口;owner 优先取数据 owner_id,回退 localStorage 当前用户 - PhotoGallery / FlatPhotoGallery 移除「fetch 探测 + img 二次请求」双重加载,直接赋值 <img>(原探测不消费 body,导致每张图请求两次) - AgentChat 的 URL 解析兼容新旧两种格式 CLI: - trailsnap medias get 同步使用 owner 前缀端点 ### 2. 夜间测试覆盖补充(#174) 为覆盖率扫描发现的未触达分支补测试: - AI 服务 runtime_limits.py:优先级降低的 Windows/POSIX 分支、线程预算钳制 - 后端 path_validation.py / filename.py / path.py:非法文件名、超长路径、uuid/hash 识别、get_user_roots 回退 - 后端 location.py scene CRUD 404/403 分支;face.py add_photos_to_identity 全分支 - 前端 MobileBackup / MobileBackupSettings 两个从未被 e2e 引用的 view 的 web 兜底分支

3. 手机 App 天地图瓦片修复(#176

  • Capacitor App 的天地图瓦片地址改为使用用户已选 TrailSnap 服务的 /tianditu-tiles/ Nginx 代理
  • Web 生产环境继续使用同源代理;Tauri 与本地开发继续使用 SDK 默认图层
  • 照片地图和轨迹地图共用统一的瓦片模板构造逻辑
  • 新增 Android App 回归测试,校验矢量和注记瓦片均指向已配置服务器

变更类型

  • 🐛 修复错误 (Bug Fix)
  • ✨ 新功能 (New Feature)
  • 📝 文档更新 (Documentation)
  • 🎨 代码风格调整 (Style)
  • ♻️ 代码重构 (Refactor)
  • ⚡️ 性能优化 (Performance)
  • ✅ 测试增加/修改 (Tests)
  • 🔧 构建/工具链修改 (Build/Chore)

相关 Issue Closes #173 Closes #174 Closes #176

如何测试

已在本地完整验证(dev 模式跑通缩略图加载、年度报告、Agent 聊天、相似照片等场景),CI 由 GitHub Actions 负责。新增配套单元测试: - test_media_api.py:owner 前缀路由返回文件与 400 校验 - test_user_storage.pywarm_storage_base_cache 预热 - test_agent_memory.py / test_proactive_memory.py / test_similar_photo_service.py:URL 格式更新 - CLI test_cli_commands.py:owner 端点构造

检查清单

  • 我已阅读并遵循项目的贡献指南
  • 我的代码遵循项目的代码风格
  • 我已添加/更新了必要的测试
  • 所有测试均已通过
  • 我已更新了相关文档
    🤖 Generated with Claude Code

LC044 and others added 2 commits September 4, 2026 15:28
@LC044

LC044 commented Sep 4, 2026

Copy link
Copy Markdown
Owner Author

I have read and agree to the CLA

- validate_filename 的 Windows 专属非法名(a<b / name. / CON)拆出独立用例,
  在 patch os.name='nt' 下断言(同 60798f6 的跨平台做法)
- compute_relative_path / compute_browse_path / get_user_roots /
  build_folder_list 放弃 C:/ 盘符字面量,改用 _normalize() 归一化的
  临时目录路径(同 test_path_utils.py 的既有约定)

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@LC044 LC044 changed the title perf(media): 缩略图免 DB 会话直读 + 夜间测试覆盖补充 perf(media): 缩略图优化、测试覆盖与手机地图修复 Sep 4, 2026
@LC044
LC044 merged commit 8a3463b into master Sep 4, 2026
30 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

1 participant