Skip to content

🎯 Fields Query Integration ​

QueryDTO keeps fields?: string as a controller-facing input. Parsing and projection stay in @querry-kit/nest-fields-query.

ts
import { Fields } from '@querry-kit/nest-fields-query';
import { PaginatedDTO, QueryDTO } from '@querry-kit/nest-prisma-query';

@Get()
async query(@Query() query: QueryDTO<ProjectTypeMap>): Promise<PaginatedDTO<ProjectDTO>> {
  const projection = Fields.parseAndValidate(query.fields, projectSchema);
  const include = projection ? Fields.include(projection, projectSchema, query.include) : query.include;

  const { items, pageMeta } = await this.projectsService.query<Project>({
    ...query,
    include,
  });

  return new PaginatedDTO(Fields.project(items.map(ProjectDTO.fromModel), projection), pageMeta);
}

Keep this logic in controllers or resource-specific services. @querry-kit/nest-prisma-query intentionally does not infer Prisma projection from the fields string.

Released under the MIT License.