Skip to content

ntheanh201/nestjs-sequelize-pagination

Repository files navigation

Nest Logo

NestJS Sequelize Pagination

@ntheanh201/nestjs-sequelize-pagination

A pagination module for NestJS and Sequelize, inspired by dw-nest-sequelize-pagination with deeper customization

Installation

$ npm install @ntheanh201/nestjs-sequelize-pagination
$ yarn add @ntheanh201/nestjs-sequelize-pagination

Getting Started

Import

Import and add StripeModule to the imports section of the consuming module (most likely AppModule).

import { PaginationModule } from '@ntheanh201/nestjs-sequelize-pagination';

@Module({
  imports: [PaginationModule.forRoot({ isGlobal: true })],
})
export class AppModule {}

Configuration

This module support forRoot patterns for configuration, with values:

Name Description Type Default
isGlobal Use module globally boolean true
limit The number of rows returned number 10
page The page to start pagination, one-based indexing number 1
orderBy The key sorting returned data string null
orderDirection The sorting direction (ASC, DESC, NULLS FIRST, ...) string null

Service

Sequelize service override findAll method from Sequelize and allow you to handle pagination automaticaly.

import { Injectable } from '@nestjs/common';
import { Includeable, Op } from 'sequelize';
import {
  PaginationQuery,
  PaginationResponse,
  PaginationService,
} from '@ntheanh201/nestjs-sequelize-pagination';

@Injectable()
export class ProductService {
  constructor(private paginationService: PaginationService) {}

  findAll(
    paginationOptions: PaginationQuery,
    include: Includeable | Includeable[] = [],
  ): Promise<PaginationResponse<Product>> {
    let whereCondition;
    const keySearch = paginationOptions?.searchKey;
    if (keySearch) {
      whereCondition = {
        [Op.or]: [
          { sku: { [Op.like]: `%${keySearch}%` } },
          { barcode: { [Op.like]: `%${keySearch}%` } },
          { name: { [Op.like]: `%${keySearch}%` } },
        ],
      };
    }

    return this.paginationService.findAll(
      {
        ...paginationOptions,
        model: Product,
      },
      {
        where: whereCondition,
        include,
      },
    );
  }
}

Controller

@Controller('/products')
export class ProductController {
  constructor(private readonly productService: ProductService) {}

  @Get()
  @ApiOperation({ summary: 'Get products' })
  getProducts(
    @Pagination({
      limit: 10,
      page: 0,
      orderBy: 'createdAt',
      orderDirection: 'DESC',
      searchKey: 'pro',
    })
    pagination: PaginationQuery,
  ): Promise<PaginationResponse<Product>> {
    return this.productService.findAll(pagination);
  }
}

Contributing

Contributions welcome! See Contributing.

Stay in touch

The Anh Nguyen (Facebook)

About

NestJS + Sequelize + Pagination

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published