diff --git a/src/shelter/shelter.controller.ts b/src/shelter/shelter.controller.ts index 097285e4..d511b795 100644 --- a/src/shelter/shelter.controller.ts +++ b/src/shelter/shelter.controller.ts @@ -79,4 +79,15 @@ export class ShelterController { throw new HttpException(err?.code ?? err?.name ?? `${err}`, 400); } } + + @Get('/all') + async list(@Query() query) { + try { + const data = await this.shelterService.list(query); + return new ServerResponse(200, 'Successfully get shelters', data); + } catch (err: any) { + this.logger.error(`Failed to get shelters: ${err}`); + throw new HttpException(err?.code ?? err?.name ?? `${err}`, 400); + } + } } diff --git a/src/shelter/shelter.service.ts b/src/shelter/shelter.service.ts index a24aa7ab..0273043d 100644 --- a/src/shelter/shelter.service.ts +++ b/src/shelter/shelter.service.ts @@ -185,4 +185,41 @@ export class ShelterService { this.voluntaryIds.push(...resp.map((s) => s.id)); }); } + + async list(query: any) { + const { order, orderBy, search: searchQuery } = SearchSchema.parse(query); + const queryData = qs.parse(searchQuery) as unknown as IFilterFormProps; + const { query: where } = new ShelterSearch(this.prismaService, queryData); + const count = await this.prismaService.shelter.count({ where }); + + const whereData: Prisma.ShelterFindManyArgs = { + orderBy: { [orderBy]: order }, + where, + }; + + const results = await this.prismaService.shelter.findMany({ + ...whereData, + select: { + id: true, + name: true, + pix: true, + address: true, + capacity: true, + contact: true, + petFriendly: true, + shelteredPeople: true, + prioritySum: true, + verified: true, + latitude: true, + longitude: true, + createdAt: true, + updatedAt: true, + }, + }); + + return { + count, + results: results, + }; + } }