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.设计规格文档
7.0 KiB
7.0 KiB
data-ana 对接契约
负责人:ai11 关联:matrix.md、analytics.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 批量导入模拟数据