1.AI 协作文档体系重构(objections/worklines/contracts+matrix.md) 2.coord 仲裁文档(final-decisions/cross-review/final-rulings/orchestration) 3.各服务 01/02 文档补全 4.共享包初始化(shared-ts/shared-go/hooks/ui-components/ui-tokens) 5.Proto 契约补全 6.004 架构影响地图更新 7.端口分配表 8.设计规格文档
122 lines
7.0 KiB
Markdown
122 lines
7.0 KiB
Markdown
# data-ana 对接契约
|
||
|
||
> 负责人:ai11
|
||
> 关联:[matrix.md](./matrix.md)、[analytics.proto](../../../packages/shared-proto/proto/analytics.proto)、[events.proto](../../../packages/shared-proto/proto/events.proto)
|
||
|
||
---
|
||
|
||
## §1 我提供什么(对外接口)
|
||
|
||
### 1.1 gRPC 接口(如有)
|
||
|
||
| Service | RPC | 请求 | 响应 | 端口 |
|
||
| ---------------- | ---------------------- | ----------------------------- | ------------------------- | ----- |
|
||
| AnalyticsService | GetClassPerformance | GetClassPerformanceRequest | ClassPerformance | 50055 |
|
||
| AnalyticsService | GetStudentWeakness | GetStudentWeaknessRequest | StudentWeakness | 50055 |
|
||
| AnalyticsService | GetLearningTrend | GetLearningTrendRequest | LearningTrend | 50055 |
|
||
| AnalyticsService | GetTeacherDashboard | GetTeacherDashboardRequest | TeacherDashboard | 50055 |
|
||
| AnalyticsService | GetStudentDashboard | GetStudentDashboardRequest | StudentDashboard | 50055 |
|
||
| AnalyticsService | GetParentDashboard | GetParentDashboardRequest | ParentDashboard | 50055 |
|
||
| AnalyticsService | GetAdminDashboard | GetAdminDashboardRequest | AdminDashboard | 50055 |
|
||
| AnalyticsService | GetWarningList | GetWarningListRequest | WarningListResponse | 50055 |
|
||
| AnalyticsService | TriggerWarning | TriggerWarningRequest | TriggerWarningResponse | 50055 |
|
||
| AnalyticsService | GetMasteryDistribution | GetMasteryDistributionRequest | MasteryDistribution | 50055 |
|
||
| AnalyticsService | GetStudentMastery | GetStudentMasteryRequest | StudentMastery | 50055 |
|
||
| AnalyticsService | SubscribeMasteryUpdate | SubscribeMasteryUpdateRequest | stream MasteryUpdateEvent | 50055 |
|
||
|
||
### 1.2 HTTP 端点(如有)
|
||
|
||
无对外 HTTP 端点,仅 gRPC(含 1 个 Server Streaming RPC)。
|
||
|
||
### 1.3 GraphQL schema(如 BFF)
|
||
|
||
不适用。
|
||
|
||
### 1.4 Kafka 事件发布(如有)
|
||
|
||
| Topic | Event | 消费方 |
|
||
| --------------------------- | --------------------------------------------------------- | -------------- |
|
||
| edu.data_ana.mastery.events | MasteryEvent(action: mastery.updated/warning.triggered) | core-edu / msg |
|
||
|
||
> 注:MasteryEvent 豁免 Outbox 模式(派生数据事件,见 004 §12.2 + §15.3 #6)。
|
||
|
||
### 1.5 错误码前缀
|
||
|
||
`DATA_ANA_`(如 DATA_ANA_DASHBOARD_UNAVAILABLE、DATA_ANA_MASTERY_NOT_COMPUTED)
|
||
|
||
---
|
||
|
||
## §2 我消费什么(依赖上游)
|
||
|
||
### 2.1 gRPC 调用(同步)
|
||
|
||
无主动 gRPC 调用上游。data-ana 通过 CDC + Kafka 事件接收数据,计算后发布 MasteryEvent。
|
||
|
||
### 2.2 Kafka 事件订阅(异步)
|
||
|
||
| Topic | Event | 发布方 | mock 策略 |
|
||
| ---------------------------------- | ------------------- | --------------- | ------------------------------------------------- |
|
||
| edu.exam.events | ExamEvent | core-edu (ai08) | core-edu 就绪前使用 CDC 模拟数据 + 本地 stub 事件 |
|
||
| edu.homework.events | HomeworkEvent | core-edu (ai08) | 同上 |
|
||
| edu.grade.events | GradeEvent | core-edu (ai08) | 同上 |
|
||
| edu.class.events | ClassEvent | core-edu (ai08) | 同上 |
|
||
| edu.content.knowledge_point.events | KnowledgePointEvent | content (ai09) | content 就绪前使用内置知识点维度表 |
|
||
| edu.content.question.events | QuestionEvent | content (ai09) | content 就绪前忽略 |
|
||
| edu.ai.usage.events | AIUsageEvent | ai (ai12) | ai 就绪前忽略,AI 用量统计为空 |
|
||
|
||
### 2.3 HTTP 调用(如有)
|
||
|
||
无。
|
||
|
||
### 2.4 CDC 数据源(补充)
|
||
|
||
| 数据源 | 用途 | mock 策略 |
|
||
| ----------------------------------------------------- | ------------------------------- | --------------------------------------------------------------------------- |
|
||
| core-edu MySQL(exams/homework/grades/attendance 表) | Debezium CDC → Kafka 同步读模型 | core-edu 就绪前使用 ClickHouse 内置模拟数据集(30 学生 × 5 考试 × 10 作业) |
|
||
|
||
---
|
||
|
||
## §3 就绪信号
|
||
|
||
### 3.1 我依赖的上游就绪标志
|
||
|
||
- [ ] core-edu gRPC 50053 启用(ai08)—— 业务事件 + CDC 数据源
|
||
- [ ] edu.exam.events / edu.homework.events / edu.grade.events / edu.class.events topic 有事件发布(ai08)
|
||
- [ ] content gRPC 50054 启用(ai09)—— 知识点维度
|
||
- [ ] edu.content.knowledge_point.events topic 有事件发布(ai09)
|
||
- [ ] ai gRPC 50057 启用(ai12)—— AI 用量统计(可选,仪表盘补全)
|
||
|
||
### 3.2 我的就绪标志(供下游消费)
|
||
|
||
- [ ] data-ana gRPC 50055 启用(HealthService.Check 返回 SERVING)
|
||
- [ ] AnalyticsService 12 RPC 可调用(含 4 端 Dashboard + Server Streaming SubscribeMasteryUpdate)
|
||
- [ ] GetTeacherDashboard / GetStudentDashboard / GetParentDashboard / GetAdminDashboard 返回结构化数据
|
||
- [ ] edu.data_ana.mastery.events topic 可发布(mastery.updated / warning.triggered)
|
||
|
||
---
|
||
|
||
## §4 Mock 策略
|
||
|
||
### 4.1 我提供的 mock
|
||
|
||
在 data-ana 真实服务就绪前,为下游(teacher-bff / student-bff / parent-bff / admin-portal / msg)提供以下 mock:
|
||
|
||
- **gRPC mock**:使用 grpc-mock 拦截 50055 端口
|
||
- GetTeacherDashboard 返回固定仪表盘(total_classes=3, class_avg_score=82.5, top_students 5 个, pending_homework_count=8)
|
||
- GetStudentDashboard 返回固定仪表盘(avg_score=85.0, class_rank=5, weak_points 3 个)
|
||
- GetParentDashboard 返回固定仪表盘(child_avg_score=85.0, child_class_rank=5)
|
||
- GetAdminDashboard 返回固定仪表盘(total_teachers=50, total_students=1200, school_avg_score=80.0)
|
||
- GetWarningList 返回固定 5 条预警(severity: warning/critical)
|
||
- GetMasteryDistribution 返回固定分布(mastered=20, progressing=7, weak=3)
|
||
- SubscribeMasteryUpdate 返回固定流(每 5 秒推 1 个 MasteryUpdateEvent)
|
||
- **Kafka mock**:data-ana 就绪前不发布真实 MasteryEvent,msg 使用本地 stub 预警
|
||
|
||
### 4.2 我消费的 mock
|
||
|
||
在真实上游就绪前,data-ana 使用以下 mock:
|
||
|
||
- 业务数据:ClickHouse 内置模拟数据集(30 学生 × 5 考试 × 10 作业 × 30 天出勤),不依赖 core-edu CDC
|
||
- 知识点维度:内置固定知识点表(数学 50 个知识点),不依赖 content 事件
|
||
- AI 用量:AIUsageEvent 为空,仪表盘 AI 用量区块显示"暂无数据"
|
||
- CDC 通道:core-edu 就绪前 Debezium 不启动,使用 ClickHouse 批量导入模拟数据
|