emit order created event

This commit is contained in:
2025-12-19 19:32:16 +03:30
parent 589b2d05e8
commit 2ce7dda168
7 changed files with 281 additions and 7 deletions
@@ -0,0 +1,9 @@
export class paymentSucceedEvent {
constructor(
public readonly orderId: string,
public readonly restaurantId: string,
public readonly orderNumber: string,
) {}
}
@@ -0,0 +1,69 @@
import { Injectable, Logger } from '@nestjs/common';
import { OnEvent } from '@nestjs/event-emitter';
import { AdminRepository } from 'src/modules/admin/repositories/admin.repository';
import { paymentSucceedEvent } from '../events/payment.events';
import { Permission } from 'src/common/enums/permission.enum';
import { NotifTitleEnum } from 'src/modules/notifications/interfaces/notification.interface';
import { NotificationService } from 'src/modules/notifications/services/notification.service';
import { ConfigService } from '@nestjs/config';
@Injectable()
export class OrderListeners {
private readonly logger = new Logger(OrderListeners.name);
private orderCreatedSmsTemplateId: 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';
}
@OnEvent(paymentSucceedEvent.name)
async handleOrderCreated(event: paymentSucceedEvent) {
try {
this.logger.log(
`Order created event received: ${event.orderId} for restaurant: ${event.restaurantId} and order number: ${event.orderNumber}`,
);
// get admnin os restuaraant that have order permissuins
const admins = await this.adminService.findAdminsWithPermission(event.restaurantId, Permission.MANAGE_ORDERS);
// const order=await
const recipients = admins.map(admin => ({
adminId: admin.id,
}));
await this.notificationService.sendNotification({
restaurantId: event.restaurantId,
message: {
title: NotifTitleEnum.ORDER_CREATED,
content: `Order ${event.orderNumber} has been created successfully`,
sms: {
templateId: this.orderCreatedSmsTemplateId,
parameters: {
orderNumber: event.orderNumber,
},
},
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`,
action: {
type: `Order ${event.orderNumber} has been created successfully`,
url: `Order ${event.orderNumber} has been created successfully`,
},
},
},
recipients,
metadata: {
priority: 1,
},
});
} catch (error) {
this.logger.error(
`Failed to send notification for order created event: ${event.restaurantId}`,
error instanceof Error ? error.stack : String(error),
);
}
}
}
@@ -221,7 +221,7 @@ export class PaymentsService {
private failPayment(payment: Payment) {
payment.status = PaymentStatusEnum.Failed;
payment.failedAt = new Date();
payment.order.status = OrderStatus.FAILED;
payment.order.status = OrderStatus.CANCELED;
}
private confirmOrder(order: Order) {