From a565f930443b56e6436500794f15a0ff03ecf23f Mon Sep 17 00:00:00 2001 From: morteza-mortezai Date: Tue, 23 Jun 2026 12:53:55 +0330 Subject: [PATCH] notif after rest create order --- .../interfaces/notification.interface.ts | 2 +- src/modules/orders/events/order.events.ts | 3 ++ .../orders/listeners/order.listeners.ts | 39 ++++++++++++++++--- .../orders/providers/orders.service.ts | 4 +- 4 files changed, 40 insertions(+), 8 deletions(-) diff --git a/src/modules/notifications/interfaces/notification.interface.ts b/src/modules/notifications/interfaces/notification.interface.ts index c97ca61..9a44fdc 100644 --- a/src/modules/notifications/interfaces/notification.interface.ts +++ b/src/modules/notifications/interfaces/notification.interface.ts @@ -24,7 +24,7 @@ export interface NotifRequestMessage { templateId: string; parameters?: Record; }; - pushNotif: { + pushNotif?: { title: string; content: string; icon: string; diff --git a/src/modules/orders/events/order.events.ts b/src/modules/orders/events/order.events.ts index 5348149..8406e6d 100644 --- a/src/modules/orders/events/order.events.ts +++ b/src/modules/orders/events/order.events.ts @@ -1,11 +1,14 @@ import type { OrderStatus, StatusTransitionRef } from '../interface/order.interface'; +export type OrderCreatedRef = 'user' | 'restaurant'; + export class OrderCreatedEvent { constructor( public readonly orderId: string, public readonly restaurantId: string, public readonly orderNumber: string, public readonly total: number, + public readonly ref: OrderCreatedRef, ) {} } diff --git a/src/modules/orders/listeners/order.listeners.ts b/src/modules/orders/listeners/order.listeners.ts index cd27abe..4efb934 100644 --- a/src/modules/orders/listeners/order.listeners.ts +++ b/src/modules/orders/listeners/order.listeners.ts @@ -55,17 +55,46 @@ export class OrderListeners { `Order created event received: ${event.orderId} for restaurant: ${event.restaurantId} and order number: ${event.orderNumber}`, ); - const order = await this.OrderRepository.findOne(event.orderId); + const order = await this.OrderRepository.findOne( + { id: event.orderId }, + { populate: ['user', 'paymentMethod'] as never }, + ); + if (!order?.user?.id) { + this.logger.error(`Order user not found for order created event: ${event.orderId}`); + return; + } if (order?.paymentMethod.method === PaymentMethodEnum.Online) { return; } + if (event.ref === 'restaurant') { + await this.notificationService.sendNotification({ + restaurantId: event.restaurantId, + message: { + title: NotifTitleEnum.ORDER_CREATED, + content: `سفارش شماره ${event.orderNumber} با مبلغ ${event.total} تومان با موفقیت ایجاد شد`, + sms: { + templateId: this.orderCreatedSmsTemplateId, + parameters: { + orderNumber: event.orderNumber, + total: event.total.toString(), + }, + }, + }, + recipients: [{ userId: order.user.id }], + metadata: { + priority: 1, + }, + }); + return; + } - // get admnin os restuaraant that have order permissuins + // If order is created by user, notify both restaurant admins and the user. const admins = await this.adminService.findAdminsWithPermission(event.restaurantId, Permission.NEW_ORDER_NOTIFICATION); - const recipients = admins.map(admin => ({ - adminId: admin.id, - })); + const recipients = [ + ...admins.map(admin => ({ adminId: admin.id })), + { userId: order.user.id }, + ]; await this.notificationService.sendNotification({ restaurantId: event.restaurantId, diff --git a/src/modules/orders/providers/orders.service.ts b/src/modules/orders/providers/orders.service.ts index a8a5ec0..16589ea 100644 --- a/src/modules/orders/providers/orders.service.ts +++ b/src/modules/orders/providers/orders.service.ts @@ -141,7 +141,7 @@ console.log(cart); const { paymentUrl } = await this.paymentsService.payOrder(order.id); this.eventEmitter.emit( OrderCreatedEvent.name, - new OrderCreatedEvent(order.id, restaurantId, String(order?.orderNumber) || '', order.total), + new OrderCreatedEvent(order.id, restaurantId, String(order?.orderNumber) || '', order.total, 'user'), ); return { paymentUrl, order }; @@ -228,7 +228,7 @@ console.log(cart); this.eventEmitter.emit( OrderCreatedEvent.name, - new OrderCreatedEvent(order.id, restaurantId, String(order?.orderNumber) || '', order.total), + new OrderCreatedEvent(order.id, restaurantId, String(order?.orderNumber) || '', order.total, 'restaurant'), ); return order;