π¦ DTOs and Pagination β
The DTOs are intended for app-level controllers. They include Swagger metadata and class-validator/class-transformer decorators where runtime validation is meaningful.
π PageOptionsDTO β
PageOptionsDTO defaults to page = 1 and perPage = 10. Both values are transformed to numbers and validated as integers.
ts
import { ValidationPipe } from '@nestjs/common';
app.useGlobalPipes(
new ValidationPipe({
transform: true,
whitelist: true,
}),
);ts
import { QueryDTO } from '@querry-kit/nest-prisma-query';
@Get()
async query(@Query() query: QueryDTO<ProjectTypeMap>) {
const { items, pageMeta } = await this.projectsService.query(query);
return new PaginatedDTO(items.map(ProjectDTO.fromModel), pageMeta);
}The supported pagination range is:
ts
page >= 1
perPage >= 1
perPage <= 1000π§Ύ Query DTOs β
Use the DTO matching the service method:
ts
FindOneDTO<ProjectTypeMap>
FindManyDTO<ProjectTypeMap>
FindByIdDTO<ProjectTypeMap>
FindUniqueDTO<ProjectTypeMap>
AggregateDTO<ProjectTypeMap>
CountDTO<ProjectTypeMap>
QueryDTO<ProjectTypeMap>QueryDTO and FindByIdDTO expose fields?: string for controller-level integration with @querry-kit/nest-fields-query. This package does not derive select or include from fields.
π¬ Response Shape β
QueryService.query returns a service-level shape:
ts
type Paginated<Project> = {
items: Project[];
itemCount: number;
pageMeta: PageMetaDTO;
};Controllers usually convert it to the public DTO shape:
ts
const { items, pageMeta } = await this.projectsService.query<Project>(query);
return new PaginatedDTO(items.map(ProjectDTO.fromModel), pageMeta);PageMetaDTO computes pageCount, hasPrevPage, and hasNextPage from itemCount, page, and perPage.