icynet-auth-server/src/modules/utility/services/paginate.service.ts

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