mirror of
https://github.com/docmost/docmost.git
synced 2025-11-22 22:21:09 +10:00
46 lines
1.2 KiB
TypeScript
46 lines
1.2 KiB
TypeScript
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<MailMessage, void>): Promise<void> {
|
|
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<void> {
|
|
if (this.worker) {
|
|
await this.worker.close();
|
|
}
|
|
}
|
|
}
|