import { Inject, Injectable } from '@nestjs/common'; import { QueueCronJobOptions, QueueJobOptions, } from 'src/engine/integrations/message-queue/drivers/interfaces/job-options.interface'; import { MessageQueueDriver } from 'src/engine/integrations/message-queue/drivers/interfaces/message-queue-driver.interface'; import { MessageQueueJobData, MessageQueueJob, } from 'src/engine/integrations/message-queue/interfaces/message-queue-job.interface'; import { MessageQueueWorkerOptions } from 'src/engine/integrations/message-queue/interfaces/message-queue-worker-options.interface'; import { MessageQueue, QUEUE_DRIVER, } from 'src/engine/integrations/message-queue/message-queue.constants'; @Injectable() export class MessageQueueService { constructor( @Inject(QUEUE_DRIVER) protected driver: MessageQueueDriver, protected queueName: MessageQueue, ) { if (typeof this.driver.register === 'function') { this.driver.register(queueName); } } add( jobName: string, data: T, options?: QueueJobOptions, ): Promise { return this.driver.add(this.queueName, jobName, data, options); } addCron( jobName: string, data: T, options?: QueueCronJobOptions, ): Promise { return this.driver.addCron(this.queueName, jobName, data, options); } removeCron(jobName: string, pattern: string): Promise { return this.driver.removeCron(this.queueName, jobName, pattern); } work( handler: (job: MessageQueueJob) => Promise | void, options?: MessageQueueWorkerOptions, ) { return this.driver.work(this.queueName, handler, options); } }