Files
nj/plans/next-steps-roadmap.md
iven 1f48a67db5
Some checks failed
Main Merge / backend (push) Has been cancelled
Main Merge / frontend (push) Has been cancelled
docs: 更新路线图 — A+B+C 阶段完成,9 条链路 8 通过
2026-06-07 13:15:53 +08:00

12 KiB
Raw Permalink Blame History

暖记下一步工作路线图

创建日期: 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推荐


建议的推进顺序

  1. A — 收尾提交 (已完成) — 7 个提交已推送
  2. B — 安全加固 (已完成) — DTO 验证 + Token 刷新 + 班级码
  3. C — 端到端联调 (已完成) — 8/9 条链路通过
  4. D.1 体验问题修复 (下一步) — 好用
  5. B.3 性能优化 (2-3 天) — 快
  6. E.1 内测 APK (1-2 天) — 可分享
  7. D.2 新功能探索 (持续) — 有趣
  8. E.2-E.3 应用商店 + CI/CD (1-2 周) — 正式上线

开放讨论

以下问题需要在推进前达成共识:

  1. Phase 范围: Discover 功能属于 Phase 1 还是 Phase 2审计报告标记为 Phase 2 违规
  2. MVP 定义: 最小可用版本的边界在哪?哪些功能必须有,哪些可以等?
  3. 家长验证: 完整 PIPL 流程 vs 注册勾选确认MVP 选哪个?
  4. 同步策略: 修复现有协议 vs 重新设计 vs MVP 先不支持同步?
  5. 测试设备: 有没有 Android 设备可以用来真机测试?
  6. 目标用户验证: 有没有机会找真实小学生试用收集反馈?
  7. 时间预期: 从现在到"可内测"你期望多久?

文档结束 — 确认方向后按优先级逐一推进