# content 内容资源服务 > 版本:0.1(骨架) > 日期:2026-07-07 > 状态:P4 待交付 > 关联文档:[架构影响地图](../../architecture/004_architecture_impact_map.md) --- ## 1. 模块职责 content 是内容资源限界上下文,管理 Textbook、Question、KnowledgePoint 三大聚合。 负责教材管理、题库管理(含 Elasticsearch 全文检索)、知识图谱构建(Neo4j 存储前置依赖关系)。 为 core-edu 提供题目来源,为 ai 服务提供出题素材与知识图谱查询。 --- ## 2. 技术栈 | 类别 | 技术 | 版本 | 用途 | |------|------|------|------| | 语言 | TypeScript | 5.5+ | 类型安全 | | 框架 | NestJS | 10.x | 依赖注入、模块化 | | ORM | Drizzle ORM | 0.31+ | 关系数据访问 | | 关系库 | MySQL | 8.x | 教材/题目写模型 | | 图数据库 | Neo4j | 5.x | 知识图谱、前置依赖 | | 搜索 | Elasticsearch | 8.x | 题库全文检索 | | 校验 | Zod | 3.23+ | 运行时校验 | --- ## 3. 架构图 ```mermaid graph TB BFF[BFF 聚合层] -->|gRPC| CONTENT[content 服务] AI[ai 服务] -->|gRPC| CONTENT CONTENT --> TB[Textbook 模块] CONTENT --> Q[Question 模块] CONTENT --> KP[KnowledgePoint 模块] CONTENT -->[(MySQL
教材/题目)] CONTENT -->[(Neo4j
知识图谱)] CONTENT -->[(ES
题库索引)] CONTENT -.事件.-> K[(Kafka
edu.content.*)] ``` > 待 P4 交付时补充完整的分层架构图与多存储协同图。 --- ## 4. 核心流程图 ```mermaid sequenceDiagram participant T as 教师 participant BFF as BFF participant CONTENT as content participant ES as Elasticsearch participant N as Neo4j T->>BFF: 创建题目 BFF->>CONTENT: gRPC CreateQuestion CONTENT->>CONTENT: 写 MySQL + Outbox CONTENT->>ES: 异步索引题目 CONTENT->>N: 异步更新知识点关联 CONTENT-->>BFF: 成功 ``` > 待 P4 交付时补充:知识图谱查询流程、题库检索流程、教材发布流程。 --- ## 5. 对外契约 - **gRPC 服务**:TextbookService、QuestionService、KnowledgePointService(待 P4 定义 protobuf) - **领域事件**:`edu.content.question.published`、`edu.content.textbook.updated`、`edu.content.knowledge.linked` - **存储表**:textbooks、questions、knowledge_points、knowledge_edges、outbox > 待 P4 交付时补充完整 protobuf 定义与多存储 schema。 --- ## 6. 依赖关系 - **上游**:teacher-bff、student-bff、ai(gRPC 查询题库与知识图谱) - **下游**:MySQL、Neo4j、Elasticsearch、Kafka - **跨服务**:消费 core-edu 的教学事件触发内容关联;被 data-ana 消费内容发布事件 --- ## 7. 架构约束 1. 题库检索必须走 Elasticsearch,禁止 MySQL LIKE 全表扫描 2. 知识图谱前置依赖查询必须走 Neo4j,禁止关系库递归查询 3. MySQL 写入后必须异步同步 ES 索引与 Neo4j 关系 4. Outbox 模式强制 > 待 P4 交付时补充完整约束清单。 --- ## 8. 架构决策 > 待 P4 交付时补充 ADR 记录,预计包括:Neo4j 选型、ES 索引策略、多存储一致性保证、CDC 引入决策。