order
This commit is contained in:
@@ -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)) {
|
||||||
|
|||||||
@@ -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
|
||||||
Reference in New Issue
Block a user