NestJS TypeORM Pagination
Installation
npm install @tfarras/nestjs-typeorm-pagination
Pagination Query params
-
_start
- from which row to start on fetch -
_limit
- how many rows to take -
_sortBy
? - column for sorting -
_order
? - order for sorting. Accepted values:1 | -1 | ASC | DESC
Filtration
You can filter your data by passing columns and values as query params.
For the moment we support Equal
and In
operator of typeorm.
Equal
Usage of To filter data with Equal
operator, you can simply add a parameter like column=value
Examples:
id=1
email=farrastaimoor@gmail.com
country=MD
In
Usage of To filter data with In
operator, you can add more than one time parameter like column=value
Examples:
id=1&&id=2&&id=3
country=MD&&country=SE&&country=US
Usage
Extend your entity from PaginateableBaseEntity
:
@Entity({ name: 'user' })
export class UserEntity extends PaginateableBaseEntity {
Add parameter decorator to your controller method :
@Get()
getMany(
@PgParams() pg: PaginationParams,
) {...}
And now you're able to use pagination:
...
import { PgParams, PaginationParams, Pagination } from '@tfarras/nestjs-typeorm-pagination';
@Get()
getMany(
@PgParams() pg: PaginationParams,
): Promise<Pagination<UserEntity>> {
return UserEntity.findAndPaginate(pg);
}
You still have access to TypeORM Find Options. Just pass them as the second parameter to the findAndPaginate
Example:
UserEntity.findAndPaginate(pg, {
where: {
firstname: IsNull(),
},
});
Example request:
/user?_limit=11&_start=0&_sortBy=id&_order=DESC&id=1&id=2&email=farrastaimoor@gmail.com
Pagination
response:
{
"data": [
{
"id": 2,
"email": "farrastaimoor@gmail.com",
"firstname": "Taimoor",
"lastname": "Farras",
"country": "MD",
}
],
"total": 1,
}