The-Bugger-Ducks / owl-partners-back

API do projeto "Owl Partners" (5º DSM - 2023, FATEC Profº Jessen Vidal - SJC)
https://owlpartners.onrender.com/api
2 stars 0 forks source link

:sparkles: Add filter in search partner route #45

Closed GabrielCamargoL closed 1 year ago

GabrielCamargoL commented 1 year ago

Filtros em Parcerias

Task

44

Rota: dominio.api/partners/search?=

Filtros inclusos:

OBS: todos são opcionais. Caso não seja passado nenhum argumento, será tratado como sem filtro, vindo uma lista de todas as parcerias.

Print dos resultados obtidos

image

image

Códigos

Controller

@Get('/search')
@UseGuards(AuthGuard('jwt'))
async findByFilters(@Query() filters: {
  name?: string;
  email?: string;
  status?: PartnerStatus;
  classification?: PartnerClassification;
  disabled?: boolean;
}): Promise<Prisma.PartnerWhereInput[]> {

    return await this.partnerService.findByFilters(filters);
}

Service

async findByFilters(filters: Partial<Partner>): Promise<Partner[]> {
  const filterMapping: { [key in keyof Partial<Partner>]?: (value: any) => Prisma.PartnerWhereInput } = {
    name: (value) => ({ name: { contains: value } }),
    email: (value) => ({ email: { contains: value } }),
    status: (value) => ({ status: { equals: value } }),
    classification: (value) => ({ classification: { equals: value } }),
    disabled: (value) => ({ disabled: { equals: value } }),
  };

  const where: Prisma.PartnerWhereInput = {};

  Object.entries(filters).forEach(([field, value]) => {
    const filterCondition = filterMapping[field as keyof Partial<Partner>];
    if (filterCondition && value !== undefined) {
      Object.assign(where, filterCondition(value));
    }
  });

  return this.prismaService.partner.findMany({ where });
}

Comentários Adicionais