order and payment notifs

This commit is contained in:
2025-12-20 21:46:15 +03:30
parent e0df01053b
commit cb532a7941
5 changed files with 47 additions and 20 deletions
@@ -5,6 +5,7 @@ export class OrderCreatedEvent {
public readonly orderId: string,
public readonly restaurantId: string,
public readonly orderNumber: string,
public readonly total: number,
) {}
}
@@ -13,13 +13,15 @@ import { OrderStatus } from '../interface/order.interface';
export class OrderListeners {
private readonly logger = new Logger(OrderListeners.name);
private orderCreatedSmsTemplateId: string;
private orderStatusChangedSmsTemplateId: string;
constructor(
private readonly adminService: AdminRepository,
private readonly OrderRepository: OrderRepository,
private readonly notificationService: NotificationService,
private readonly configService: ConfigService,
) {
this.orderCreatedSmsTemplateId = this.configService.get<string>('ORDER_CREATED_SMS_TEMPLATE_ID') ?? '123';
this.orderCreatedSmsTemplateId = this.configService.get<string>('SMS_PATTERN_ORDER_CREATED') ?? '123';
this.orderStatusChangedSmsTemplateId = this.configService.get<string>('SMS_PATTERN_ORDER_STATUS_CHANGE') ?? '123';
}
@OnEvent(OrderCreatedEvent.name)
@@ -37,20 +39,21 @@ export class OrderListeners {
restaurantId: event.restaurantId,
message: {
title: NotifTitleEnum.ORDER_CREATED,
content: `Order ${event.orderNumber} has been created successfully`,
content: `Order ${event.orderNumber} with ${event.total} has been created successfully`,
sms: {
templateId: this.orderCreatedSmsTemplateId,
parameters: {
orderNumber: event.orderNumber,
total: event.total.toString(),
},
},
pushNotif: {
title: `Order ${event.orderNumber} has been created successfully`,
content: `Order ${event.orderNumber} has been created successfully`,
icon: `Order ${event.orderNumber} has been created successfully`,
title: `Order ${event.orderNumber} with ${event.total} has been created successfully`,
content: `Order ${event.orderNumber} with ${event.total} has been created successfully`,
icon: `/`,
action: {
type: `Order ${event.orderNumber} has been created successfully`,
url: `Order ${event.orderNumber} has been created successfully`,
type: NotifTitleEnum.ORDER_CREATED,
url: `/`,
},
},
},
@@ -90,7 +93,26 @@ export class OrderListeners {
];
await this.notificationService.sendNotification({
restaurantId: event.restaurantId,
message: this.factory(event.newStatus, event)?.message,
message: {
title: NotifTitleEnum.ORDER_STATUS_CHANGED,
content: `Order #${event.orderNumber} status is changed to ${event.newStatus} .`,
sms: {
templateId: this.orderStatusChangedSmsTemplateId,
parameters: {
orderNumber: event.orderNumber,
status: event.newStatus,
},
},
pushNotif: {
title: `Order #${event.orderNumber} status is changed to ${event.newStatus} .`,
content: `Order #${event.orderNumber} status is changed to ${event.newStatus} .`,
icon: `/`,
action: {
type: NotifTitleEnum.ORDER_STATUS_CHANGED,
url: ``,
},
},
},
recipients,
metadata: {
priority: 1,
@@ -56,7 +56,7 @@ export class OrdersService {
private readonly paymentsService: PaymentsService,
private readonly inventoryService: InventoryService,
private readonly eventEmitter: EventEmitter2,
) {}
) { }
async checkout(userId: string, restaurantId: string) {
const cart = await this.cartService.findOneOrFail(userId, restaurantId);
@@ -133,7 +133,7 @@ export class OrdersService {
const { paymentUrl } = await this.paymentsService.payOrder(order.id);
this.eventEmitter.emit(
OrderCreatedEvent.name,
new OrderCreatedEvent(order.id, restaurantId, String(order?.orderNumber) || ''),
new OrderCreatedEvent(order.id, restaurantId, String(order?.orderNumber) || '', order.total),
);
return { paymentUrl, order };
@@ -1,8 +1,12 @@
import { PaymentMethodEnum } from "../interface/payment";
export class paymentSucceedEvent {
constructor(
public readonly orderId: string,
public readonly restaurantId: string,
public readonly orderNumber: string,
public readonly paymentMethod: PaymentMethodEnum,
public readonly total:number
) {}
}
@@ -10,14 +10,14 @@ import { ConfigService } from '@nestjs/config';
@Injectable()
export class OrderListeners {
private readonly logger = new Logger(OrderListeners.name);
private orderCreatedSmsTemplateId: string;
private paymentSuccessSmsTemplateId: string;
constructor(
private readonly adminService: AdminRepository,
private readonly notificationService: NotificationService,
private readonly configService: ConfigService,
// private readonly orderSer
) {
this.orderCreatedSmsTemplateId = this.configService.get<string>('ORDER_CREATED_SMS_TEMPLATE_ID') ?? '123';
this.paymentSuccessSmsTemplateId = this.configService.get<string>('SMS_PATTERN_PAYMENT_SUCCESS') ?? '123';
}
@OnEvent(paymentSucceedEvent.name)
@@ -35,21 +35,21 @@ export class OrderListeners {
await this.notificationService.sendNotification({
restaurantId: event.restaurantId,
message: {
title: NotifTitleEnum.ORDER_CREATED,
content: `payment order #${event.orderNumber} has been paid successfully`,
title: NotifTitleEnum.PAYMENT_SUCCESS,
content: `payment order #${event.orderNumber} has been paid successfully with ${event.paymentMethod} method and total amount of ${event.total}`,
sms: {
templateId: this.orderCreatedSmsTemplateId,
templateId: this.paymentSuccessSmsTemplateId,
parameters: {
orderNumber: event.orderNumber,
},
},
pushNotif: {
title: `Payment Order ${event.orderNumber} has been paid successfully`,
content: `Payment Order ${event.orderNumber} has been paid successfully`,
icon: `Payment Order ${event.orderNumber} has been paid successfully`,
title: `Payment Order ${event.orderNumber} has been paid successfully with ${event.paymentMethod} method and total amount of ${event.total} `,
content: `Payment Order ${event.orderNumber} has been paid successfully with ${event.paymentMethod} method and total amount of ${event.total} `,
icon: ``,
action: {
type: `Payment Order ${event.orderNumber} has been paid successfully`,
url: `Payment Order ${event.orderNumber} has been paid successfully`,
type: NotifTitleEnum.PAYMENT_SUCCESS,
url: `/`,
},
},
},