139 lines
5.2 KiB
TypeScript
139 lines
5.2 KiB
TypeScript
import { Controller, Get, Post, Param, UseGuards, Patch, Query, Body, Delete } from '@nestjs/common';
|
|
import { ApiTags, ApiOperation, ApiBearerAuth, ApiOkResponse } 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 { CreateOrderAsAdminDto } from '../dto/create-order.dto';
|
|
import { UpdateOrderAsAdminDto } from '../dto/update-order.dto';
|
|
import { AdminId } from 'src/common/decorators/admin-id.decorator';
|
|
import { AdminAuthGuard } from 'src/modules/auth/guards/adminAuth.guard';
|
|
import { Permissions } from 'src/common/decorators/permissions.decorator';
|
|
import { PermissionEnum } from 'src/common/enums/permission.enum';
|
|
import { AssignDesignerDto } from '../dto/assign-designer.dto';
|
|
import { UpdateStatusDto } from '../dto/update-status.dto';
|
|
import { CreateOrderPrintDto } from '../dto/create-order-print.dto';
|
|
|
|
@ApiTags('orders')
|
|
@ApiBearerAuth()
|
|
@Controller()
|
|
export class OrderController {
|
|
constructor(private readonly orderService: OrderService) { }
|
|
|
|
// ================== Public ===================
|
|
|
|
@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);
|
|
}
|
|
|
|
@Get('public/orders/stats')
|
|
@UseGuards(AuthGuard)
|
|
@ApiOperation({ summary: 'Get User Orders stats' })
|
|
getStats( @UserId() userId: string) {
|
|
return this.orderService.getStats(userId);
|
|
}
|
|
/*========================== 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);
|
|
}
|
|
|
|
// Permission handled inside service
|
|
@Get('admin/orders')
|
|
@UseGuards(AdminAuthGuard)
|
|
// @Permissions(PermissionEnum.VIEW_ORDERS)
|
|
@ApiOperation({ summary: 'Get all orders with pagination and filters' })
|
|
findAllAsAdmin(@Query() dto: FindOrdersDto, @AdminId() adminId: string) {
|
|
return this.orderService.findOrdersAsAdmin(adminId, dto);
|
|
}
|
|
|
|
@Get('admin/orders/tab-counts')
|
|
@UseGuards(AdminAuthGuard)
|
|
@ApiOperation({ summary: 'Get order tab counts for admin order list' })
|
|
getAdminOrderTabCounts(@Query() dto: FindOrdersDto, @AdminId() adminId: string) {
|
|
return this.orderService.getAdminOrderTabCounts(adminId, dto);
|
|
}
|
|
|
|
@Get('admin/orders/:id')
|
|
@UseGuards(AdminAuthGuard)
|
|
@Permissions(PermissionEnum.VIEW_ORDERS)
|
|
@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.updateOrderAsAdmin(id, dto);
|
|
}
|
|
|
|
@Delete('admin/orders/:orderId')
|
|
@UseGuards(AdminAuthGuard)
|
|
@Permissions(PermissionEnum.DELETE_ORDER)
|
|
@ApiOperation({ summary: 'Soft Delete Order ' })
|
|
softDeleteOrder(@Param('orderId') orderId: string) {
|
|
return this.orderService.softDeleteOrder(orderId);
|
|
}
|
|
|
|
|
|
|
|
@Post('admin/orders/:orderId/designer')
|
|
@UseGuards(AdminAuthGuard)
|
|
@Permissions(PermissionEnum.ASSIGN_DESIGNER)
|
|
@ApiOperation({ summary: 'Assign Order Designer ' })
|
|
assignDesigner(@Param('orderId') orderId: string, @Body() body: AssignDesignerDto) {
|
|
return this.orderService.assignDesigner(orderId, body);
|
|
}
|
|
|
|
// Permission handled inside service
|
|
@Post('admin/orders/:orderId/status')
|
|
@UseGuards(AdminAuthGuard)
|
|
@ApiOperation({ summary: 'Assign Order Designer ' })
|
|
updateStatus(@Param('orderId') orderId: string,@AdminId()adminId:string, @Body() dto: UpdateStatusDto) {
|
|
return this.orderService.updateStatus(orderId,adminId, dto);
|
|
}
|
|
|
|
|
|
@Post('admin/orders/:orderId/print')
|
|
@UseGuards(AdminAuthGuard)
|
|
@Permissions(PermissionEnum.CREATE_PRINT_FORM)
|
|
@ApiOperation({ summary: 'Create order print' })
|
|
@ApiOkResponse({ description: 'Order print created or updated' })
|
|
createPrint(@Param('orderId') orderId: string, @Body() body: CreateOrderPrintDto) {
|
|
return this.orderService.createPrint(orderId, body);
|
|
}
|
|
|
|
@Get('admin/orders/:orderId/print')
|
|
@UseGuards(AdminAuthGuard)
|
|
@Permissions(PermissionEnum.VIEW_PRINT_FORM)
|
|
@ApiOperation({ summary: 'Get order print' })
|
|
@ApiOkResponse({ description: 'Order print details' })
|
|
getPrint(@Param('orderId') orderId: string) {
|
|
return this.orderService.getPrint(orderId);
|
|
}
|
|
|
|
@Get('admin/orders/stats')
|
|
@UseGuards(AdminAuthGuard)
|
|
@ApiOperation({ summary: 'Get Admin Orders stats' })
|
|
getAdminStats() {
|
|
return this.orderService.getAdminStats();
|
|
}
|
|
}
|