import { Module } from '@nestjs/common'; import { ConfigModule, ConfigService } from '@nestjs/config'; import { BullModule } from '@nestjs/bullmq'; import { PrismaModule } from './shared/prisma/prisma.module'; import { RenderEngineModule } from './shared/render-engine/render-engine.module'; import { QuotaModule } from './shared/quota/quota.module'; import { AuditModule } from './shared/audit/audit.module'; import { YouTubeSyncModule } from './modules/youtube-sync/youtube-sync.module'; import { BulkJobsModule } from './modules/bulk-jobs/bulk-jobs.module'; import { LintingModule } from './modules/linting/linting.module'; import { ImportsModule } from './modules/imports/imports.module'; import { QUEUES } from './queues/queues.constants'; import { YouTubeSyncProcessor } from './queues/processors/youtube-sync.processor'; import { BulkMetadataProcessor } from './queues/processors/bulk-metadata.processor'; import { RenderProcessor } from './queues/processors/render.processor'; import { LintProcessor } from './queues/processors/lint.processor'; import { ImportProcessor } from './queues/processors/import.processor'; import { ConflictDetectionProcessor } from './queues/processors/conflict-detection.processor'; import { ConflictDetectionScheduler } from './queues/schedulers/conflict-detection.scheduler'; @Module({ imports: [ ConfigModule.forRoot({ isGlobal: true }), BullModule.forRootAsync({ useFactory: (config: ConfigService) => ({ connection: { url: config.get('REDIS_URL') ?? 'redis://localhost:6379' }, }), inject: [ConfigService], }), BullModule.registerQueue( { name: QUEUES.YOUTUBE_SYNC }, { name: QUEUES.CONFLICT_DETECTION }, { name: QUEUES.BULK_METADATA }, { name: QUEUES.RENDER }, { name: QUEUES.LINT }, { name: QUEUES.IMPORT }, ), PrismaModule, RenderEngineModule, QuotaModule, AuditModule, YouTubeSyncModule, BulkJobsModule, LintingModule, ImportsModule, ], providers: [ YouTubeSyncProcessor, BulkMetadataProcessor, RenderProcessor, LintProcessor, ImportProcessor, ConflictDetectionProcessor, ConflictDetectionScheduler, ], }) export class WorkerModule {}