From dece70a1336a8206b30323ae05847431ed668ddb Mon Sep 17 00:00:00 2001 From: Matin Date: Tue, 18 Feb 2025 14:44:26 +0330 Subject: [PATCH] chore: get customers --- src/modules/users/DTO/search-customers.dto.ts | 7 ++++++ src/modules/users/providers/users.service.ts | 9 +++---- src/modules/users/users.controller.ts | 25 ++++++++++++++++++- 3 files changed, 35 insertions(+), 6 deletions(-) diff --git a/src/modules/users/DTO/search-customers.dto.ts b/src/modules/users/DTO/search-customers.dto.ts index 7987e61..b0654c9 100644 --- a/src/modules/users/DTO/search-customers.dto.ts +++ b/src/modules/users/DTO/search-customers.dto.ts @@ -1,10 +1,17 @@ import { ApiPropertyOptional } from "@nestjs/swagger"; +import { Type } from "class-transformer"; import { IsOptional, IsString } from "class-validator"; import { PaginationDto } from "../../../common/DTO/pagination.dto"; import { FinancialMessage } from "../../../common/enums/message.enum"; export class SearchCustomersDto extends PaginationDto { + @IsOptional() + @Type(() => Number) + // @IsBoolean({ message: CategoryMessage.IS_ACTIVE_SHOULD_BE_BOOLEAN }) + @ApiPropertyOptional({ description: "Category status", example: 1 }) + isActive?: number; + @IsOptional() @IsString({ message: FinancialMessage.SEARCH_QUERY_MUST_BE_A_STRING }) @ApiPropertyOptional({ description: "search query", example: "search query" }) diff --git a/src/modules/users/providers/users.service.ts b/src/modules/users/providers/users.service.ts index 1cc6c73..385079d 100644 --- a/src/modules/users/providers/users.service.ts +++ b/src/modules/users/providers/users.service.ts @@ -329,13 +329,13 @@ export class UsersService { const queryBuilder = this.userRepository .createQueryBuilder("user") - .leftJoin("user.role", "role") + .leftJoin("user.roles", "role") .where("role.name = :roleName", { roleName: RoleEnum.USER }) .leftJoin("user.groups", "groups") .addSelect(["groups.id", "groups.name"]) - .leftJoinAndSelect("user.invoices", "invoices") - .leftJoinAndSelect("user.subscriptions", "subscriptions") - .leftJoinAndSelect("user.tickets", "tickets"); + .loadRelationCountAndMap("user.invoicesCount", "user.invoices") + .loadRelationCountAndMap("user.subscriptionsCount", "user.subscriptions") + .loadRelationCountAndMap("user.ticketsCount", "user.tickets"); if (queryDto.q) { queryBuilder @@ -422,7 +422,6 @@ export class UsersService { name: RoleEnum.USER, }, }, - relations: ["tickets", "subscriptions", "invoices"], }); return { customer }; diff --git a/src/modules/users/users.controller.ts b/src/modules/users/users.controller.ts index cff1ba8..4431091 100644 --- a/src/modules/users/users.controller.ts +++ b/src/modules/users/users.controller.ts @@ -1,4 +1,4 @@ -import { Body, Controller, Get, HttpCode, HttpStatus, Patch, Post, Query, Res } from "@nestjs/common"; +import { Body, Controller, Get, HttpCode, HttpStatus, Param, Patch, Post, Query, Res } from "@nestjs/common"; import { ApiOperation, ApiTags } from "@nestjs/swagger"; import { FastifyReply } from "fastify"; @@ -20,6 +20,7 @@ import { UsersService } from "./providers/users.service"; import { AuthGuards } from "../../common/decorators/auth-guard.decorator"; import { PermissionsDec } from "../../common/decorators/permission.decorator"; import { UserDec } from "../../common/decorators/user.decorator"; +import { ParamDto } from "../../common/DTO/param.dto"; @Controller("users") @ApiTags("users") @@ -107,6 +108,8 @@ export class UsersController { return this.usersService.findAllUsers(); } + /************************************************************ */ + @ApiOperation({ summary: "get all customers ==> admin route" }) @PermissionsDec(PermissionEnum.ADMINS, PermissionEnum.CUSTOMERS) @AuthGuards() @@ -115,6 +118,18 @@ export class UsersController { return this.usersService.findAllCustomers(queryDto); } + /************************************************************ */ + + @ApiOperation({ summary: "get all customers ==> admin route" }) + @PermissionsDec(PermissionEnum.ADMINS, PermissionEnum.CUSTOMERS) + @AuthGuards() + @Get("customers/:id") + customer(@Param() paramDto: ParamDto) { + return this.usersService.findOneCustomer(paramDto.id); + } + + /************************************************************ */ + @ApiOperation({ summary: "get all admins ==> admin route" }) @PermissionsDec(PermissionEnum.ADMINS, PermissionEnum.CUSTOMERS) @AuthGuards() @@ -123,6 +138,8 @@ export class UsersController { return this.usersService.getAdmins(queryDto); } + /************************************************************ */ + @ApiOperation({ summary: "create admin ==> admin route" }) @AuthGuards() @PermissionsDec(PermissionEnum.ADMINS, PermissionEnum.CUSTOMERS) @@ -131,6 +148,8 @@ export class UsersController { return this.usersService.createAdmin(createDto); } + /************************************************************ */ + @ApiOperation({ summary: "get all permissions ==> admin route" }) @AuthGuards() @PermissionsDec(PermissionEnum.ADMINS, PermissionEnum.CUSTOMERS) @@ -139,6 +158,8 @@ export class UsersController { return this.usersService.getPermissions(); } + /************************************************************ */ + @ApiOperation({ summary: "get all roles ==> admin route" }) @AuthGuards() @PermissionsDec(PermissionEnum.ADMINS, PermissionEnum.CUSTOMERS) @@ -147,6 +168,8 @@ export class UsersController { return this.usersService.getRoles(queryDto); } + /************************************************************ */ + @ApiOperation({ summary: "create role ==> admin route" }) @AuthGuards() @PermissionsDec(PermissionEnum.ADMINS, PermissionEnum.CUSTOMERS)