From 2b51059bc141173df0ed333f040d79295e2c64aa Mon Sep 17 00:00:00 2001 From: mahyargdz Date: Sun, 9 Mar 2025 17:08:00 +0330 Subject: [PATCH] chore: add service search --- .../DTO/danak-services-search-query.dto.ts | 2 ++ .../danak-services.controller.ts | 9 ++++++- .../providers/danak-services.service.ts | 26 ++++++++++++++++++- 3 files changed, 35 insertions(+), 2 deletions(-) diff --git a/src/modules/danak-services/DTO/danak-services-search-query.dto.ts b/src/modules/danak-services/DTO/danak-services-search-query.dto.ts index f9fe0e5..736f06c 100755 --- a/src/modules/danak-services/DTO/danak-services-search-query.dto.ts +++ b/src/modules/danak-services/DTO/danak-services-search-query.dto.ts @@ -29,4 +29,6 @@ export class DanakServicesSearchQueryDto extends PaginationDto { isDanakSuggest?: number; } +export class DanakServicesGlobalSearchDto extends PickType(DanakServicesSearchQueryDto, ["q"]) {} + export class DanakServicesQueryDto extends PickType(DanakServicesSearchQueryDto, ["limit", "page", "categoryId"] as const) {} diff --git a/src/modules/danak-services/danak-services.controller.ts b/src/modules/danak-services/danak-services.controller.ts index a354e75..063c80b 100755 --- a/src/modules/danak-services/danak-services.controller.ts +++ b/src/modules/danak-services/danak-services.controller.ts @@ -6,7 +6,7 @@ import { CategoryListSearchQueryDto, CategorySearchQueryDto } from "./DTO/catego import { CreateCategoryDto } from "./DTO/create-category.dto"; import { CreateServiceDto } from "./DTO/create-service.dto"; import { DanakServiceReviewQueryDto } from "./DTO/danak-service-review-query.dto"; -import { DanakServicesQueryDto, DanakServicesSearchQueryDto } from "./DTO/danak-services-search-query.dto"; +import { DanakServicesGlobalSearchDto, DanakServicesQueryDto, DanakServicesSearchQueryDto } from "./DTO/danak-services-search-query.dto"; import { UpdateCategoryDto } from "./DTO/update-category.dto"; import { UpdateReviewStatusDto } from "./DTO/update-review-status.dto"; import { UpdateServiceDto } from "./DTO/update-service.dto"; @@ -112,6 +112,13 @@ export class DanakServicesController { return this.danakServicesService.getServicesListForUser(queryDto); } + @ApiOperation({ summary: "search danak services" }) + @AuthGuards() + @Get("search") + searchServices(@Query() queryDto: DanakServicesGlobalSearchDto) { + return this.danakServicesService.searchServices(queryDto); + } + @AuthGuards() @PermissionsDec(PermissionEnum.SERVICES) @ApiOperation({ summary: "toggle status of danak service => admin route" }) diff --git a/src/modules/danak-services/providers/danak-services.service.ts b/src/modules/danak-services/providers/danak-services.service.ts index 3e09e32..1b52985 100755 --- a/src/modules/danak-services/providers/danak-services.service.ts +++ b/src/modules/danak-services/providers/danak-services.service.ts @@ -10,7 +10,7 @@ import { CategoryListSearchQueryDto, CategorySearchQueryDto } from "../DTO/categ import { CreateCategoryDto } from "../DTO/create-category.dto"; import { CreateServiceDto } from "../DTO/create-service.dto"; import { DanakServiceReviewQueryDto } from "../DTO/danak-service-review-query.dto"; -import { DanakServicesQueryDto, DanakServicesSearchQueryDto } from "../DTO/danak-services-search-query.dto"; +import { DanakServicesGlobalSearchDto, DanakServicesQueryDto, DanakServicesSearchQueryDto } from "../DTO/danak-services-search-query.dto"; import { UpdateCategoryDto } from "../DTO/update-category.dto"; import { UpdateReviewStatusDto } from "../DTO/update-review-status.dto"; import { UpdateServiceDto } from "../DTO/update-service.dto"; @@ -324,6 +324,30 @@ export class DanakServicesService { async getServicesListForUser(queryDto: DanakServicesQueryDto) { return this.danakServicesRepository.getServicesForUser(queryDto); } + /******************************************** */ + + async searchServices(queryDto: DanakServicesGlobalSearchDto) { + const servicesQuery = this.danakServicesRepository + .createQueryBuilder("service") + .leftJoin("service.category", "category") + .leftJoin("service.subscriptionPlans", "subscriptionPlans") + .select(["service.id", "service.name", "service.description", "service.icon", "category.id", "category.title"]) + .where("service.isActive = :isActive", { isActive: true }) + .andWhere("service.deletedAt IS NULL") + .andWhere("category.isActive = :categoryActive", { categoryActive: true }) + .andWhere("category.deletedAt IS NULL") + .andWhere("subscriptionPlans.isActive = :planActive", { planActive: true }); + + if (queryDto.q) { + servicesQuery.andWhere("service.name ILIKE :searchQuery", { searchQuery: `%${queryDto.q}%` }); + } + + const services = await servicesQuery.getMany(); + + return { + services, + }; + } /******************************************** */