Files
negareh-api/src/modules/order/controllers/orders.controller.ts
T
2026-01-17 13:16:43 +03:30

120 lines
4.3 KiB
TypeScript

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();
// }
}