Skip to content

Latest commit

 

History

History
103 lines (90 loc) · 4.95 KB

File metadata and controls

103 lines (90 loc) · 4.95 KB

Touhou-Vote 当前开发状态

本文件用于记录当前开发进度、已确认问题、以及上线前必须再次确认的生产事项。

优先级高于零散对话记录,和 README.md 平级维护。

当前重点

  • 当前主要开发目标仍然是 packages/vote
  • 当前已经在持续优化 vote 模块中的“导出投票结果为图片”功能。
  • 问卷提交链路本次只做了问题排查,没有保留临时鉴权调试逻辑。
  • 问卷模块正在推进 v2 数据结构与解析逻辑,但提交给后端的格式是否同步升级,目前仍是待确认事项。

已完成进展

  • 首页入口相关文档已同步到 doc/ai-generated
  • 导出图片功能已支持角色、音乐、CP 三个模块。
  • 导出图片的数据源逻辑已修正:
    • 默认支持 local / graphql / auto
    • 导出组件现在会遵循全局数据源模式
    • 开发环境下可通过控制台 testHelper.setDataSourceMode('local') 强制使用本地测试数据
  • 导出图片的用户名不再写死,会读取当前登录用户名。
  • 导出图片的预览 ObjectURL 已增加释放逻辑,避免连续导出积累内存。
  • 导出图片的分享能力已改为基于 navigator.sharenavigator.canShare({ files }) 判断。
  • 导出数据的 GraphQL 获取方式已从 useLazyQuery 改为 Apollo Client 直接查询,避免在工具函数中触发 “Apollo client with id default not found”。

已确认问题

1. 后端用户/投票 token 问题

  • 现象:
    • 某些账号可以正常登录
    • /v11-be/user-token-status 可以返回有效
    • 但问卷提交 GraphQL 会返回 INVALID_TOKEN
  • 当前结论:
    • 该问题不是前端保存 token 写反导致的
    • 问题已定位到后端认证/用户数据库状态
    • 需要后端修正后,才能继续做真实账号联调
  • 当前处理策略:
    • 前端不保留本次为排查临时加入的问卷提交前鉴权逻辑
    • 真实账号测试暂时依赖后端修复

2. 导出图片依赖图片跨域代理

  • 背景:
    • 角色头像、音乐封面等图片多数来自外部资源地址,例如 asset.lilywhite.cc
    • 图片直接显示通常没有问题,但绘制到 canvas 时会因为跨域导致导出失败
  • 当前解决方式:
    • 仅在开发环境下,导出组件会将远程图片 URL 改写为本地代理路径:
      • asset.lilywhite.cc -> /th-assets
      • static.thwiki.cc -> /thwiki-assets
    • Vite 代理会转发到目标站,并额外补 CORS 响应头
    • html2canvas 在生成图片时启用了 useCORS: true
  • 当前结论:
    • 本地开发环境下,这个问题目前已经可用
    • 这不等于生产环境天然安全

生产环境待解决事项

1. 图片导出跨域方案需要生产级确认

  • 当前图片代理改写只在 import.meta.env.DEV 下启用。
  • 如果生产环境继续直接使用第三方图片地址,而目标站点没有返回适合 canvas 的 CORS 头,导出图片仍然可能失败。
  • 上线前需要明确采用哪一种方案:
    • 生产环境也走自有代理/CDN
    • 或确认图片源站能稳定返回满足 canvas 使用的 CORS 响应头

2. 后端用户认证数据库修复后,需要重新做真实账号联调

  • 重点验证:
    • 登录
    • 问卷提交
    • 角色/音乐/CP/提名提交
    • 导出图片时 GraphQL 数据源读取
  • 只有后端修复后,这部分验证才有意义。

3. questionnaireV2 是否直接同步为后端提交格式,当前未定

  • 当前现状:
    • 旧页面提交给后端的仍然是旧版 paperJson
    • questionnaireV2 只是新的前端问卷定义和解析基础
  • 当前补充:
    • 已新增过渡兼容层 packages/vote/src/questionnaire/lib/questionnaireV2PaperJson.ts
    • 可以把 v2 的答案状态转成旧版 paperJson
  • 当前不确定项:
    • 后端是否会继续沿用旧版 paperJson
    • 后端是否愿意同步接受 v2 的问题组结构
  • 因此当前策略:
    • 先保持 v2 作为前端正确模型
    • 暂不把“后端必须改成接收 v2”当成既定方案
    • 在后端未定前,可先使用兼容层维持旧接口对接能力
    • 等前后端确认后,再二选一推进:
      • 前端增加 v2 -> 旧 paperJson 转换层
      • 或后端直接升级为接收 v2
  • 这个事项当前应视为带问号的设计决策,而不是开发已定稿内容。

当前建议的开发顺序

  1. 继续完善导出图片模块逻辑。
  2. 继续推进问卷 v2 的页面层和规则层实现,但先不要假设后端会同步改接口。
  3. 在问卷 v2 接近可用时,再和后端确认最终提交格式。
  4. 等后端修复用户认证数据库后,再恢复真实账号联调。
  5. 在生产部署前,单独验证图片跨域与 canvas 导出链路。

相关文档

  • README.md
  • agents.md
  • doc/ai-generated/vote-dev-notes.md
  • doc/ai-generated/questionnaire-v2-notes.md
  • doc/ai-generated/questionnaire-v2-migration-plan.md
  • doc/260215EXPORT_FEATURE_UPDATE.md