- known-issues.md: 追加 9 条 P6 工作经验日志,更新 arch-scan 经验 - post-p6-followup.md: 新增 P6 后续工作手册 runbook - iam/core-edu/content/msg README: 补充健康检查端点说明
75 lines
2.5 KiB
Markdown
75 lines
2.5 KiB
Markdown
# content 内容资源服务
|
||
|
||
> 版本:0.1(P4 骨架)
|
||
> 端口:3005
|
||
|
||
## 职责
|
||
|
||
内容资源限界上下文,管理 Textbook、Chapter、KnowledgePoint 聚合。
|
||
支持多存储:MySQL(教材/章节/知识点写模型)+ Neo4j(知识图谱前置依赖)+ Elasticsearch(题库全文检索,P4 后续补充)。
|
||
|
||
## 技术栈
|
||
|
||
- NestJS 10.x + TypeScript 5.6(ESM)
|
||
- Drizzle ORM(MySQL)
|
||
- neo4j-driver(知识图谱)
|
||
- Zod(运行时校验)
|
||
- pino(日志)+ prom-client(指标)+ OpenTelemetry(追踪)
|
||
|
||
## 开发
|
||
|
||
```bash
|
||
pnpm install
|
||
pnpm dev # 端口 3005
|
||
pnpm build
|
||
pnpm typecheck
|
||
pnpm lint
|
||
pnpm test
|
||
```
|
||
|
||
## 环境变量
|
||
|
||
| 变量 | 说明 |
|
||
| ----------------------------- | ------------------------------- |
|
||
| `PORT` | 服务端口(默认 3005) |
|
||
| `DATABASE_URL` | MySQL 连接串 |
|
||
| `NEO4J_URL` | Neo4j Bolt 连接 URL |
|
||
| `NEO4J_PASSWORD` | Neo4j 密码 |
|
||
| `ES_URL` | Elasticsearch 地址 |
|
||
| `JWT_SECRET` | JWT 密钥 |
|
||
| `OTEL_EXPORTER_OTLP_ENDPOINT` | OpenTelemetry OTLP 端点(可选) |
|
||
|
||
## 模块结构
|
||
|
||
```
|
||
src/
|
||
├─ config/ # env、database(MySQL)、neo4j
|
||
├─ shared/
|
||
│ ├─ errors/ # ApplicationError + GlobalErrorFilter(CONTENT_* 前缀)
|
||
│ └─ observability/# logger、metrics、tracer
|
||
├─ textbooks/ # 教材/章节/知识点 + 知识图谱
|
||
├─ app.module.ts
|
||
└─ main.ts
|
||
```
|
||
|
||
## 关键端点
|
||
|
||
- `POST /textbooks` 创建教材
|
||
- `GET /textbooks` 教材列表
|
||
- `GET /textbooks/:id` 教材详情
|
||
- `TextbooksService.createKnowledgeGraph` 在 Neo4j 构建知识点前置依赖
|
||
- `TextbooksService.getPrerequisites` 查询知识点前置链路
|
||
|
||
## 健康检查
|
||
|
||
| 端点 | 用途 | 鉴权 |
|
||
| -------------- | ------------------------------------------------- | ---- |
|
||
| `GET /healthz` | 存活探针(liveness),仅返回进程状态,不检查依赖 | 无 |
|
||
| `GET /readyz` | 就绪探针(readiness),检查 DB 连接,失败返回 503 | 无 |
|
||
|
||
实现见 `src/shared/health/health.controller.ts`,5 个 NestJS 服务(iam/core-edu/content/msg/classes)一致。
|
||
|
||
## 对外契约
|
||
|
||
gRPC 服务 `TextbookService`、`KnowledgeGraphService` 定义见 `packages/shared-proto/proto/content.proto`。
|