import { Injectable, Logger } from '@nestjs/common'; import { InjectQueue } from '@nestjs/bullmq'; import { Queue } from 'bullmq'; export const QUEUE_AI_ANALYSIS = 'ai-analysis'; export const QUEUE_DOCUMENT_IMPORT = 'document-import'; export const QUEUE_NOTIFICATION = 'notification'; @Injectable() export class QueueService { private readonly logger = new Logger(QueueService.name); constructor( @InjectQueue(QUEUE_AI_ANALYSIS) private readonly aiQueue: Queue, @InjectQueue(QUEUE_DOCUMENT_IMPORT) private readonly importQueue: Queue, @InjectQueue(QUEUE_NOTIFICATION) private readonly notifyQueue: Queue, ) {} async add(queueName: string, data: any) { const queue = this.getQueue(queueName); const job = await queue.add(queueName, data); this.logger.log(`Job ${job.id} added to ${queueName}`); return job; } async getJob(queueName: string, jobId: string) { const queue = this.getQueue(queueName); return queue.getJob(jobId); } private getQueue(name: string): Queue { switch (name) { case QUEUE_AI_ANALYSIS: return this.aiQueue; case QUEUE_DOCUMENT_IMPORT: return this.importQueue; case QUEUE_NOTIFICATION: return this.notifyQueue; default: throw new Error(`Unknown queue: ${name}`); } } }