api-server/src/infrastructure/queue/queue.service.ts

42 lines
1.3 KiB
TypeScript
Raw Normal View History

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';
export const QUEUE_AUDIT_LOG = 'audit-logs';
export const QUEUE_FILE_CLEANUP = 'file-cleanup';
@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}`);
}
}
}