This commit is contained in:
2026-02-12 12:15:16 +03:30
parent 8b45f5f0ee
commit dd49140273
3 changed files with 20 additions and 14 deletions
@@ -43,40 +43,33 @@ export class OrdersController {
return this.ordersService.findOne(orderId, shopId); return this.ordersService.findOne(orderId, shopId);
} }
@UseGuards(AuthGuard)
@Patch('public/orders/:id/:status') @Patch('public/orders/:id/:status')
@ApiParam({ @UseGuards(AuthGuard)
name: 'status',
description: 'Order status',
enum: OrderStatus,
})
@ApiHeader(API_HEADER_SLUG) @ApiHeader(API_HEADER_SLUG)
@ApiBody({ type: UpdateOrderStatusDto }) @ApiParam({ name: 'status', description: 'Order status', enum: [OrderStatus.CANCELED, OrderStatus.COMPLETED] })
@ApiOperation({ summary: 'Update status of an order By User' }) @ApiOperation({ summary: 'Update status of an order By User' })
@ApiParam({ name: 'id', description: 'Order ID' }) changeOrderStatus(
cancelOrder(
@Body() dto: UpdateOrderStatusDto, @Body() dto: UpdateOrderStatusDto,
@Param('id') orderId: string, @Param('id') orderId: string,
@Param('status') status: OrderStatus, @Param('status') status: OrderStatus.CANCELED | OrderStatus.COMPLETED,
@ShopId() shopId: string, @ShopId() shopId: string,
) { ) {
return this.ordersService.changeOrderStatus(orderId, shopId, status, 'user', dto?.desc); return this.ordersService.changeOrderStatus(orderId, shopId, status, 'user', dto?.desc);
} }
/******************** Admin Routes **********************/ /******************** Admin Routes **********************/
@Get('admin/orders')
@UseGuards(AdminAuthGuard) @UseGuards(AdminAuthGuard)
@Permissions(Permission.MANAGE_ORDERS) @Permissions(Permission.MANAGE_ORDERS)
@Get('admin/orders')
@ApiOperation({ summary: 'Get all orders with pagination and filters' }) @ApiOperation({ summary: 'Get all orders with pagination and filters' })
findAllAdmin(@ShopId() shopId: string, @Query() dto: FindOrdersDto) { findAllAdmin(@ShopId() shopId: string, @Query() dto: FindOrdersDto) {
return this.ordersService.findAllForAdmin(shopId, dto); return this.ordersService.findAllForAdmin(shopId, dto);
} }
@Get('admin/orders/:orderId')
@UseGuards(AdminAuthGuard) @UseGuards(AdminAuthGuard)
@Permissions(Permission.MANAGE_ORDERS) @Permissions(Permission.MANAGE_ORDERS)
@ApiOperation({ summary: 'Get an order By id for User' }) @ApiOperation({ summary: 'Get an order By id for User' })
@ApiParam({ name: 'orderId', description: 'Order ID' })
@Get('admin/orders/:orderId')
findOneAsAdmin(@Param('orderId') orderId: string, @ShopId() shopId: string) { findOneAsAdmin(@Param('orderId') orderId: string, @ShopId() shopId: string) {
return this.ordersService.findOne(orderId, shopId); return this.ordersService.findOne(orderId, shopId);
} }
@@ -127,7 +127,7 @@ export class OrdersService {
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, shopId, String(order?.orderNumber) || '', order.total), new OrderCreatedEvent(order.id, shopId, String(order.orderNumber), order.total),
); );
return { paymentUrl, order }; return { paymentUrl, order };
@@ -269,6 +269,11 @@ export class OrdersService {
private canTransition(from: OrderStatus, to: OrderStatus, paymentMethod: PaymentMethodEnum, ref: 'user' | 'admin', deliveryMethod: DeliveryMethodEnum) { private canTransition(from: OrderStatus, to: OrderStatus, paymentMethod: PaymentMethodEnum, ref: 'user' | 'admin', deliveryMethod: DeliveryMethodEnum) {
if (!OrdersService.STATUS_TRANSITIONS[from]?.includes(to)) return false; if (!OrdersService.STATUS_TRANSITIONS[from]?.includes(to)) return false;
// user only can change sttaus to complete/canceled
if (ref == 'user' && ![OrderStatus.CANCELED, OrderStatus.COMPLETED].includes(to)) {
return false
}
if (to === OrderStatus.CANCELED) { if (to === OrderStatus.CANCELED) {
// only allow orders with status of PENDING_PAYMENT and PAID are allowed to be canceled by user // only allow orders with status of PENDING_PAYMENT and PAID are allowed to be canceled by user
if (ref === 'user' && ![OrderStatus.PENDING_PAYMENT, OrderStatus.PAID].includes(from)) { if (ref === 'user' && ![OrderStatus.PENDING_PAYMENT, OrderStatus.PAID].includes(from)) {
+8
View File
@@ -0,0 +1,8 @@
1. index tables check.
2. notification check
2.1 after order created(cash) then sms must be sent to admin
2.2 after online payment paid successfully then noti must be sent
2.3 after preapring order noti to user
2.4 after deliver to recipint notif to user
2.5 after shiped => notif to user
2.6