startup-plan/开发计划/api-server/[进行中]-后端待完成事项清单.md
2026-05-17 00:51:02 +08:00

618 lines
11 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 知习后端待完成事项清单
> 按业务开发顺序排列。**2026-05-16 更新AI 基础设施完成12 个 Repository 全部迁到 Prisma。**
---
## 1. 登录 / 认证模块 Auth
这是第一优先级。因为后面所有数据都要绑定 `userId`
### 要做的接口
```text
POST /api/auth/dev-login
POST /api/auth/apple
POST /api/auth/refresh
POST /api/auth/logout
GET /api/users/me
PATCH /api/users/me
```
### 第一阶段先做
```text
POST /api/auth/dev-login
POST /api/auth/refresh
GET /api/users/me
```
Apple 登录可以随后接入,但后端结构要先预留。
### 需要的表
```text
users
auth_accounts
refresh_tokens
```
### 核心逻辑
```text
dev-login 创建 / 查找用户
生成 accessToken
生成 refreshToken
refreshToken hash 入库
/users/me 返回当前用户
refresh 接口刷新 token
logout 撤销 refreshToken
```
### Apple 登录需要什么
后端不需要 iOS 证书,只需要:
```text
APPLE_BUNDLE_ID=cloud.longde.AIStudyApp
APPLE_ISSUER=https://appleid.apple.com
APPLE_JWKS_URL=https://appleid.apple.com/auth/keys
```
Apple 登录接口核心参数:
```json
{
"identityToken": "eyJ..."
}
```
可选参数:
```json
{
"authorizationCode": "...",
"userIdentifier": "...",
"email": "...",
"fullName": {
"givenName": "...",
"familyName": "..."
}
}
```
---
## 2. 权限系统 Permission
登录后马上要做最小权限。
### 第一版权限规则
```text
普通用户只能访问自己的资源
所有用户资源必须校验 userId
普通用户不能访问 /api/admin/*
知识库默认 PRIVATE
创建知识库的人就是 owner
```
### 平台角色
```text
USER
ADMIN
SUPER_ADMIN
```
### 后期资源角色
```text
OWNER
EDITOR
VIEWER
```
第一版可以先不做协作者,只做:
```text
knowledgeBase.userId === currentUser.id
```
---
## 3. 用户模块 Users
### 接口
```text
GET /api/users/me
PATCH /api/users/me
DELETE /api/users/me
```
### 字段
```text
id
email
nickname
avatarUrl
role
status
onboardingCompleted
createdAt
updatedAt
```
这个模块服务于:
```text
App 启动恢复登录态
我的页
会员权益
学习统计
后台用户管理
```
---
## 4. 知识库模块 KnowledgeBase
登录通了以后做知识库。
### 接口
```text
GET /api/knowledge-bases
POST /api/knowledge-bases
GET /api/knowledge-bases/:id
PATCH /api/knowledge-bases/:id
DELETE /api/knowledge-bases/:id
```
### 字段
```text
id
userId
title
description
coverColor
visibility
status
itemCount
createdAt
updatedAt
deletedAt
```
### 第一版规则
```text
默认 PRIVATE
只允许用户操作自己的知识库
暂时不做公开、分享、协作者
```
---
## 5. 知识点模块 KnowledgeItem
### 接口
```text
GET /api/knowledge-bases/:knowledgeBaseId/items
POST /api/knowledge-bases/:knowledgeBaseId/items
GET /api/knowledge-items/:id
PATCH /api/knowledge-items/:id
DELETE /api/knowledge-items/:id
```
### 字段
```text
id
userId
knowledgeBaseId
title
content
summary
tags
sourceType
masteryLevel
createdAt
updatedAt
deletedAt
```
第一版先支持:
```text
手动创建知识点
手动编辑知识点
```
不要一开始做 PDF 解析和 AI 自动拆分。
---
## 6. 学习会话模块 LearningSession
表示一次学习过程。
### 接口
```text
POST /api/learning-sessions
GET /api/learning-sessions/:id
POST /api/learning-sessions/:id/complete
```
### 字段
```text
id
userId
knowledgeBaseId
status
startedAt
completedAt
durationSeconds
createdAt
updatedAt
```
---
## 7. 主动回忆模块 ActiveRecall
这是用户主动输出的核心。
### 接口
```text
POST /api/active-recall/answers
GET /api/active-recall/answers/:id
GET /api/knowledge-items/:id/active-recall/answers
```
### 字段
```text
id
userId
knowledgeItemId
learningSessionId
mode
answerText
durationSeconds
createdAt
```
`mode` 预留:
```text
ACTIVE_RECALL
FEYNMAN
RETRIEVAL_PRACTICE
```
---
## 8. AI 分析模块 AIAnalysis
这是知习核心差异化模块。
### 接口
```text
POST /api/ai-analysis/active-recall
GET /api/ai-analysis/:id
GET /api/active-recall/answers/:answerId/analysis
```
### 字段
```text
id
userId
knowledgeItemId
activeRecallAnswerId
score
masteryLevel
summary
strengths
weaknesses
missingKeyPoints
misconceptions
rawResult
promptVersion
model
createdAt
```
### 输出结构示例
```json
{
"score": 72,
"masteryLevel": "partial",
"summary": "用户理解了核心定义,但缺少应用场景。",
"missingKeyPoints": [],
"misconceptions": [],
"focusItems": [],
"reviewSuggestion": {
"shouldReview": true,
"intervalDays": 2
}
}
```
---
## 9. 待巩固项模块 FocusItem
AI 分析后生成的薄弱点。
### 接口
```text
GET /api/focus-items
GET /api/focus-items/today
GET /api/focus-items/:id
PATCH /api/focus-items/:id
```
### 字段
```text
id
userId
knowledgeBaseId
knowledgeItemId
aiAnalysisId
title
description
reason
priority
status
createdAt
resolvedAt
```
### 状态
```text
OPEN
REVIEWING
RESOLVED
DISMISSED
```
---
## 10. 复习模块 Review
### 接口
```text
GET /api/reviews/due
GET /api/reviews/cards/:id
POST /api/reviews/cards/:id/answer
POST /api/reviews/cards/:id/skip
```
### 表
```text
review_cards
review_attempts
```
第一版复习算法可以简单:
```text
薄弱 → 1 天后
一般 → 3 天后
掌握 → 7 天后
```
---
## 11. 学习活跃模块 LearningActivity
### 接口
```text
GET /api/learning-activity/summary
GET /api/learning-activity/daily
POST /api/learning-activity/events
```
### 事件
```text
KNOWLEDGE_BASE_CREATED
KNOWLEDGE_ITEM_CREATED
LEARNING_SESSION_STARTED
ACTIVE_RECALL_SUBMITTED
AI_ANALYSIS_COMPLETED
FOCUS_ITEM_CREATED
REVIEW_CARD_CREATED
REVIEW_COMPLETED
LEARNING_SESSION_COMPLETED
```
用于:
```text
连续学习天数
最近 7 天学习趋势
分析首页
我的页统计
```
---
## 12. AI 基础设施模块 ✅ 已完成
包括:
```text
✅ AIGateway — AiGatewayService统一入口、选模型、JSON容错、超时重试
✅ PromptTemplate — PromptTemplateServicekey + version 注册)
✅ AIUsageLog — AiUsageLogService + AiCostCalculatorService
✅ AIWorkflow — ActiveRecallAnalysisWorkflow第一个 Workflow
⏳ AIQuota — 待实现
```
### 已完成文件
```text
src/modules/ai/
├── ai.module.ts
├── ai.controller.ts
├── model-router.ts
├── gateway/ai-gateway.service.ts
├── gateway/ai-gateway.types.ts
├── providers/ai-provider.interface.ts
├── providers/mock-ai.provider.ts
├── providers/deepseek.provider.ts
├── providers/minimax.provider.ts
├── prompts/prompt-template.service.ts
├── prompts/active-recall-analysis.prompt.ts
├── prompts/schemas/active-recall-analysis.schema.ts
├── usage/ai-cost-calculator.service.ts
├── usage/ai-usage-log.service.ts
└── workflows/active-recall-analysis.workflow.ts
```
### 数据库
```text
✅ AiUsageLog 模型已加入 prisma schema
⚠️ db push 待 SSH 隧道连通
```
### 旧代码已清理
```text
❌ src/infrastructure/ai/ 已删除
✅ ai-analysis 模块已改用新 AiGatewayService
✅ active-recall 模块提交答案自动触发分析
```
---
## 13. Repository 迁移 Map → Prisma ✅ 全部完成
> **2026-05-16**12 个业务 repository 全部从 `Map<string, T>` / `Array<T>` 迁到 Prisma。
| 批次 | 模块 | Repository | 备注 |
|------|------|-----------|------|
| 第 1 批 | KnowledgeBase / KnowledgeItems | ✅ Prisma | 核心知识体系 |
| 第 2 批 | ActiveRecall / LearningSession / AiAnalysis / FocusItems | ✅ Prisma | 学习闭环主干 |
| 第 3 批 | Review / LearningActivity | ✅ Prisma | 复习和统计 |
| 第 4 批 | DocumentImport / Notifications / Waitlist / Feedback | ✅ Prisma | 辅助模块 |
### 改动范围
```text
12 个 repository 重写(注入 PrismaService、删除 Map/Array、删除 generateShortId
5 个 service 微调(方法加 userId 参数)
4 个 controller 加 @CurrentUser()FocusItems / Review / LearningActivity / Notifications
1 个 Prisma schema 新增模型WaitlistEntry
```
### 统一变更
```text
- 删除所有 generateShortId() 调用,改用 Prisma @default(cuid())
- 删除所有 OnModuleInit 种子假数据
- 所有查询方法加 userId 过滤
- 复杂字段(数组/对象)存 Prisma Json 字段
```
这个后面会支撑:
```text
AI 成本计算
会员额度
后台成本看板
模型切换
```
---
# 后端阶段顺序(已完成标记 ✅)
```text
✅ 阶段 1登录和身份已完成
✅ Authdev-login / apple / refresh / logout
✅ Users/users/me + UsersRepository 唯一接 Prisma
✅ PermissionJwtAuthGuard 已全局注册)
✅ 阶段 2知识系统数据库层已完成
✅ KnowledgeBase → Prisma
✅ KnowledgeItem → Prisma
⏳ 知识导入 Workflow
✅ 阶段 3学习闭环数据库层已完成
✅ LearningSession → Prisma
✅ ActiveRecall → Prisma提交答案自动触发 AI 分析)
✅ AiAnalysis → PrismaActiveRecallAnalysisWorkflow
✅ FocusItem → Prisma
✅ Review → Prisma
✅ LearningActivity → Prisma
✅ 阶段 4AI 基础设施(已完成)
✅ AIGateway三层容错 + 超时重试)
✅ PromptTemplatekey + version
✅ AIUsageLog + CostCalculator
✅ ActiveRecallAnalysisWorkflow
✅ AiModule15 文件三层架构)
⏳ AIQuota待实现
✅ 阶段 5文件导入数据库层已完成
✅ DocumentImport → Prisma
⏳ Files / Storage 真实接入
⏳ KnowledgeGeneration Workflow
⏳ 阶段 6商业化未开始
Plans / Membership / Subscription / UsageLimit
⏳ 阶段 7后台和运营部分完成
✅ Feedback → Prisma
✅ Waitlist → Prisma
✅ Notifications → Prisma
⏳ Admin / AI Cost Dashboard / Audit Logs
⏳ 阶段 8客服和帮助中心未开始
SupportTicket / Dify / HelpCenter
```
---
# 当前最应该推进的 TODO
```text
✅ 1. 建 users / auth_accounts / refresh_tokens 表
✅ 2. 做 POST /api/auth/dev-login
✅ 3. 做 TokenServiceaccessToken / refreshToken
✅ 4. 做 POST /api/auth/refresh
✅ 5. 做 JwtAuthGuard
✅ 6. 做 CurrentUser 装饰器
✅ 7. 做 GET /api/users/me
✅ 8. 12 个 Repository Map → Prisma
✅ 9. AI 三层架构落地Provider → Gateway → Workflow
✅ 10. 接 POST /api/auth/apple
✅ 11. 全局 JwtAuthGuard所有 controller
✅ 12. Swagger 文档端点 Basic Auth 保护(/api-docs + /api-docs-json
✅ 13. DNS 从 Cloudflare 迁到 DNSPod腾讯云国内访问 1.5s → 50ms
✅ 14. 服务器 iptables 放行 80/443 公网直连
⏳ 15. 更多 AI Workflow知识导入、费曼分析、复习卡片生成
⏳ 16. AI 联调 + Prompt 调优
⏳ 17. iOS 集成
```