import { Injectable, Logger } from '@nestjs/common'; import { OnWorkerEvent, Processor, WorkerHost } from '@nestjs/bullmq'; import { QueueName } from '../../queue/constants'; import { Job } from 'bullmq'; import { MailService } from '../mail.service'; @Injectable() @Processor(QueueName.EMAIL_QUEUE) export class EmailProcessor extends WorkerHost { private readonly logger = new Logger(EmailProcessor.name); constructor(private readonly mailService: MailService) { super(); } async process(job: Job): Promise { try { await this.mailService.sendEmail(job.data); } catch (err) { throw err; } } @OnWorkerEvent('active') onActive(job: Job) { this.logger.debug(`Processing ${job.name} job`); } @OnWorkerEvent('failed') onError(job: Job) { this.logger.warn( `Error processing ${job.name} job. Reason: ${job.failedReason}`, ); } @OnWorkerEvent('completed') onCompleted(job: Job) { this.logger.debug(`Completed ${job.name} job`); } }