From 7cbbbbe18cb5194ff4fe984ebccea052cff1a72e Mon Sep 17 00:00:00 2001 From: Diego Dario <25825145+diegodario88@users.noreply.github.com> Date: Sun, 19 May 2024 19:27:57 -0300 Subject: [PATCH] feat: add multi option for priority queryParam Tentar resolver #145 --- src/shelter/ShelterSearch.ts | 13 +++++++++---- src/shelter/shelter.service.ts | 4 +++- src/shelter/types/search.types.ts | 10 ++++++++-- 3 files changed, 20 insertions(+), 7 deletions(-) diff --git a/src/shelter/ShelterSearch.ts b/src/shelter/ShelterSearch.ts index 1b9c76cf..649f20a2 100644 --- a/src/shelter/ShelterSearch.ts +++ b/src/shelter/ShelterSearch.ts @@ -31,12 +31,14 @@ class ShelterSearch { } priority(supplyIds: string[] = []): Prisma.ShelterWhereInput { - if (!this.formProps.priority) return {}; + if (!this.formProps.priority?.length) return {}; return { shelterSupplies: { some: { - priority: +this.formProps.priority, + priority: { + in: this.formProps.priority, + }, supplyId: supplyIds.length > 0 ? { @@ -71,13 +73,16 @@ class ShelterSearch { } supplyCategoryIds( - priority?: SupplyPriority | null, + priority?: SupplyPriority[] | null, ): Prisma.ShelterWhereInput { if (!this.formProps.supplyCategoryIds) return {}; + return { shelterSupplies: { some: { - priority: priority ? +priority : undefined, + priority: { + in: priority?.length ? priority : [], + }, supply: { supplyCategoryId: { in: this.formProps.supplyCategoryIds, diff --git a/src/shelter/shelter.service.ts b/src/shelter/shelter.service.ts index f79ac367..56a3c613 100644 --- a/src/shelter/shelter.service.ts +++ b/src/shelter/shelter.service.ts @@ -127,6 +127,8 @@ export class ShelterService implements OnModuleInit { search: searchQuery, } = SearchSchema.parse(query); const queryData = ShelterSearchPropsSchema.parse(qs.parse(searchQuery)); + console.log(queryData); + const { getQuery } = new ShelterSearch(this.prismaService, queryData); const where = await getQuery(); @@ -168,7 +170,7 @@ export class ShelterService implements OnModuleInit { shelterSupplies: { where: { priority: { - notIn: [SupplyPriority.UnderControl], + in: queryData.priority, }, }, orderBy: { diff --git a/src/shelter/types/search.types.ts b/src/shelter/types/search.types.ts index b87e653a..64dd1a3a 100644 --- a/src/shelter/types/search.types.ts +++ b/src/shelter/types/search.types.ts @@ -32,8 +32,14 @@ export type GeolocationFilter = z.infer; export const ShelterSearchPropsSchema = z.object({ search: z.string().optional(), priority: z.preprocess( - (value) => Number(value) || undefined, - z.nativeEnum(SupplyPriority).optional(), + (value) => + typeof value === 'string' + ? value + .split(',') + .map((v) => Number(v)) + .filter((v) => !isNaN(v)) + : [], + z.array(z.nativeEnum(SupplyPriority)).optional(), ), supplyCategoryIds: z.array(z.string()).optional(), supplyIds: z.array(z.string()).optional(),