M3-03 Growth & Retention Module #31

Open
opened 2026-05-22 21:09:50 +08:00 by wangdl · 0 comments
Owner

目标

设计知习成长与留存模块,为 C 端用户提供每日学习目标、连续学习天数、学习热力图、趋势分析和下一步推荐能力。

本 Issue 只做模块架构设计,不直接实现代码。

背景说明

让用户知道"今天该做什么、学完有什么变化、明天为什么回来"是留存的关键。Growth 模块聚合 Learning 和 Review 两个模块的数据,生成学习统计、streak、热力图和下一步推荐。它不产生学习内容本身,而是提供让人坚持学习的动力数据。

模块职责

  1. 本模块负责:

    • 每日学习目标设置和追踪
    • Streak 计算(连续学习天数/连续复习天数)
    • 学习热力图(日历视图,每日学习时长或数量)
    • 学习趋势(本周/本月学习量变化)
    • 完成页数据(LearningSession 或 DailyTask 完成后的总结展示)
    • 下一步推荐(基于掌握度薄弱项推荐复习或新知识点)
    • 学习提醒偏好管理
  2. 本模块不负责:

    • 学习内容生成(走 Learning Engine)
    • 复习调度(走 Review Engine)
    • 推送通知具体执行(走 Notification Module)
    • 成就系统(预留字段,当前阶段不实现)

候选数据对象

  • LearningGoal(每日目标)
  • StreakRecord(连续学习记录)
  • LearningStats(学习统计聚合)
  • LearningHeatmap(热力图数据)
  • Recommendation(学习推荐)
  • NotificationPreference(提醒偏好)

基础设施依赖判断

  • MySQL:是(目标、统计、推荐数据)
  • Redis:是(Streak 和热力图缓存)
  • BullMQ:否(统计计算可通过定时任务或事件驱动)
  • Qdrant:否
  • AI Gateway:否(推荐算法在当前阶段使用简单规则,不调用 AI)
  • Content Safety:否

数据来源

Growth 模块通过订阅以下事件更新统计数据:

  • LearningSessionCompleted(来自 Learning Engine)
  • ReviewAttemptSubmitted(来自 Review Engine)
  • DailyTaskCompleted(来自 Review Engine)

API 设计

  1. CAPI:
    • 获取今日目标进度
    • 获取 Streak 和热力图数据
    • 获取学习趋势
    • 获取下一步推荐
    • 设置每日目标
    • 设置提醒偏好

Domain Event 设计

  • DailyGoalAchieved
  • StreakUpdated
  • RecommendationGenerated
  • LearningStatsUpdated

交付检查

  • 是否需要 Prisma migration:是
  • 是否需要 MySQL:是
  • 是否需要 Redis:是
  • 是否需要 BullMQ:否
  • 是否需要 AI Gateway:否
  • 是否需要 Content Safety:否
  • 是否需要 Cost 记录:否
  • 是否需要 Domain Event:是
  • 是否需要 Admin 视图:否(由 Admin Data View 覆盖)
  • 是否需要 E2E/集成测试:是

验收标准

  1. LearningGoal / StreakRecord / LearningStats Prisma schema
  2. Streak 计算逻辑设计
  3. 热力图数据聚合方案
  4. 学习趋势展示方案
  5. 下一步推荐算法(简单规则版)设计
  6. 集成测试覆盖 Streak 和热力图数据

禁止事项

  • 禁止 Growth 模块直接操作 Learning 或 Review 模块的数据表(必须通过事件订阅或 QueryService)
  • 禁止推荐算法调用 AI Gateway(当前阶段使用简单规则)
  • 禁止 Streak 计算有跨天边界 bug

不建议当前阶段实现

  • 成就系统/徽章系统
  • AI 驱动的推荐系统
  • 学习路线推荐
  • 社交排行榜
## 目标 设计知习成长与留存模块,为 C 端用户提供每日学习目标、连续学习天数、学习热力图、趋势分析和下一步推荐能力。 本 Issue 只做模块架构设计,不直接实现代码。 ## 背景说明 让用户知道"今天该做什么、学完有什么变化、明天为什么回来"是留存的关键。Growth 模块聚合 Learning 和 Review 两个模块的数据,生成学习统计、streak、热力图和下一步推荐。它不产生学习内容本身,而是提供让人坚持学习的动力数据。 ## 模块职责 1. 本模块负责: - 每日学习目标设置和追踪 - Streak 计算(连续学习天数/连续复习天数) - 学习热力图(日历视图,每日学习时长或数量) - 学习趋势(本周/本月学习量变化) - 完成页数据(LearningSession 或 DailyTask 完成后的总结展示) - 下一步推荐(基于掌握度薄弱项推荐复习或新知识点) - 学习提醒偏好管理 2. 本模块不负责: - 学习内容生成(走 Learning Engine) - 复习调度(走 Review Engine) - 推送通知具体执行(走 Notification Module) - 成就系统(预留字段,当前阶段不实现) ## 候选数据对象 - LearningGoal(每日目标) - StreakRecord(连续学习记录) - LearningStats(学习统计聚合) - LearningHeatmap(热力图数据) - Recommendation(学习推荐) - NotificationPreference(提醒偏好) ## 基础设施依赖判断 - MySQL:是(目标、统计、推荐数据) - Redis:是(Streak 和热力图缓存) - BullMQ:否(统计计算可通过定时任务或事件驱动) - Qdrant:否 - AI Gateway:否(推荐算法在当前阶段使用简单规则,不调用 AI) - Content Safety:否 ## 数据来源 Growth 模块通过订阅以下事件更新统计数据: - LearningSessionCompleted(来自 Learning Engine) - ReviewAttemptSubmitted(来自 Review Engine) - DailyTaskCompleted(来自 Review Engine) ## API 设计 1. CAPI: - 获取今日目标进度 - 获取 Streak 和热力图数据 - 获取学习趋势 - 获取下一步推荐 - 设置每日目标 - 设置提醒偏好 ## Domain Event 设计 - DailyGoalAchieved - StreakUpdated - RecommendationGenerated - LearningStatsUpdated ## 交付检查 - [ ] 是否需要 Prisma migration:是 - [ ] 是否需要 MySQL:是 - [ ] 是否需要 Redis:是 - [ ] 是否需要 BullMQ:否 - [ ] 是否需要 AI Gateway:否 - [ ] 是否需要 Content Safety:否 - [ ] 是否需要 Cost 记录:否 - [ ] 是否需要 Domain Event:是 - [ ] 是否需要 Admin 视图:否(由 Admin Data View 覆盖) - [ ] 是否需要 E2E/集成测试:是 ## 验收标准 1. LearningGoal / StreakRecord / LearningStats Prisma schema 2. Streak 计算逻辑设计 3. 热力图数据聚合方案 4. 学习趋势展示方案 5. 下一步推荐算法(简单规则版)设计 6. 集成测试覆盖 Streak 和热力图数据 ## 禁止事项 - 禁止 Growth 模块直接操作 Learning 或 Review 模块的数据表(必须通过事件订阅或 QueryService) - 禁止推荐算法调用 AI Gateway(当前阶段使用简单规则) - 禁止 Streak 计算有跨天边界 bug ## 不建议当前阶段实现 - 成就系统/徽章系统 - AI 驱动的推荐系统 - 学习路线推荐 - 社交排行榜
wangdl added this to the M3:学习复习闭环(P2) milestone 2026-05-22 21:09:50 +08:00
wangdl self-assigned this 2026-05-22 21:09:50 +08:00
Sign in to join this conversation.
No Label
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: wangdl/api-server#31
No description provided.