gcx/backend/services/notification-service
hailin 8adead23b6 feat: 设备推送系统 — FCM/APNs/HMS/小米/OPPO/vivo 多通道推送 + PROMOTION广告类型
新增设备推送通道架构,支持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>
2026-02-12 23:48:52 -08:00
..
src feat: 设备推送系统 — FCM/APNs/HMS/小米/OPPO/vivo 多通道推送 + PROMOTION广告类型 2026-02-12 23:48:52 -08:00
Dockerfile feat: 完成全部后端微服务开发 (10服务/373文件/15586行代码) 2026-02-12 17:09:12 -08:00
nest-cli.json feat: 完成全部后端微服务开发 (10服务/373文件/15586行代码) 2026-02-12 17:09:12 -08:00
package.json feat: 完成全部后端微服务开发 (10服务/373文件/15586行代码) 2026-02-12 17:09:12 -08:00
tsconfig.json feat: 完成全部后端微服务开发 (10服务/373文件/15586行代码) 2026-02-12 17:09:12 -08:00