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 { Driver } from './modules/drivers/entities/driver.entity'; import { DriverTrack } from './modules/locations/entities/driver-track.entity'; import { LocationFlusherService } from './modules/locations/location-flusher.service'; /** * وحدة الـworker — عملية منفصلة (`node dist/worker.js`) لا تخدم HTTP. * * تُعلن المفرّغ مباشرةً بدل استيراد `LocationsModule`: المفرّغ يحقن Redis * ومستودعَين لا غير، بينما الوحدة تجرّ خلفها الجيوفنس ← الإشعارات ← * المستخدمين ← المستأجرين، وأربعة متحكّمات HTTP في عملية بلا HTTP. * جذر التجميع هنا مستقلّ عن AppModule، فالوحدات `@Global` لا تصل مجّاناً — * وأضيق شجرة هي أقلّها مفاجآت عند الإقلاع. */ @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, TypeOrmModule.forFeature([Driver, DriverTrack]), ], providers: [LocationFlusherService], }) export class WorkerModule {}