This commit is contained in:
@@ -24,7 +24,7 @@ export interface NotifRequestMessage {
|
|||||||
templateId: string;
|
templateId: string;
|
||||||
parameters?: Record<string, string>;
|
parameters?: Record<string, string>;
|
||||||
};
|
};
|
||||||
pushNotif: {
|
pushNotif?: {
|
||||||
title: string;
|
title: string;
|
||||||
content: string;
|
content: string;
|
||||||
icon: string;
|
icon: string;
|
||||||
|
|||||||
@@ -1,11 +1,14 @@
|
|||||||
import type { OrderStatus, StatusTransitionRef } from '../interface/order.interface';
|
import type { OrderStatus, StatusTransitionRef } from '../interface/order.interface';
|
||||||
|
|
||||||
|
export type OrderCreatedRef = 'user' | 'restaurant';
|
||||||
|
|
||||||
export class OrderCreatedEvent {
|
export class OrderCreatedEvent {
|
||||||
constructor(
|
constructor(
|
||||||
public readonly orderId: string,
|
public readonly orderId: string,
|
||||||
public readonly restaurantId: string,
|
public readonly restaurantId: string,
|
||||||
public readonly orderNumber: string,
|
public readonly orderNumber: string,
|
||||||
public readonly total: number,
|
public readonly total: number,
|
||||||
|
public readonly ref: OrderCreatedRef,
|
||||||
) {}
|
) {}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -55,17 +55,46 @@ export class OrderListeners {
|
|||||||
`Order created event received: ${event.orderId} for restaurant: ${event.restaurantId} and order number: ${event.orderNumber}`,
|
`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) {
|
if (order?.paymentMethod.method === PaymentMethodEnum.Online) {
|
||||||
return;
|
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 admins = await this.adminService.findAdminsWithPermission(event.restaurantId, Permission.NEW_ORDER_NOTIFICATION);
|
||||||
const recipients = admins.map(admin => ({
|
const recipients = [
|
||||||
adminId: admin.id,
|
...admins.map(admin => ({ adminId: admin.id })),
|
||||||
}));
|
{ userId: order.user.id },
|
||||||
|
];
|
||||||
|
|
||||||
await this.notificationService.sendNotification({
|
await this.notificationService.sendNotification({
|
||||||
restaurantId: event.restaurantId,
|
restaurantId: event.restaurantId,
|
||||||
|
|||||||
@@ -141,7 +141,7 @@ console.log(cart);
|
|||||||
const { paymentUrl } = await this.paymentsService.payOrder(order.id);
|
const { paymentUrl } = await this.paymentsService.payOrder(order.id);
|
||||||
this.eventEmitter.emit(
|
this.eventEmitter.emit(
|
||||||
OrderCreatedEvent.name,
|
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 };
|
return { paymentUrl, order };
|
||||||
@@ -228,7 +228,7 @@ console.log(cart);
|
|||||||
|
|
||||||
this.eventEmitter.emit(
|
this.eventEmitter.emit(
|
||||||
OrderCreatedEvent.name,
|
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;
|
return order;
|
||||||
|
|||||||
Reference in New Issue
Block a user