diff --git a/src/modules/admin/controllers/admin.controller.ts b/src/modules/admin/controllers/admin.controller.ts index b53da6f..b884167 100644 --- a/src/modules/admin/controllers/admin.controller.ts +++ b/src/modules/admin/controllers/admin.controller.ts @@ -51,10 +51,10 @@ export class AdminController { return this.adminService.updateMe(adminId, dto); } - @Get('admin/dashboard/counts') - @ApiOperation({ summary: 'Get dashboard entity counts for admin panel' }) - getDashboardCounts() { - return this.adminService.getDashboardCounts(); + @Get('admin/menu/counts') + @ApiOperation({ summary: 'Get metrics for admin panel' }) + getDashboardCounts(@AdminId() adminId: string) { + return this.adminService.getDashboardCounts(adminId); } @Get('admin/home/stats') diff --git a/src/modules/admin/providers/admin.service.ts b/src/modules/admin/providers/admin.service.ts index 12c1177..8163074 100644 --- a/src/modules/admin/providers/admin.service.ts +++ b/src/modules/admin/providers/admin.service.ts @@ -102,7 +102,7 @@ export class AdminService { } if (rest.phone !== undefined && rest.phone !== admin.phone) { - const exists = await this.adminRepository.findOne({ phone: rest.phone,id: { $ne: adminId } }); + const exists = await this.adminRepository.findOne({ phone: rest.phone, id: { $ne: adminId } }); if (exists) { throw new ConflictException('This Phone Number is already taken'); } @@ -165,11 +165,25 @@ export class AdminService { return permissionNames.filter((name) => adminPermissionNames.has(name)) } - async getDashboardCounts() { + async getDashboardCounts(adminId: string) { + const permissions = await this.ownedPermissions(adminId, [ + PermissionEnum.VIEW_ORDERS, + PermissionEnum.VIEW_ASSIGNED_ORDERS, + ]); + + const canViewAnyOrder = permissions.includes(PermissionEnum.VIEW_ORDERS); + const canViewAssignedOrder = permissions.includes(PermissionEnum.VIEW_ASSIGNED_ORDERS); + + const ordersCountPromise = canViewAnyOrder + ? this.em.count(Order) + : canViewAssignedOrder + ? this.em.count(Order, { designers: { designer: { id: adminId } } }) + : Promise.resolve(0); + const [requestsCount, invoicesCount, ordersCount, paymentsCount] = await Promise.all([ this.em.count(Request), - this.em.count(Invoice), - this.em.count(Order), + this.em.count(Invoice, { status: { $nin: [InvoiceConfirmStatusEnum.ARCHIVED] } }), + ordersCountPromise, this.em.count(Payment), ]); diff --git a/src/modules/user/controllers/users.controller.ts b/src/modules/user/controllers/users.controller.ts index fbf47b5..949cfe1 100644 --- a/src/modules/user/controllers/users.controller.ts +++ b/src/modules/user/controllers/users.controller.ts @@ -39,9 +39,9 @@ export class UsersController { return user; } - @Get('public/dashboard/counts') + @Get('public/menu/counts') @UseGuards(AuthGuard) - @ApiOperation({ summary: 'Get dashboard entity counts for user panel' }) + @ApiOperation({ summary: 'Get metrics for user panel' }) getDashboardCounts(@UserId() userId: string) { return this.userService.getDashboardCounts(userId); } diff --git a/src/modules/user/providers/user.service.ts b/src/modules/user/providers/user.service.ts index 4905ae3..9f7572d 100644 --- a/src/modules/user/providers/user.service.ts +++ b/src/modules/user/providers/user.service.ts @@ -13,6 +13,7 @@ import { Request } from 'src/modules/request/entities/request.entity'; import { Invoice } from 'src/modules/invoice/entities/invoice.entity'; import { Order } from 'src/modules/order/entities/order.entity'; import { Payment } from 'src/modules/payment/entities/payment.entity'; +import { InvoiceConfirmStatusEnum } from 'src/modules/invoice/enum/invoice-confirm-status.enum'; @Injectable() export class UserService { @@ -125,7 +126,7 @@ export class UserService { async getDashboardCounts(userId: string) { const [requestsCount, invoicesCount, ordersCount, paymentsCount] = await Promise.all([ this.em.count(Request, { user: { id: userId } }), - this.em.count(Invoice, { user: { id: userId } }), + this.em.count(Invoice, { user: { id: userId }, status: { $nin: [InvoiceConfirmStatusEnum.ARCHIVED] } }), this.em.count(Order, { user: { id: userId } }), this.em.count(Payment, { invoice: { user: { id: userId } } }), ]);