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);
}
@UseGuards(AuthGuard)
@Patch('public/orders/:id/:status')
@ApiParam({
name: 'status',
description: 'Order status',
enum: OrderStatus,
})
@UseGuards(AuthGuard)
@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' })
@ApiParam({ name: 'id', description: 'Order ID' })
cancelOrder(
changeOrderStatus(
@Body() dto: UpdateOrderStatusDto,
@Param('id') orderId: string,
@Param('status') status: OrderStatus,
@Param('status') status: OrderStatus.CANCELED | OrderStatus.COMPLETED,
@ShopId() shopId: string,
) {
return this.ordersService.changeOrderStatus(orderId, shopId, status, 'user', dto?.desc);
}
/******************** Admin Routes **********************/
@Get('admin/orders')
@UseGuards(AdminAuthGuard)
@Permissions(Permission.MANAGE_ORDERS)
@Get('admin/orders')
@ApiOperation({ summary: 'Get all orders with pagination and filters' })
findAllAdmin(@ShopId() shopId: string, @Query() dto: FindOrdersDto) {
return this.ordersService.findAllForAdmin(shopId, dto);
}
@Get('admin/orders/:orderId')
@UseGuards(AdminAuthGuard)
@Permissions(Permission.MANAGE_ORDERS)
@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) {
return this.ordersService.findOne(orderId, shopId);
}
@@ -127,7 +127,7 @@ export class OrdersService {
const { paymentUrl } = await this.paymentsService.payOrder(order.id);
this.eventEmitter.emit(
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 };
@@ -269,6 +269,11 @@ export class OrdersService {
private canTransition(from: OrderStatus, to: OrderStatus, paymentMethod: PaymentMethodEnum, ref: 'user' | 'admin', deliveryMethod: DeliveryMethodEnum) {
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) {
// 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)) {