import { Module } from "@nestjs/common"; import { APP_GUARD } from "@nestjs/core"; import { NotificationsModule } from "./notifications/notifications.module.js"; import { PreferencesModule } from "./preferences/preferences.module.js"; import { TemplatesModule } from "./templates/templates.module.js"; import { AnnouncementsModule } from "./announcements/announcements.module.js"; import { GrpcModule } from "./grpc/grpc.module.js"; import { HealthModule } from "./shared/health/health.module.js"; import { PermissionGuard } from "./middleware/permission.guard.js"; import { LifecycleService } from "./shared/lifecycle/lifecycle.service.js"; import { KafkaConsumerService } from "./shared/kafka/kafka.consumer.js"; /** * AppModule —— msg 服务根模块。 * * 仲裁依据: * - M1:gRPC 50056 启用(GrpcModule 注册 3 controller 共 13 RPC,ARB-008 裁剪后) * - HTTP REST + gRPC 双协议入口,共享同一套 Service 单例 * - KafkaConsumerService 消费 12 类事件触发通知 * - AnnouncementsModule 提供公告广播 + 每用户已读跟踪 * * 模块依赖图: * AppModule * ├─ NotificationsModule(REST + Service) * ├─ PreferencesModule(REST + Service) * ├─ TemplatesModule(REST + Service) * ├─ AnnouncementsModule(REST + Service,公告广播) * ├─ GrpcModule(gRPC controllers,imports 上述模块获取 Service) * ├─ HealthModule(/healthz + /readyz) * └─ providers: PermissionGuard(APP_GUARD) + LifecycleService + KafkaConsumerService */ @Module({ imports: [ NotificationsModule, PreferencesModule, TemplatesModule, AnnouncementsModule, GrpcModule, HealthModule, ], providers: [ { provide: APP_GUARD, useClass: PermissionGuard }, LifecycleService, KafkaConsumerService, ], }) export class AppModule {}