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;
|
|
}
|
|
}
|