217 lines
8.0 KiB
TypeScript
217 lines
8.0 KiB
TypeScript
import { Controller, Get, Post, Param, UseGuards, Patch, Query, Body, Delete } from '@nestjs/common';
|
|
import { ApiTags, ApiOperation, ApiBearerAuth } from '@nestjs/swagger';
|
|
import { OrderService } from '../providers/order.service';
|
|
import { AuthGuard } from '../../auth/guards/auth.guard';
|
|
import { UserId } from '../../../common/decorators/user-id.decorator';
|
|
import { FindOrdersDto } from '../dto/find-orders.dto';
|
|
import {
|
|
CreateOrderAsUSerDto, CreateOrderItemAsUserDto,
|
|
CreateOrderItemDtoAsAdmin, CreateOrderAsAdminDto
|
|
} from '../dto/create-order.dto';
|
|
import { AdminId } from 'src/common/decorators/admin-id.decorator';
|
|
import { AssignDesignerDto } from '../dto/assign-designer.dto';
|
|
import { UpdateOrderItemDtoAsAdmin, UpdateOrderItemDtoAsUser } from '../dto/update-order-item.dto';
|
|
import { UpdateOrderAsAdminDto } from '../dto/update-order.dto';
|
|
import { AdminAuthGuard } from 'src/modules/auth/guards/adminAuth.guard';
|
|
import { CreatePrintFormDto } from '../dto/create-print-form.dto';
|
|
import { FindOrderItemsDto } from '../dto/find-order-items.dto';
|
|
import { Permissions } from 'src/common/decorators/permissions.decorator';
|
|
import { PermissionEnum } from 'src/common/enums/permission.enum';
|
|
|
|
@ApiTags('orders')
|
|
@ApiBearerAuth()
|
|
@Controller()
|
|
export class OrderController {
|
|
constructor(private readonly orderService: OrderService) { }
|
|
|
|
// ================== Public ===================
|
|
|
|
@Post('public/orders')
|
|
@UseGuards(AuthGuard)
|
|
@ApiOperation({ summary: 'create order ' })
|
|
createOrder(@UserId() userId: string, @Body() body: CreateOrderAsUSerDto) {
|
|
return this.orderService.createOrderAsUser(userId, body);
|
|
}
|
|
|
|
@Delete('public/orders/:id')
|
|
@UseGuards(AuthGuard)
|
|
@ApiOperation({ summary: 'Delete order ' })
|
|
deleteOrder(@Param('id') orderId: string, @UserId() userId: string) {
|
|
return this.orderService.removeOrderAsUser(userId, orderId);
|
|
}
|
|
|
|
@Get('public/orders')
|
|
@UseGuards(AuthGuard)
|
|
@ApiOperation({ summary: 'Get all orders with pagination and filters' })
|
|
findAll(@Query() dto: FindOrdersDto, @UserId() userId: string) {
|
|
return this.orderService.findOrdersAsUser(userId, dto);
|
|
}
|
|
|
|
@Get('public/orders/:id')
|
|
@UseGuards(AuthGuard)
|
|
@ApiOperation({ summary: 'order detail' })
|
|
orderDetail(@Param('id') orderId: string, @UserId() userId: string) {
|
|
return this.orderService.getOrderAsUser(userId, orderId);
|
|
}
|
|
|
|
@Post('public/orders/:id/item')
|
|
@UseGuards(AuthGuard)
|
|
@ApiOperation({ summary: 'add item to order ' })
|
|
addOrderItem(@Param('id') orderId: string, @UserId() userId: string, @Body() body: CreateOrderItemAsUserDto) {
|
|
return this.orderService.addOrderItemAsUser(userId, orderId, body);
|
|
}
|
|
|
|
|
|
@Patch('public/orders/:id/item/:itemId')
|
|
@UseGuards(AuthGuard)
|
|
@ApiOperation({ summary: 'Update order item ' })
|
|
updateOrderItem(@Param('id') orderId: string, @UserId() userId: string, @Param('itemId') itemId: string, @Body() body: UpdateOrderItemDtoAsUser) {
|
|
return this.orderService.updateOrderItemAsUser(userId, orderId, itemId, body);
|
|
}
|
|
|
|
|
|
@Patch('public/orders/:orderId/items/:orderItemId/confirm')
|
|
@UseGuards(AuthGuard)
|
|
@ApiOperation({ summary: 'Confirm Invoice Item ' })
|
|
confirmOrderItem(
|
|
@Param('orderId') orderId: string,
|
|
@Param('orderItemId') orderItemId: string,
|
|
@UserId() userId: string
|
|
) {
|
|
return this.orderService.confirmOrderItem(userId, orderId, orderItemId);
|
|
}
|
|
|
|
@Delete('public/orders/:orderId/items/:orderItemId')
|
|
@UseGuards(AuthGuard)
|
|
@ApiOperation({ summary: 'Remove order Item ' })
|
|
removeOrderItem(
|
|
@Param('orderId') orderId: string,
|
|
@Param('orderItemId') orderItemId: string,
|
|
@UserId() userId: string
|
|
) {
|
|
return this.orderService.removeOrderItemAsUser(userId, orderId, orderItemId);
|
|
}
|
|
|
|
/*========================== Admin Routes =====================*/
|
|
|
|
@Post('admin/orders')
|
|
@UseGuards(AdminAuthGuard)
|
|
@Permissions(PermissionEnum.CREATE_ORDER)
|
|
@ApiOperation({ summary: 'create order ' })
|
|
createOrderAsAdmin(@AdminId() adminId: string, @Body() body: CreateOrderAsAdminDto) {
|
|
return this.orderService.createOrderAsAdmin(adminId, body);
|
|
}
|
|
|
|
@Get('admin/orders/request')
|
|
@UseGuards(AdminAuthGuard)
|
|
@Permissions(PermissionEnum.VIEW_REQUESTS)
|
|
@ApiOperation({ summary: 'Get all order requests with pagination and filters' })
|
|
findOrderRequestAsAdmin(@Query() dto: FindOrdersDto) {
|
|
return this.orderService.findOrderRequestsAsAdmin(dto);
|
|
}
|
|
|
|
// this route permission is handled inside service
|
|
@Get('admin/orders/invoiced')
|
|
@UseGuards(AdminAuthGuard)
|
|
@ApiOperation({ summary: 'Get all invoiced orders with pagination and filters' })
|
|
findInvoicedOrdersAsAdmin(@Query() dto: FindOrdersDto, @AdminId() adminId: string) {
|
|
return this.orderService.findInvoicedOrdersAsAdmin(adminId, dto);
|
|
}
|
|
|
|
@Get('admin/orders/:id')
|
|
@UseGuards(AdminAuthGuard)
|
|
@ApiOperation({ summary: 'order detail' })
|
|
orderDetailAsAdmin(@Param('id') orderId: string) {
|
|
return this.orderService.findOrderOrFail(orderId);
|
|
}
|
|
|
|
@Patch('admin/orders/:id')
|
|
@UseGuards(AdminAuthGuard)
|
|
@Permissions(PermissionEnum.UPDATE_ORDER)
|
|
@ApiOperation({ summary: 'Update Order ' })
|
|
updateOrder(@Param('id') id: string, @Body() dto: UpdateOrderAsAdminDto) {
|
|
return this.orderService.updateOrderAsAdmin2(id, dto);
|
|
}
|
|
|
|
@Delete('admin/orders/:orderId')
|
|
@UseGuards(AdminAuthGuard)
|
|
@Permissions(PermissionEnum.REMOVE_ORDER)
|
|
@ApiOperation({ summary: 'Hard Delete Order ' })
|
|
hardDelete(@Param('orderId') orderId: string) {
|
|
return this.orderService.hardDeleteOrder(orderId);
|
|
}
|
|
|
|
// =============== Order Item ================
|
|
|
|
@Get('admin/orders/item/print')
|
|
@UseGuards(AdminAuthGuard)
|
|
@Permissions(PermissionEnum.VIEW_All_ORDERS)
|
|
@ApiOperation({ summary: 'get print orders' })
|
|
getPrintOrders(@Body() dto: FindOrderItemsDto) {
|
|
return this.orderService.findPrintOrderItemsAsAdmin(dto);
|
|
}
|
|
|
|
@Get('admin/orders/item/:id')
|
|
@UseGuards(AdminAuthGuard)
|
|
@ApiOperation({ summary: 'order item detail' })
|
|
getOrderItem(@Param('id') itemId: string) {
|
|
return this.orderService.findOrderItemOrFailByItemId(itemId);
|
|
}
|
|
|
|
|
|
@Post('admin/orders/:orderId/item/:itemId/designer')
|
|
@UseGuards(AdminAuthGuard)
|
|
@Permissions(PermissionEnum.ASSIGN_DESIGNER)
|
|
@ApiOperation({ summary: 'Assign Order Designer ' })
|
|
assignDesigner(@Param('orderId') orderId: string, @Param('itemId') itemId: string,
|
|
@Body() body: AssignDesignerDto) {
|
|
return this.orderService.assignDesigner(orderId, itemId, body.designerId);
|
|
}
|
|
|
|
@Patch('admin/orders/:id/item/:itemId/print')
|
|
@UseGuards(AdminAuthGuard)
|
|
@Permissions(PermissionEnum.CREATE_ORDER_PRINT)
|
|
@ApiOperation({ summary: 'Create Print form for order item' })
|
|
createPrintForm(@Param('id') id: string, @Param('itemId') itemId: string, @Body() dto: CreatePrintFormDto) {
|
|
return this.orderService.createPrintForm(id, itemId, dto);
|
|
}
|
|
|
|
// @Post('admin/orders/:orderId/invoice')
|
|
// @UseGuards(AdminAuthGuard)
|
|
// @ApiOperation({ summary: 'Create Order invoice ' })
|
|
// createInvoice(@Param('orderId') orderId: string) {
|
|
// return this.orderService.createInvoice(orderId);
|
|
// }
|
|
|
|
|
|
@Delete('admin/orders/:id/items/:itemId')
|
|
@UseGuards(AdminAuthGuard)
|
|
@Permissions(PermissionEnum.UPDATE_ORDER)
|
|
@ApiOperation({ summary: 'Remove order Item ' })
|
|
removeOrderItemAdAdmin(
|
|
@Param('id') orderId: string,
|
|
@Param('itemId') itemId: string,
|
|
) {
|
|
return this.orderService.removeOrderItemAsAdmin(orderId, itemId);
|
|
}
|
|
|
|
@Post('admin/orders/:id/item')
|
|
@UseGuards(AdminAuthGuard)
|
|
@Permissions(PermissionEnum.UPDATE_ORDER)
|
|
@ApiOperation({ summary: 'add item to order ' })
|
|
addOrderItemAsAdmin(@Param('id') orderId: string, @Body() body: CreateOrderItemDtoAsAdmin) {
|
|
return this.orderService.addOrderItemAsAdmin(orderId, body);
|
|
}
|
|
|
|
|
|
@Patch('admin/orders/:id/item/:itemId')
|
|
@UseGuards(AdminAuthGuard)
|
|
@Permissions(PermissionEnum.UPDATE_ORDER)
|
|
@ApiOperation({ summary: 'Update order item' })
|
|
updateOrderItemAsAdmin(@Param('id') orderId: string, @Param('itemId') itemId: string,
|
|
@Body() body: UpdateOrderItemDtoAsAdmin) {
|
|
return this.orderService.updateOrderItemAsAdmin(orderId, itemId, body);
|
|
}
|
|
|
|
}
|