From 1f08514deb392b68868a1eae4c3a34ab86680458 Mon Sep 17 00:00:00 2001 From: mahyargdz Date: Mon, 3 Mar 2025 12:01:13 +0330 Subject: [PATCH] chore: fetch ticket that only assing to a admin and only super admin can see all ticket --- .../tickets/providers/tickets.service.ts | 9 ++++++-- src/modules/tickets/tickets.controller.ts | 4 ++-- src/modules/users/providers/users.service.ts | 21 +++++++------------ 3 files changed, 17 insertions(+), 17 deletions(-) diff --git a/src/modules/tickets/providers/tickets.service.ts b/src/modules/tickets/providers/tickets.service.ts index 1594a56..c223803 100755 --- a/src/modules/tickets/providers/tickets.service.ts +++ b/src/modules/tickets/providers/tickets.service.ts @@ -243,10 +243,11 @@ export class TicketsService { return { tickets, count, paginate: true }; } //******************************** */ - //TODO: get for admin with group of category - async getTicketForAdmin(queryDto: SearchTicketQueryDto) { + async getTicketForAdmin(queryDto: SearchTicketQueryDto, adminId: string) { const { limit, skip } = PaginationUtils(queryDto); + const isSuperAdmin = await this.usersService.isSuperAdmin(adminId); + const queryBuilder = this.ticketsRepository .createQueryBuilder("ticket") .leftJoinAndSelect("ticket.category", "category") @@ -255,6 +256,10 @@ export class TicketsService { .leftJoinAndSelect("ticket.danakService", "danakService") .orderBy("ticket.createdAt", "DESC"); + if (!isSuperAdmin) { + queryBuilder.andWhere("ticket.assignedToId = :adminId", { adminId }); + } + if (queryDto.status) { queryBuilder.andWhere("ticket.status = :status", { status: queryDto.status }); } diff --git a/src/modules/tickets/tickets.controller.ts b/src/modules/tickets/tickets.controller.ts index 70a65dd..d5b11f7 100755 --- a/src/modules/tickets/tickets.controller.ts +++ b/src/modules/tickets/tickets.controller.ts @@ -86,8 +86,8 @@ export class TicketsController { @PermissionsDec(PermissionEnum.TICKETS) @Pagination() @Get("admin") - getAllTickets(@Query() queryDto: SearchTicketQueryDto) { - return this.ticketsService.getTicketForAdmin(queryDto); + getAllTickets(@Query() queryDto: SearchTicketQueryDto, @UserDec("id") adminId: string) { + return this.ticketsService.getTicketForAdmin(queryDto, adminId); } @ApiOperation({ summary: "create ticket messages" }) diff --git a/src/modules/users/providers/users.service.ts b/src/modules/users/providers/users.service.ts index 726079e..db1ebba 100755 --- a/src/modules/users/providers/users.service.ts +++ b/src/modules/users/providers/users.service.ts @@ -376,12 +376,7 @@ export class UsersService { ///****************************************************** */ async updateUserPassword(userId: string, newPassword: string) { - const updatedUser = await this.userRepository.update( - { id: userId }, - { - password: newPassword, - }, - ); + const updatedUser = await this.userRepository.update({ id: userId }, { password: newPassword }); return { updatedUser, }; @@ -396,7 +391,13 @@ export class UsersService { return { users }; } + /************************************************************ */ + async isSuperAdmin(adminId: string) { + const user = await this.userRepository.findOne({ where: { id: adminId }, relations: { roles: true } }); + if (!user) throw new BadRequestException(UserMessage.USER_NOT_FOUND); + return user.roles.some((role) => role.name === RoleEnum.SUPER_ADMIN); + } /************************************************************ */ async getCustomers(queryDto: SearchCustomersDto) { @@ -667,13 +668,7 @@ export class UsersService { /************************************************************ */ async getCustomersCount() { - const count = await this.userRepository.count({ - where: { - roles: { - name: RoleEnum.USER, - }, - }, - }); + const count = await this.userRepository.count({ where: { roles: { name: RoleEnum.USER } } }); return count; }