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
+21 -4
View File
@@ -19,7 +19,9 @@ import { PaginatedResult } from 'src/common/interfaces/pagination.interface';
import { Payment } from 'src/modules/payments/entities/payment.entity';
import { InventoryService } from 'src/modules/inventory/inventory.service';
import { BulkReserveFoodDto } from 'src/modules/inventory/dto/bulk-reserve-food.dto';
import { StatusTransitionRef } from '../interface/order.interface';
import { EventEmitter2 } from '@nestjs/event-emitter';
import { OrderCreatedEvent, OrderStatusChangedEvent } from '../events/order.events';
type OrderItemData = { food: Food; quantity: number; unitPrice: number; discount: number };
type ValidatedCartForOrder = {
@@ -32,8 +34,6 @@ type ValidatedCartForOrder = {
orderItemsData: OrderItemData[];
};
export type StatusTransitionRef = 'user' | 'admin';
@Injectable()
export class OrdersService {
private readonly logger = new Logger(OrdersService.name);
@@ -55,6 +55,7 @@ export class OrdersService {
private readonly orderRepository: OrderRepository,
private readonly paymentsService: PaymentsService,
private readonly inventoryService: InventoryService,
private readonly eventEmitter: EventEmitter2,
) {}
async checkout(userId: string, restaurantId: string) {
@@ -123,6 +124,10 @@ export class OrdersService {
await this.inventoryService.deductFromInventory(em, bulkReserveFoodDto);
await em.flush();
this.logger.debug(`Order ${order.id} created for user ${userId} (restaurant ${restaurantId})`);
this.eventEmitter.emit(
OrderCreatedEvent.name,
new OrderCreatedEvent(order.id, restaurantId, String(order?.orderNumber) || ''),
);
return order;
});
@@ -262,9 +267,21 @@ export class OrdersService {
order.status = toStatus;
await this.em.persistAndFlush(order);
this.eventEmitter.emit(
OrderStatusChangedEvent.name,
new OrderStatusChangedEvent(
orderId,
order.user?.id || '',
String(order?.orderNumber) || '',
restId,
order.status,
toStatus,
ref,
),
);
return order;
}
/* Helpers */
private assertStatusTransitionAllowed(order: Order, to: OrderStatus, ref: StatusTransitionRef) {
const paymentMethod = order.paymentMethod?.method;
if (!paymentMethod) {