DEV Community

Cover image for πŸš€ Best NestJS Package for Filtering and Pagination

πŸš€ Best NestJS Package for Filtering and Pagination

First lets install this incredible package

Installation

npm install nestjs-paginate 
Enter fullscreen mode Exit fullscreen mode

Now our Endpoint should look something like that

http://localhost:3000/cats?limit=5&page=2&sortBy=color:DESC&search=i&filter.age=$gte:3&select=id,name,color,age 
Enter fullscreen mode Exit fullscreen mode

And the result should look like that

{ "data": [ { "id": 4, "name": "George", "color": "white", "age": 3 }, { "id": 5, "name": "Leche", "color": "white", "age": 6 }, { "id": 2, "name": "Garfield", "color": "ginger", "age": 4 }, { "id": 1, "name": "Milo", "color": "brown", "age": 5 }, { "id": 3, "name": "Kitty", "color": "black", "age": 3 } ], "meta": { "itemsPerPage": 5, "totalItems": 12, "currentPage": 2, "totalPages": 3, "sortBy": [["color", "DESC"]], "search": "i", "filter": { "age": "$gte:3" } }, "links": { "first": "http://localhost:3000/cats?limit=5&page=1&sortBy=color:DESC&search=i&filter.age=$gte:3", "previous": "http://localhost:3000/cats?limit=5&page=1&sortBy=color:DESC&search=i&filter.age=$gte:3", "current": "http://localhost:3000/cats?limit=5&page=2&sortBy=color:DESC&search=i&filter.age=$gte:3", "next": "http://localhost:3000/cats?limit=5&page=3&sortBy=color:DESC&search=i&filter.age=$gte:3", "last": "http://localhost:3000/cats?limit=5&page=3&sortBy=color:DESC&search=i&filter.age=$gte:3" } } 
Enter fullscreen mode Exit fullscreen mode

Now lets find how to set up our code

The Entity

import { Column, Entity } from 'typeorm'; @Entity() export class CommodityEntity extends AbstractSharedEntity { @Column({ length: 500 }) name: string; @Column({ length: 50 }) icon: string; } 
Enter fullscreen mode Exit fullscreen mode

The Controller

... import { Paginate, PaginateQuery } from 'nestjs-paginate'; ... async findAll(@Query() where: any, @Paginate() query: PaginateQuery) { return await this.commodityService.findAll(query); } ... 
Enter fullscreen mode Exit fullscreen mode

The Service

... import { FilterOperator, FilterSuffix, PaginateQuery, paginate } from 'nestjs-paginate'; ... public async findAll(query: PaginateQuery): Promise<any> { return paginate(query, this.commodityRepository.getRepository(), { sortableColumns: ['id', 'created_at'], nullSort: 'last', withDeleted: !!query?.filter?.deleted_at, searchableColumns: ['name'], select: ['name', 'icon', 'created_at', 'isActive', 'deleted_at'], filterableColumns: { name: [FilterOperator.CONTAINS, FilterOperator.EQ], isActive: [FilterOperator.EQ], deleted_at: [FilterSuffix.NOT, FilterOperator.NULL], }, }); } ... 
Enter fullscreen mode Exit fullscreen mode

Top comments (0)