From 4716620a434f2db70166d1f1494b0d38195506c6 Mon Sep 17 00:00:00 2001 From: morteza-mortezai Date: Wed, 24 Dec 2025 23:57:16 +0330 Subject: [PATCH] register payment listener --- src/modules/orders/orders.module.ts | 6 +++--- .../payments/controllers/payments.controller.ts | 2 +- src/modules/payments/events/payment.events.ts | 1 + src/modules/payments/listeners/payment.listeners.ts | 4 ++-- src/modules/payments/payments.module.ts | 11 ++++++++--- src/modules/payments/services/payments.service.ts | 4 ++-- 6 files changed, 17 insertions(+), 11 deletions(-) diff --git a/src/modules/orders/orders.module.ts b/src/modules/orders/orders.module.ts index e4eaf69..883e619 100644 --- a/src/modules/orders/orders.module.ts +++ b/src/modules/orders/orders.module.ts @@ -1,4 +1,4 @@ -import { Module } from '@nestjs/common'; +import { Module, forwardRef } from '@nestjs/common'; import { MikroOrmModule } from '@mikro-orm/nestjs'; import { OrdersService } from './providers/orders.service'; import { OrdersController } from './controllers/orders.controller'; @@ -27,7 +27,7 @@ import { InventoryModule } from '../inventory/inventory.module'; CartModule, UtilsModule, AuthModule, - PaymentsModule, + forwardRef(() => PaymentsModule), JwtModule, AdminModule, NotificationsModule, @@ -35,6 +35,6 @@ import { InventoryModule } from '../inventory/inventory.module'; ], controllers: [OrdersController], providers: [OrdersService, OrderRepository, OrderListeners, OrdersCrone], - exports: [OrderRepository], + exports: [OrderRepository, OrdersService], }) export class OrdersModule { } diff --git a/src/modules/payments/controllers/payments.controller.ts b/src/modules/payments/controllers/payments.controller.ts index e2f6abf..004a38c 100644 --- a/src/modules/payments/controllers/payments.controller.ts +++ b/src/modules/payments/controllers/payments.controller.ts @@ -64,7 +64,7 @@ export class PaymentsController { @ApiBody({ type: VerifyPaymentDto }) @ApiNotFoundResponse({ description: 'Payment not found' }) verifyPayment(@Body() verifyPaymentDto: VerifyPaymentDto) { - return this.paymentsService.verifyPayment(verifyPaymentDto.authority, verifyPaymentDto.orderId); + return this.paymentsService.verifyOnlinePayment(verifyPaymentDto.authority, verifyPaymentDto.orderId); } /** admin routes */ diff --git a/src/modules/payments/events/payment.events.ts b/src/modules/payments/events/payment.events.ts index 4759143..3fbc443 100644 --- a/src/modules/payments/events/payment.events.ts +++ b/src/modules/payments/events/payment.events.ts @@ -15,6 +15,7 @@ export class paymentSucceedEvent { export class onlinePaymentSucceedEvent { constructor( public readonly paymentId: string, + public readonly orderId: string, public readonly restaurantId: string, public readonly orderNumber: string, public readonly total: number, diff --git a/src/modules/payments/listeners/payment.listeners.ts b/src/modules/payments/listeners/payment.listeners.ts index 731bb1a..546d4ce 100644 --- a/src/modules/payments/listeners/payment.listeners.ts +++ b/src/modules/payments/listeners/payment.listeners.ts @@ -119,10 +119,10 @@ export class PaymentListeners { }, }); - const order = await this.orderService.findOne(event.paymentId, event.restaurantId); + const order = await this.orderService.findOne(event.orderId, event.restaurantId); if (!order) { this.logger.error( - `Order not found: ${event.paymentId} for restaurant: ${event.restaurantId}`, + `Order not found: ${event.orderId} for restaurant: ${event.restaurantId}`, ); return; } diff --git a/src/modules/payments/payments.module.ts b/src/modules/payments/payments.module.ts index 664da99..a429d7a 100644 --- a/src/modules/payments/payments.module.ts +++ b/src/modules/payments/payments.module.ts @@ -1,4 +1,4 @@ -import { Module } from '@nestjs/common'; +import { Module, forwardRef } from '@nestjs/common'; import { PaymentsService } from './services/payments.service'; import { MikroOrmModule } from '@mikro-orm/nestjs'; import { PaymentMethod } from './entities/payment-method.entity'; @@ -13,13 +13,18 @@ import { ZarinpalGateway } from './gateways/zarinpal.gateway'; import { GatewayManager } from './gateways/gateway.manager'; import { PaymentRepository } from './repositories/payment.repository'; import { InventoryModule } from '../inventory/inventory.module'; +import { PaymentListeners } from './listeners/payment.listeners'; +import { AdminModule } from '../admin/admin.module'; +import { NotificationsModule } from '../notifications/notifications.module'; +import { OrdersModule } from '../orders/orders.module'; @Module({ imports: [MikroOrmModule.forFeature([PaymentMethod, Payment, Restaurant]), - AuthModule, JwtModule, InventoryModule], + AuthModule, JwtModule, InventoryModule, AdminModule, NotificationsModule, + forwardRef(() => OrdersModule)], controllers: [PaymentsController], providers: [PaymentsService, PaymentMethodService, PaymentMethodRepository, - PaymentRepository, ZarinpalGateway, GatewayManager], + PaymentRepository, ZarinpalGateway, GatewayManager, PaymentListeners], exports: [ PaymentMethodRepository, PaymentRepository, diff --git a/src/modules/payments/services/payments.service.ts b/src/modules/payments/services/payments.service.ts index aaba575..e6a2a48 100644 --- a/src/modules/payments/services/payments.service.ts +++ b/src/modules/payments/services/payments.service.ts @@ -168,7 +168,7 @@ export class PaymentsService { }; } - async verifyPayment(transactionId: string, orderId: string): Promise { + async verifyOnlinePayment(transactionId: string, orderId: string): Promise { const payment = await this.em.transactional(async em => { const payment = await em.findOne( Payment, @@ -214,7 +214,7 @@ export class PaymentsService { }); this.eventEmitter.emit( onlinePaymentSucceedEvent.name, - new onlinePaymentSucceedEvent(payment.id, payment.order.restaurant.id, String(payment.order?.orderNumber) || '', payment.amount), + new onlinePaymentSucceedEvent(payment.id, payment.order.id, payment.order.restaurant.id, String(payment.order?.orderNumber) || '', payment.amount), ); return payment; }