import { Controller, Get, Post, Param, UseGuards, Patch, Query, Body } from '@nestjs/common'; import { ApiTags, ApiOperation, ApiBearerAuth, ApiParam, ApiHeader, ApiBody } from '@nestjs/swagger'; import { OrdersService } from '../providers/orders.service'; import { AuthGuard } from '../../auth/guards/auth.guard'; import { UserId } from '../../../common/decorators/user-id.decorator'; import { AdminAuthGuard } from '../../auth/guards/adminAuth.guard'; import { FindOrdersDto } from '../dto/find-orders.dto'; import { OrderStatus } from '../interface/order.interface'; import { UpdateOrderStatusDto } from '../dto/update-order-status.dto'; import { Permissions } from 'src/common/decorators/permissions.decorator'; import { Permission } from 'src/common/enums/permission.enum'; import { CreateOrderDto } from '../dto/create-order.dto'; @ApiTags('orders') @ApiBearerAuth() @Controller() export class OrdersController { constructor(private readonly ordersService: OrdersService) { } @Post('public/checkout') // @UseGuards(AuthGuard) @ApiOperation({ summary: 'Checkout : create order ' }) @ApiBody({ type: CreateOrderDto }) checkout(@UserId() userId: string, @Body() body: CreateOrderDto) { return this.ordersService.createOrder(userId, body); } // @UseGuards(AuthGuard) // @Get('public/orders') // @ApiOperation({ summary: 'Get all orders with pagination and filters' }) // findAll(@Query() dto: FindOrdersDto, @UserId() userId: string) { // return this.ordersService.findAllForUser(dto, userId); // } // @UseGuards(AuthGuard) // @ApiOperation({ summary: 'Get an order By id for User' }) // @ApiParam({ name: 'orderId', description: 'Order ID' }) // @Get('public/orders/:orderId') // findOne(@Param('orderId') orderId: string,) { // return this.ordersService.findOne(orderId,); // } // @UseGuards(AuthGuard) // @Patch('public/orders/:id/:status') // @ApiParam({ // name: 'status', // description: 'Order status', // enum: OrderStatus, // }) // @ApiBody({ type: UpdateOrderStatusDto }) // @ApiOperation({ summary: 'Update status of an order By User' }) // @ApiParam({ name: 'id', description: 'Order ID' }) // cancelOrder( // @Body() dto: UpdateOrderStatusDto, // @Param('id') orderId: string, // @Param('status') status: OrderStatus, // , // ) { // return this.ordersService.changeOrderStatus(orderId, , status, 'user', dto?.desc); // } // /******************** Admin Routes **********************/ // @UseGuards(AdminAuthGuard) // @Permissions(Permission.MANAGE_ORDERS) // @Get('admin/orders') // @ApiOperation({ summary: 'Get all orders with pagination and filters' }) // findAllAdmin(, @Query() dto: FindOrdersDto) { // return this.ordersService.findAllForAdmin(, dto); // } // @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,) { // return this.ordersService.findOne(orderId,); // } // @UseGuards(AdminAuthGuard) // @Permissions(Permission.MANAGE_ORDERS) // @Patch('admin/orders/:orderId/:status') // @ApiOperation({ summary: 'Update an order status' }) // @ApiParam({ name: 'orderId', description: 'Order ID' }) // @ApiBody({ type: UpdateOrderStatusDto }) // @ApiParam({ // name: 'status', // description: 'Order status', // enum: OrderStatus, // }) // updateStatus( // @Param('orderId') orderId: string, // @Body() dto: UpdateOrderStatusDto, // @Param('status') status: OrderStatus, // , // ) { // return this.ordersService.changeOrderStatus(orderId, , status, 'admin', dto?.desc); // } // @UseGuards(AdminAuthGuard) // @Permissions(Permission.VIEW_REPORTS) // @ApiOperation({ summary: 'Get Stats for report page' }) // @Get('admin/orders/stats') // findStats() { // return this.ordersService.getStats(); // } // @UseGuards(AdminAuthGuard) // @Permissions(Permission.VIEW_REPORTS) // @ApiOperation({ summary: 'Get product sales pie chart data for last month' }) // @Get('admin/orders/product-sales-pie-chart') // getproductSalesPieChart() { // return this.ordersService.getproductSalesPieChart(); // } }