- 新增 docker-compose.dev-apps.yml:7 个应用服务容器化
(iam/classes/core-edu/content/msg/push-gateway/api-gateway)
+ apollo-router override
- 新增 apollo-router dev-apps-entrypoint.sh / dev-apps-supergraph.yaml
仅等待 5 个子图(iam/core-edu/content/msg/config-service)
避免等待未启动的 ai/data-ana
- router.yaml:移除 v1.45 不兼容键
(require_manifest/manifest_path/max_cost/max_batch_size)
移除 ELv2 受限特性(persisted_queries/limits.max_depth)
自托管无 GraphOS license
- docker-compose.yml:config-service 添加 NODE_ENV=production
修复 pino-pretty devDep 误用
apollo-router 添加 APOLLO_PERSISTED_QUERIES env
- services/{classes,core-edu,content,config-service}/Dockerfile
重写为 repo 根 context + shared-ts/shared-proto 工作区依赖
+ --ignore-scripts
修复 ERR_PNPM_WORKSPACE_PKG_NOT_FOUND 与 ERR_PNPM_IGNORED_BUILDS
- api-gateway healthcheck:wget --spider 改为 wget -O /dev/null
修复 busybox 对 200+body 误报 exit 8
core-edu 教学核心服务
P3 核心教学阶段骨架 | 端口 3004
职责
core-edu 是教学核心限界上下文,合并 P1 的 classes 域,管理考试 / 作业 / 成绩聚合。 覆盖教学全链路:考试发布、作业提交、成绩录入与查询。
模块结构
src/
├─ config/ # env / database / kafka
├─ shared/
│ ├─ outbox/ # 事务性发件箱(schema + repository + publisher)
│ ├─ errors/ # 应用错误 + 全局错误过滤器
│ └─ observability/ # logger / metrics / tracer
├─ middleware/ # auth.middleware / permission.guard
├─ classes/ # P3 待合并(骨架)
├─ exams/ # 考试域
├─ homework/ # 作业域
├─ grades/ # 成绩域
├─ app.module.ts
└─ main.ts
关键机制
- Outbox 模式:写业务数据同事务写
core_edu_outbox,OutboxPublisher 定时扫描并发送到 Kafka,保证事件可靠投递。 - Kafka 集成:idempotent + transactional producer,按 eventType 路由到
edu.{domain}.events主题。 - 事件契约:见
packages/shared-proto/proto/events.proto。
开发
pnpm install
pnpm dev # 端口 3004
pnpm typecheck
pnpm lint
pnpm test
环境变量
| 变量 | 说明 | 默认 |
|---|---|---|
PORT |
服务端口 | 3004 |
DATABASE_URL |
MySQL 连接串 | - |
KAFKA_BROKERS |
Kafka broker 列表(逗号分隔) | localhost:9092 |
JWT_SECRET |
JWT 密钥 | - |
OTEL_EXPORTER_OTLP_ENDPOINT |
OTLP 上报地址(可选) | - |
健康检查
| 端点 | 用途 | 鉴权 |
|---|---|---|
GET /healthz |
存活探针(liveness),仅返回进程状态,不检查依赖 | 无 |
GET /readyz |
就绪探针(readiness),检查 DB 连接,失败返回 503 | 无 |
实现见 src/shared/health/health.controller.ts,5 个 NestJS 服务(iam/core-edu/content/msg/classes)一致。