import { Logger, OnModuleDestroy } from '@nestjs/common'; import { OnWorkerEvent, Processor, WorkerHost } from '@nestjs/bullmq'; import { QueueName } from '../../queue/constants'; import { Job } from 'bullmq'; import { MailService } from '../mail.service'; import { MailMessage } from '../interfaces/mail.message'; @Processor(QueueName.EMAIL_QUEUE) export class EmailProcessor extends WorkerHost implements OnModuleDestroy { 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.error( `Error processing ${job.name} job. Reason: ${job.failedReason}`, ); } @OnWorkerEvent('completed') onCompleted(job: Job) { this.logger.debug(`Completed ${job.name} job`); } async onModuleDestroy(): Promise { if (this.worker) { await this.worker.close(); } } }