diff --git a/src/modules/order/controllers/orders.controller.ts b/src/modules/order/controllers/orders.controller.ts index fd40716..70d952a 100644 --- a/src/modules/order/controllers/orders.controller.ts +++ b/src/modules/order/controllers/orders.controller.ts @@ -28,24 +28,15 @@ export class OrdersController { @Get('public/orders') @UseGuards(AuthGuard) - @ApiQuery({ name: 'page', required: false, type: Number }) - @ApiQuery({ name: 'limit', required: false, type: Number }) - @ApiQuery({ name: 'search', required: false, type: String }) - @ApiQuery({ name: 'orderBy', required: false, type: String }) - @ApiQuery({ name: 'order', required: false, enum: ['asc', 'desc'] }) - @ApiQuery({ name: 'statuses', required: false, enum: OrderStatusEnum }) - @ApiQuery({ name: 'from', required: false, type: Date }) - @ApiQuery({ name: 'to', required: false, type: Date }) @ApiOperation({ summary: 'Get all orders with pagination and filters' }) async findAll(@Query() dto: FindOrdersDto, @UserId() userId: string) { const orders = await this.ordersService.findAllForUser(userId, dto); return orders } + @Post('admin/orders/:orderId/create-invoice') @UseGuards(AuthGuard) @ApiOperation({ summary: 'Create invoice for new order' }) - @ApiParam({ name: 'orderId', description: 'Order ID' }) - @Post('admin/orders/:orderId/create-invoice') createInvoice(@Param('orderId') orderId: string, @Body() body: CreateInvoiceDto) { return this.ordersService.createInvoice(orderId, body); } @@ -58,17 +49,16 @@ export class OrdersController { // 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); - // } + @Post('admin/orders/:orderId/items/:orderItemId') + @UseGuards(AuthGuard) + @ApiOperation({ summary: 'Confirm Invoice Item By User' }) + confirmOrderItem( + @Param('orderId') orderId: string, + @Param('orderItemId') orderItemId: string, + @UserId() userId: string + ) { + return this.ordersService.confirmOrderItem(userId, orderId, +orderItemId); + } // /******************** Admin Routes **********************/ // @UseGuards(AdminAuthGuard) diff --git a/src/modules/order/providers/orders.service.ts b/src/modules/order/providers/orders.service.ts index 16ec440..718940c 100644 --- a/src/modules/order/providers/orders.service.ts +++ b/src/modules/order/providers/orders.service.ts @@ -165,4 +165,24 @@ export class OrdersService { return order } + + async confirmOrderItem(userId: string, orderId: string, orderItemId: number) { + + const orderItem = await this.orderItemRepository.findOne({ id: orderItemId, order: { id: orderId } }, + { populate: ['order', 'order.user'] }) + + if (!orderItem) { + throw new BadRequestException("Order Item not found") + } + + if (orderItem.order.user.id !== userId) { + throw new BadRequestException("Order Item does not belong to you") + } + + orderItem.status=OrderItemStatus.CONFIRMED + + this.em.persistAndFlush(OrderItem) + + return orderItem + } }