From 7773a4f45e656040565eecb0370c99b4557776ad Mon Sep 17 00:00:00 2001 From: jos3duardo Date: Mon, 11 Aug 2025 23:53:58 -0400 Subject: [PATCH] Refactor payment processing to utilize PaymentJobData and streamline execution logic --- .../services/process-payment.service.ts | 53 ++----------------- 1 file changed, 4 insertions(+), 49 deletions(-) diff --git a/src/modules/payments/services/process-payment.service.ts b/src/modules/payments/services/process-payment.service.ts index 478218b..d399334 100644 --- a/src/modules/payments/services/process-payment.service.ts +++ b/src/modules/payments/services/process-payment.service.ts @@ -1,64 +1,19 @@ import { Injectable, Logger } from '@nestjs/common'; -import { InjectRepository } from '@nestjs/typeorm'; -import { Payment } from '../entities/payment.entity'; -import { Repository } from 'typeorm'; -import { HealthService } from '../../health/services/health.service'; -import { ProcessorTypeEnum } from '../enumns/processor-type.enum'; -import { PaymentStatusEnum } from '../enumns/payment-status.enum'; import { PaymentDefaultProcessor } from '../processor/payment-default.processor'; import { PaymentFallbackProcessor } from '../processor/payment-fallback.processor'; +import { PaymentJobData } from '../../queue/queue.service'; @Injectable() export class ProcessPaymentService { private readonly logger = new Logger(ProcessPaymentService.name); constructor( - @InjectRepository(Payment) private readonly repository: Repository, - private healthService: HealthService, private paymentDefaultProcessor: PaymentDefaultProcessor, private paymentFallbackProcessor: PaymentFallbackProcessor, ) {} - async execute(paymentId: string): Promise { - const payment = await this.repository.findOne({ - where: { id: paymentId }, - }); - - if (!payment) { - throw new Error(`Payment ${paymentId} not found`); - } - - await this.repository.update(paymentId, { - status: PaymentStatusEnum.PROCESSING, - }); - - const preferredProcessor = this.healthService.getPreferredProcessor(); - - if (!preferredProcessor) { - throw new Error('No payment processor available'); - } - - try { - if (preferredProcessor === ProcessorTypeEnum.DEFAULT) { - await this.paymentDefaultProcessor.execute(payment); - } else { - await this.paymentFallbackProcessor.execute(payment); - } - } catch (error) { - this.logger.error( - `Error processing payment ${paymentId}:`, - error.message, - ); - - const status = - payment.attempts >= 2 - ? PaymentStatusEnum.FAILED - : PaymentStatusEnum.RETRY; - - await this.repository.update(payment.id, { - status, - attempts: +payment.attempts + 1, - }); - } + async execute(job: PaymentJobData): Promise { + const result = await this.paymentDefaultProcessor.execute(job); + if (!result) await this.paymentFallbackProcessor.execute(job); } }