From 1e7ad2f72e136b0275b365995f7198f334f4c1f5 Mon Sep 17 00:00:00 2001 From: morteza-mortezai Date: Mon, 23 Feb 2026 09:40:18 +0330 Subject: [PATCH] order stats --- .../order/controllers/order.controller.ts | 7 +++++- src/modules/order/providers/order.service.ts | 24 ++++++++++++++++++- 2 files changed, 29 insertions(+), 2 deletions(-) diff --git a/src/modules/order/controllers/order.controller.ts b/src/modules/order/controllers/order.controller.ts index 4ad46ac..0ee4c5d 100644 --- a/src/modules/order/controllers/order.controller.ts +++ b/src/modules/order/controllers/order.controller.ts @@ -36,7 +36,12 @@ export class OrderController { 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') diff --git a/src/modules/order/providers/order.service.ts b/src/modules/order/providers/order.service.ts index 0c1726d..6e45356 100644 --- a/src/modules/order/providers/order.service.ts +++ b/src/modules/order/providers/order.service.ts @@ -30,6 +30,8 @@ import { UpdateStatusDto } from '../dto/update-status.dto'; import { CreateOrderPrintDto } from '../dto/create-order-print.dto'; import { OrderPrint } from '../entities/print.entity'; import { OrderPrintRepository } from '../repositories/order-print.repository'; +import { Request } from 'src/modules/request/entities/request.entity'; +import { Invoice } from 'src/modules/invoice/entities/invoice.entity'; @Injectable() export class OrderService { @@ -216,7 +218,7 @@ export class OrderService { await this.em.flush(); return order } - + throw new ForbiddenException("You don't have permission to update order status") } @@ -273,4 +275,24 @@ export class OrderService { } return order; } + + async getStats(userId: string) { + const [requestsCount, invoicesCount, inProgressOrdersCount, completedOrdersCount] = + await Promise.all([ + this.em.count(Request, { user: { id: userId } }), + this.em.count(Invoice, { user: { id: userId } }), + this.em.count(Order, { + user: { id: userId }, + status: { $nin: [OrderStatusEnum.FINISHED, OrderStatusEnum.CANCELED] }, + }), + this.em.count(Order, { user: { id: userId }, status: OrderStatusEnum.FINISHED }), + ]); + + return { + requestsCount, + invoicesCount, + inProgressOrdersCount, + completedOrdersCount, + }; + } } \ No newline at end of file