新增设备推送通道架构,支持6大推送平台的多通道路由: 【SQL迁移】 - 039_create_device_tokens.sql: device_tokens表 (userId, platform, channel, token, deviceId等) - announcements表新增 PROMOTION 类型约束 【Domain层 — 实体/接口/端口】 - DeviceToken实体: DevicePlatform枚举(ANDROID/IOS) + PushChannel枚举(FCM/APNS/HMS/XIAOMI/OPPO/VIVO) - IDeviceTokenRepository: 6个仓储方法 (findActive/upsert/deactivate/countByChannel) - IPushChannelProvider端口: PushPayload/PushResult类型 + 6个DI Symbol - AnnouncementType枚举: 新增 PROMOTION (广告/促销推送) 【Infrastructure层 — 持久化/推送通道】 - DeviceTokenRepositoryImpl: TypeORM实现,支持批量IN查询(每批500)、token upsert - 6个推送通道Provider (mock骨架,结构完整可直接替换为真实SDK): · FcmPushProvider — Google FCM (firebase-admin) · ApnsPushProvider — Apple APNs (HTTP/2直连,中国区必需) · HmsPushProvider — 华为HMS Push Kit · XiaomiPushProvider — 小米Mi Push · OppoPushProvider — OPPO Push · VivoPushProvider — vivo Push - PushNotificationProvider重构: 从mock改为委托PushDispatcherService 【Application层 — 服务】 - PushDispatcherService: 核心调度器 · sendToUser/sendToUsers → 查device tokens → 按channel分组 → 路由到对应provider · 自动清理无效token (shouldDeactivateToken) - DeviceTokenService: 设备token注册/注销/查询 - AnnouncementService: 公告创建后自动触发设备推送 · BY_TAG → 解析tag对应userIds → pushDispatcher.sendToUsers · SPECIFIC → 直接推送指定userIds 【Interface层 — DTO/Controller】 - RegisterDeviceTokenDto/UnregisterDeviceTokenDto: Swagger + class-validator - DeviceTokenController: POST/DELETE/GET /device-tokens (JWT认证) 【Module注册】 - notification.module.ts: 新增DeviceToken实体、DEVICE_TOKEN_REPOSITORY、 6个push channel provider DI绑定、PushDispatcherService、DeviceTokenService、 DeviceTokenController 推送链路: 公告创建 → triggerPush → PushDispatcher → 查token → 按channel分组 → FCM/APNs/HMS/小米/OPPO/vivo Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> |
||
|---|---|---|
| .. | ||
| kong | ||
| migrations | ||
| packages | ||
| scripts | ||
| services | ||
| .env.example | ||
| docker-compose.yml | ||