12 KiB
12 KiB
暖记下一步工作路线图
创建日期: 2026-06-07 状态: 讨论稿,待确认优先级后逐一推进 当前代码状态: 工作区 26 个文件 +1051/-319 行未提交
当前快照
| 指标 | 数值 |
|---|---|
| 后端测试 | 518 通过 |
| 前端测试 | 116 新增 (Phase 4) |
| 审计发现 | 345 项 (42 C / 90 H / 123 M / 90 L) |
| 未提交改动 | Discover 全栈 + 编辑器增强 + 多页动态化 |
| 未提交新文件 | discover_bloc / discover_models / discover_handler / discover_service |
方向 A — 当前改动收尾提交
目标: 把工作区 1000+ 行改动拆分成有意义的提交,保持 git 历史清晰 预估: 2-3h(拆分 + 验证 + 提交) 优先级: ⭐⭐⭐⭐⭐ — 做任何事之前先把当前工作落地
A.1 提交拆分建议
| # | 提交内容 | 涉及文件 | scope |
|---|---|---|---|
| 1 | Discover 后端 (DTO + Service + Handler + 路由注册) | crates/erp-diary 4 文件 + main.rs | feat(diary) |
| 2 | Discover 前端 (BLoC + Models + Page 动态化) | app/features/discover/ 4 文件 | feat(app) |
| 3 | 编辑器: 查看模式 + 图层排序 | editor_page + editor_bloc + draggable_element | feat(app) |
| 4 | 编辑器: 标签面板动态化 + 贴纸选择器重构 | tag_panel + sticker_picker_sheet | feat(app) |
| 5 | 搜索页动态化 (热搜词 + 模板搜索) | search_page | feat(app) |
| 6 | 个人资料页动态化 (成就徽章 + 头像首字母) | profile_page | feat(app) |
| 7 | 教师页班级码对话框 | teacher_page | feat(app) |
| 8 | 贴纸库动态分类 | sticker_library_page | feat(app) |
| 9 | Wiki 文档更新 | wiki/ 4 文件 | docs |
A.2 验证清单
cargo check后端编译通过cargo test后端测试通过flutter analyze前端分析通过- 每个提交可独立编译
A.3 讨论点
- Discover 功能是否属于 Phase 1 范围?审计报告 7b-H06 指出它属于 Phase 2
- 编辑器查看模式是新增功能还是修复?影响提交类型选择 (feat vs fix)
方向 B — 审计修复路线图推进
目标: 按审计报告 345 项发现的修复路线图推进 预估: Phase 0 已完成 ~80%,Phase 1-3 待推进 优先级: ⭐⭐⭐⭐ — 安全和稳定性是上线的前提
B.1 Phase 0 紧急修复 — 已完成项 ✅
| # | 修复项 | 状态 |
|---|---|---|
| 1 | RLS 变量名 bug 修复 | ✅ 已修复 |
| 2 | 内容安全词库填充 + 分享前检查 | ✅ 已修复 |
| 3 | 日记列表 IDOR 修复 | 需确认 |
| 4 | 审计日志 + 文件上传权限守卫 | 需确认 |
| 5 | class_service unwrap() 安全处理 | 需确认 |
| 6 | 事务添加 (create_class/join_class) | 需确认 |
| 7 | 笔画缓存 use-after-dispose 修复 | ✅ 已修复 |
B.2 Phase 1 安全加固 (~31h)
| # | 任务 | 预估 | 讨论点 |
|---|---|---|---|
| 1 | 家长同意验证流程 | 8h | PIPL 合规法律要求,但 Phase 1 MVP 是否先跳过? |
| 2 | 家长绑定验证流程 | 4h | 同上 |
| 3 | Token 黑名单改用 SHA-256 | 1h | 简单,可顺手做 |
| 4 | 全部 DTO 添加 Validate + handler 调用 | 8h | 影响面最大,系统性修复 |
| 5 | Flutter 强制 HTTPS + 证书固定 | 4h | 开发阶段 HTTP 方便调试,生产再强制? |
| 6 | 班级码改用字母数字混合 | 2h | 安全强度提升 3386 倍 |
| 7 | Flutter Token 自动刷新 | 4h | 体验提升明显 |
B.3 Phase 2 性能优化 (~24h)
| # | 任务 | 预估 |
|---|---|---|
| 1 | 后端 4 个 N+1 查询修复 | 8h |
| 2 | Isar 索引 + 分页 + N+1 修复 | 6h |
| 3 | mood_stats 改用 SQL GROUP BY | 2h |
| 4 | 笔画光栅化改为 BBox 裁剪 (50 条笔画 1.6GB → 合理范围) | 4h |
| 5 | SyncEngine 合并同资源操作 | 4h |
B.4 Phase 3 质量提升 (持续)
| # | 任务 |
|---|---|
| 1 | 补充后端集成测试 + Flutter BLoC 测试 |
| 2 | 统一同步协议 (Flutter ↔ Rust) |
| 3 | 创建端点改返回 201 |
| 4 | 添加 DiaryApiDoc OpenAPI 文档 |
| 5 | 无障碍性 Semantics |
| 6 | DiaryEvent 枚举接入 EventBus |
B.5 讨论点
- Phase 1 的家长验证流程比较重,MVP 阶段是否可以用简化版(注册时勾选确认代替完整验证链)?
- 性能优化在数据量小的时候感知不明显,是否延后到真实用户测试时再做?
- 同步协议断裂是最严重的架构问题,但也是改动量最大的——何时投入?
方向 C — 端到端联调
目标: 确保 Flutter → Rust API 全链路数据流通 预估: 8-16h 优先级: ⭐⭐⭐⭐ — 不联调就不知道能不能跑
C.1 核心联调路径
| # | 链路 | 前端模块 | 后端 API | 状态 |
|---|---|---|---|---|
| 1 | 注册 → 登录 → Token 获取 | AuthBloc | POST /auth/* | ✅ 通过 |
| 2 | 创建日记 → 保存到后端 | EditorBloc → JournalRepository | POST /diary/journals | ✅ 通过 |
| 3 | 日记列表加载 | HomeBloc | GET /diary/journals | ✅ 通过 |
| 4 | 班级创建 → 加入 → 查看成员 | ClassBloc | POST/GET /diary/classes/* | ✅ 通过 |
| 5 | 贴纸浏览 → 收藏 | StickerBloc | GET /diary/stickers/* | ✅ 通过 (空) |
| 6 | 发现页数据加载 | DiscoverBloc | GET /diary/discover | ✅ 通过 |
| 7 | 搜索日记/模板 | SearchBloc | GET /diary/journals?search= | ✅ 通过 |
| 8 | 心情统计 | CalendarBloc | GET /diary/stats/mood | ✅ 通过 |
| 9 | 同步 (离线→在线) | SyncEngine | POST /diary/sync | ❌ 协议断裂 |
C.1b DTO 验证生效确认
| 测试 | 结果 |
|---|---|
负版本号 version: -1 |
✅ 拒绝: "版本号不能为负数" |
| 标签过长 (50+ chars) | ✅ 拒绝: "超过 30 字符" |
班级码非字母数字 !!!!!! |
✅ 拒绝: "仅允许字母和数字" |
贴纸包负价格 price: -100 |
✅ 拒绝: "价格不能为负数" |
| 评语创建 (admin 角色) | ✅ 正确返回 403 (仅 teacher) |
C.2 联调方式讨论
方案 A — 手动联调(快速验证)
- 启动后端 + Flutter Web
- 手动走一遍核心流程
- 用 Chrome DevTools 看 Network 请求
- 优点:快速、直观
- 缺点:不可复现、覆盖不全
方案 B — 自动化集成测试(推荐)
- 后端:已有 9 个集成测试,扩展到覆盖所有 API
- 前端:用 integration_test 包写 Flutter 集成测试
- 优点:可复现、持续验证
- 缺点:前期投入大
方案 C — Postman/HTTP 请求集
- 先用 Postman 验证所有后端 API
- 再手动跑 Flutter 前端
- 折中方案
C.3 讨论点
- 同步功能 (链路 9) 已知断裂,联调时是否先跳过?
- 先做后端 API 验证还是直接跑 Flutter?
- 是否需要准备测试数据种子?
方向 D — 产品体验打磨
目标: 从小学生用户视角出发,打磨交互体验 预估: 持续迭代 优先级: ⭐⭐⭐ — 功能能跑之后的首要任务
D.1 体验问题清单
| # | 问题 | 严重性 | 讨论点 |
|---|---|---|---|
| 1 | 首次使用引导 — 新用户打开 app 不知道干什么 | HIGH | 需要设计引导流程 |
| 2 | 空状态设计 — 列表为空时显示什么? | MEDIUM | 需要插画/文案 |
| 3 | 加载状态 — 骨架屏 vs 转圈 vs 进度条? | MEDIUM | 统一 Loading 策略 |
| 4 | 错误提示 — 网络错误/服务器错误/离线 如何提示? | HIGH | 儿童友好的错误文案 |
| 5 | 手写反馈 — 写字时有声音/动画反馈吗? | LOW | 增强沉浸感 |
| 6 | 心情追踪可视化 — fl_chart 集成够好看吗? | MEDIUM | 需要实际渲染验证 |
| 7 | 成就/徽章系统 — 有雏形但完整吗? | MEDIUM | 当前只有数据模型 |
| 8 | 贴纸交互 — 拖拽/缩放/旋转手感如何? | HIGH | 核心体验 |
| 9 | 日历视图 — 月历和日记的关联够直观吗? | MEDIUM | |
| 10 | 班级动态 — 老师点评 → 学生能看到吗? | HIGH | 核心社交功能 |
D.2 可能的新功能想法
| # | 想法 | 复杂度 | 讨论点 |
|---|---|---|---|
| 1 | 每日写作提示 — "今天你吃了什么好吃的?" | 低 | 已有 Discover daily_inspiration,可扩展 |
| 2 | 天气/心情自动检测 — 根据文字内容建议心情标签 | 中 | 需要 NLP 或关键词匹配 |
| 3 | 日记模板市场 — 下载别人分享的日记模板 | 高 | Phase 2 功能? |
| 4 | 语音输入 — 口述转文字辅助写作 | 高 | 技术选型待定 |
| 5 | 涂鸦动画回放 — 把绘画过程做成短视频 | 中 | 技术上可行 (已有时间戳数据) |
| 6 | 多页日记 — 一篇日记可以有很多页 | 中 | 编辑器需要支持翻页 |
| 7 | 日记封面 — 自动/手动生成好看的封面 | 低 | 取日记第一张图或涂鸦 |
| 8 | 分享到班级圈 — 类似朋友圈的班级动态流 | 高 | Phase 2 功能? |
D.3 讨论点
- 哪些体验问题必须在 MVP 之前解决?
- 新功能想法中哪些值得现在就开始探索?
- 是否需要做一轮真实的用户测试(找几个小学生试用)?
方向 E — 上线准备 / DevOps
目标: 从开发环境走向可发布的 App 预估: 20-40h (取决于目标平台) 优先级: ⭐⭐ — 功能稳定后再做
E.1 短期目标:可内测的 APK
| # | 任务 | 预估 | 状态 |
|---|---|---|---|
| 1 | Flutter Android 构建 + 签名 | 4h | 未开始 |
| 2 | 生产环境配置 (HTTPS, 密钥管理) | 4h | 未开始 |
| 3 | 服务器部署 (Docker Compose 生产配置) | 4h | 未开始 |
| 4 | 环境变量管理 (.env → 生产密钥注入) | 2h | 未开始 |
E.2 中期目标:应用商店
| # | 任务 | 预估 |
|---|---|---|
| 1 | App Store / Google Play 开发者账号 | 1h |
| 2 | 应用图标 + 启动页设计 | 4h |
| 3 | 隐私政策 + 用户协议 (PIPL 合规) | 4h |
| 4 | 应用截图 + 描述文案 | 2h |
| 5 | 内部测试轨道分发 | 2h |
| 6 | iOS 打包准备 (Mac + Xcode + 证书) | 8h |
E.3 CI/CD 流水线
| # | 任务 | 预估 |
|---|---|---|
| 1 | GitHub Actions / Gitea CI 配置 | 4h |
| 2 | 后端: cargo test + clippy + Docker build | 2h |
| 3 | 前端: flutter analyze + test + build | 2h |
| 4 | 管理端: pnpm lint + build | 1h |
| 5 | 自动部署到测试服务器 | 4h |
E.4 讨论点
- 先做 Android APK(开发者模式安装)给内部测试?
- 服务器是用现有机器还是云服务器?
- CI/CD 用 Gitea 内置的还是 GitHub Actions?
- iOS 是否需要购买 Mac 设备?
方向间的依赖关系
A (提交收尾)
│
├─→ B (审计修复) ─→ E (上线准备)
│ │
├─→ C (端到端联调) │
│ │ │
│ └─→ D (体验打磨)
│
└─────────────────────────────→ 时间线
关键路径: A → C → D → E(先提交 → 再联调 → 再打磨 → 再上线) 安全路径: A → B → E(先提交 → 再修 bug → 再上线) 混合路径: A → B+C 并行 → D → E(推荐)
建议的推进顺序
- A — 收尾提交 ✅ (已完成) — 7 个提交已推送
- B — 安全加固 ✅ (已完成) — DTO 验证 + Token 刷新 + 班级码
- C — 端到端联调 ✅ (已完成) — 8/9 条链路通过
- D.1 体验问题修复 (下一步) — 好用
- B.3 性能优化 (2-3 天) — 快
- E.1 内测 APK (1-2 天) — 可分享
- D.2 新功能探索 (持续) — 有趣
- E.2-E.3 应用商店 + CI/CD (1-2 周) — 正式上线
开放讨论
以下问题需要在推进前达成共识:
- Phase 范围: Discover 功能属于 Phase 1 还是 Phase 2?审计报告标记为 Phase 2 违规
- MVP 定义: 最小可用版本的边界在哪?哪些功能必须有,哪些可以等?
- 家长验证: 完整 PIPL 流程 vs 注册勾选确认,MVP 选哪个?
- 同步策略: 修复现有协议 vs 重新设计 vs MVP 先不支持同步?
- 测试设备: 有没有 Android 设备可以用来真机测试?
- 目标用户验证: 有没有机会找真实小学生试用收集反馈?
- 时间预期: 从现在到"可内测"你期望多久?
文档结束 — 确认方向后按优先级逐一推进