34 lines
905 B
TypeScript
34 lines
905 B
TypeScript
|
import { Injectable } from '@nestjs/common';
|
||
|
import {
|
||
|
PageOptions,
|
||
|
PaginationOptions,
|
||
|
} from 'src/types/pagination.interfaces';
|
||
|
|
||
|
@Injectable()
|
||
|
export class PaginationService {
|
||
|
public paginate(options: PageOptions, rowCount: number): PaginationOptions {
|
||
|
const paginationOptions: PaginationOptions = {
|
||
|
page: options.page || 1,
|
||
|
pageSize: options.pageSize || 50,
|
||
|
rowCount,
|
||
|
};
|
||
|
|
||
|
// Calculate page count from row count and page size
|
||
|
paginationOptions.pageCount = Math.ceil(
|
||
|
rowCount / paginationOptions.pageSize,
|
||
|
);
|
||
|
|
||
|
// Limit the page number to 1..pageCount
|
||
|
paginationOptions.page = Math.max(
|
||
|
Math.min(paginationOptions.page, paginationOptions.pageCount),
|
||
|
1,
|
||
|
);
|
||
|
|
||
|
// Calculate the offset for the query
|
||
|
paginationOptions.offset =
|
||
|
(paginationOptions.page - 1) * paginationOptions.pageSize;
|
||
|
|
||
|
return paginationOptions;
|
||
|
}
|
||
|
}
|