From 6484d0afb456539d1ca5d93172ba43090430e24a Mon Sep 17 00:00:00 2001 From: jos3duardo Date: Sat, 9 Aug 2025 22:36:59 -0400 Subject: [PATCH] Add QueueService for managing payment jobs in the payment processing queue --- src/modules/queue/queue.service.ts | 44 ++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 src/modules/queue/queue.service.ts diff --git a/src/modules/queue/queue.service.ts b/src/modules/queue/queue.service.ts new file mode 100644 index 0000000..e92eae9 --- /dev/null +++ b/src/modules/queue/queue.service.ts @@ -0,0 +1,44 @@ +import { Injectable } from '@nestjs/common'; +import { InjectQueue } from '@nestjs/bullmq'; +import { Queue } from 'bullmq'; +import { CreatePaymentDto } from '../payments/dto/create-payment.dto'; +import { PAYMENT_QUEUE } from './constants/queue.constants'; + +export interface PaymentJobData { + paymentId: string; + paymentData: CreatePaymentDto; + retryCount?: number; +} + +@Injectable() +export class QueueService { + constructor(@InjectQueue(PAYMENT_QUEUE) private paymentQueue: Queue) {} + + async addPaymentJob(data: PaymentJobData): Promise { + await this.paymentQueue.add(PAYMENT_QUEUE, data, { + attempts: 3, + backoff: { + type: 'exponential', + delay: 2000, + }, + removeOnComplete: 10, + removeOnFail: 5, + }); + } + + async addRetryPaymentJob( + data: PaymentJobData, + delay: number = 5000, + ): Promise { + await this.paymentQueue.add('process-payment', data, { + delay, + attempts: 2, + backoff: { + type: 'exponential', + delay: 3000, + }, + removeOnComplete: 10, + removeOnFail: 5, + }); + } +}