import { Module } from '@nestjs/common'; import { ConfigModule, ConfigService } from '@nestjs/config'; import { TypeOrmModule } from '@nestjs/typeorm'; import configuration from './config/configuration'; import { RedisModule } from './common/redis/redis.module'; import { I18nModule } from './common/i18n/i18n.module'; import { CacheModule } from './common/cache/cache.module'; import { LocationsModule } from './modules/locations/locations.module'; /** * وحدة الـworker — عملية منفصلة (`node dist/worker.js`) لا تخدم HTTP. * تحمل ما يحتاجه العمل الدوري فقط: قاعدة + Redis + المواقع. * * جذر تجميع ثانٍ مستقل عن AppModule: الوحدات `@Global` تُسجَّل فقط إن * استوردها أحدٌ في الشجرة، فما يسجّله AppModule لا يصل إلى هنا مجّاناً. * المواقع تجرّ الجيوفنس ← الإشعارات ← i18n + cache (وعبر المستخدمين أيضاً). */ @Module({ imports: [ ConfigModule.forRoot({ isGlobal: true, load: [configuration] }), TypeOrmModule.forRootAsync({ inject: [ConfigService], useFactory: (cfg: ConfigService) => ({ type: 'postgres' as const, host: cfg.get('db.host'), port: cfg.get('db.port'), database: cfg.get('db.name'), username: cfg.get('db.user'), password: cfg.get('db.password'), // بركة أصغر من الـAPI: الـworker يكتب دفعات قليلة لا طلبات متزامنة. extra: { max: parseInt(process.env.WORKER_DB_POOL_MAX ?? '5', 10) }, entityPrefix: cfg.get('db.tablePrefix'), synchronize: false, autoLoadEntities: true, }), }), RedisModule, I18nModule, // عالمي — نصوص إشعارات الجيوفنس CacheModule, // عالمي — يحقنه UsersService خلف الإشعارات LocationsModule, ], }) export class WorkerModule {}