nestjs-typeorm-paginate-latest
v1.0.3
Published
A simple pagination function to build a pagination object with types
Downloads
8
Maintainers
Readme
Pagination helper method for TypeORM repostiories or queryBuilders with strict typings
Install
$ yarn add nestjs-typeorm-paginate
Usage
Service
import {Injectable} from '@nestjs/common';
import {Repository} from 'typeorm';
import {InjectRepository} from '@nestjs/typeorm';
import {CatEntity} from './entities';
import {paginate, Pagination, IPaginationOptions} from 'nestjs-typeorm-paginate';
@Injectable()
export class CatService {
constructor (
@InjectRepository(CatEntity) private readonly repository: Repository<CatEntity>,
) {}
async paginate(options: IPaginationOptions): Promise<Pagination<CatEntity>> {
return await paginate<CatEntity>(this.repository, options);
}
}
QueryBuilder
import {Injectable} from '@nestjs/common';
import {Repository} from 'typeorm';
import {InjectRepository} from '@nestjs/typeorm';
import {CatEntity} from './entities';
import {paginate, Pagination, IPaginationOptions} from 'nestjs-typeorm-paginate';
@Injectable()
export class CatService {
constructor (
@InjectRepository(CatEntity) private readonly repository: Repository<CatEntity>,
) {}
async paginate(options: IPaginationOptions): Promise<Pagination<CatEntity>> {
const queryBuilder = this.repository.createQueryBuilder('c');
queryBuilder.order('c.name', 'DESC'); // Or whatever you need to do
return await paginate<CatEntity>(queryBuilder, options);
}
}
Controller
import {Controller, Get, Query} from '@nestjs/common';
import {CatService} from './cat.service';
@Controller('cats')
export class CatsController {
constructor(private readonly catService: CatService) {}
@Get('')
async index(@Query('page') page: number = 0, @Query('limit') limit: number = 10) {
limit = limit > 100 ? 100 : limit;
return await this.catService.paginate({page, limit, route: 'http://cats.com/cats',});
}
}
Example Response
{
"items": [
{
"lives": 9,
"type": "tabby",
"name": "Bobby"
},
{
"lives": 2,
"type": "Ginger",
"name": "Garfield"
},
{
"lives": 6,
"type": "Black",
"name": "Witch's mate"
},
{
"lives": 7,
"type": "Purssian Grey",
"name": "Alisdaya"
},
{
"lives": 1,
"type": "Alistair",
"name": "ali"
},
...
],
"meta": {
"itemCount": 10,
"totalItems": 20,
"itemsPerPage": 10,
"totalPages": 5,
"currentPage": 2
},
"links" : {
"first": "http://cats.com/cats?limit=10",
"previous": "http://cats.com/cats?page=1&limit=10",
"next": "http://cats.com/cats?page=3&limit=10",
"last": "http://cats.com/cats?page=5&limit=10"
}
}
items
: An array of SomeEntity
meta.itemCount
: The length of items array (i.e., the amount of items on this page)
meta.totalItems
: The total amount of SomeEntity matching the filter conditions
meta.itemsPerPage
: The requested items per page (i.e., the limit
parameter)
meta.totalPages
: The total amount of pages (based on the limit
)
meta.currentPage
: The current page this paginator "points" to
links.first
: A URL for the first page to call | ""
(blank) if no route
is defined
links.previous
: A URL for the previous page to call | ""
(blank) if no previous to calllinks.next
: A URL for the next page to call | ""
(blank) if no page to calllinks.last
: A URL for the last page to call | ""
(blank) if no route
is defined
Find Parameters
@Injectable()
export class CatService {
constructor (
@InjectRepository(CatEntity) private readonly repository: Repository<CatEntity>,
) {}
async paginate(options: IPaginationOptions): Promise<Pagination<CatEntity>> {
return await paginate<CatEntity>(this.repository, options, {
lives: 9,
});
}
}