# Msg 消息通知服务

> 版本：0.1（P5 骨架）
> 端口：3007

## 职责

消息通知限界上下文，管理通知的多渠道分发（站内信、邮件、短信、推送）。
消费 Kafka 事件，写入 MySQL + Elasticsearch，调用 Push Gateway 实时推送。

## 技术栈

- NestJS 10 + TypeScript 5
- Drizzle ORM + MySQL 8
- Elasticsearch 8（全文检索）
- Kafka（事件消费，骨架）
- pino + prom-client + OpenTelemetry

## 开发

```bash
pnpm install
pnpm dev   # http://localhost:3007
```

## API

| 方法 | 路径                     | 说明             |
| ---- | ------------------------ | ---------------- |
| POST | /notifications           | 发送通知         |
| GET  | /notifications           | 查询用户通知列表 |
| POST | /notifications/:id/read  | 标记已读         |
| GET  | /notifications/search?q= | 全文检索通知     |

## 健康检查

| 端点           | 用途                                              | 鉴权 |
| -------------- | ------------------------------------------------- | ---- |
| `GET /healthz` | 存活探针（liveness），仅返回进程状态，不检查依赖  | 无   |
| `GET /readyz`  | 就绪探针（readiness），检查 DB 连接，失败返回 503 | 无   |

实现见 `src/shared/health/health.controller.ts`，5 个 NestJS 服务（iam/core-edu/content/msg/classes）一致。

## 环境变量

| 变量          | 默认值                | 说明               |
| ------------- | --------------------- | ------------------ |
| PORT          | 3007                  | 服务端口           |
| DATABASE_URL  | -                     | MySQL 连接串       |
| KAFKA_BROKERS | localhost:9092        | Kafka broker 列表  |
| ES_URL        | http://localhost:9200 | Elasticsearch 地址 |
| JWT_SECRET    | -                     | JWT 密钥           |
