Skip to content

tfarras/nestjs-typeorm-pagination

Repository files navigation

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.

Usage of Equal

To filter data with Equal operator, you can simply add a parameter like column=value

Examples:
id=1
[email protected]
country=MD

Usage of In

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 protected]

Pagination response:

{
  "data": [
    {
      "id": 2,
      "email": "[email protected]",
      "firstname": "Taimoor",
      "lastname": "Farras",
      "country": "MD",
    }
  ],
  "total": 1,
}