Files
Edu/services/core-edu/README.md
SpecialX 23246ade6d feat(p3): core teaching service with Outbox + Kafka event bus
P3 阶段交付物:
- services/core-edu: 教学核心服务(DDD 限界上下文:exams/grades/homework/classes)
  - exams: 考试 CRUD + 事务内写 exam + outbox
  - grades: 成绩 CRUD
  - homework: 作业 CRUD
  - classes.module: 复用 P1 classes 模块(聚合到 core-edu 服务)
- Outbox 模式实现:
  - outbox.schema.ts: core_edu_outbox 表(id/aggregate_id/event_type/payload/status/retry_count)
  - outbox.repository.ts: 支持事务参数 tx,确保业务+事件原子性
  - outbox.publisher.ts: Kafka idempotent producer + transactionalId,TOPIC_MAP 路由 9 种事件,MAX_RETRY=5
- config/kafka.ts: idempotent producer + transactionalId 配置
- main.ts: 启动顺序 initTracer → connectKafka → outboxPublisher.start → app.listen
- packages/shared-proto/proto/core_edu.proto: ExamService/HomeworkService/GradeService 契约
- packages/shared-proto/proto/events.proto: ClassEvent/ExamEvent/HomeworkEvent/GradeEvent 领域事件契约
2026-07-08 01:38:07 +08:00

53 lines
1.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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`
## 开发
```bash
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 上报地址(可选) | - |