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: parseInt(options.page?.toString(), 10) || 1, pageSize: parseInt(options.pageSize?.toString(), 10) || 16, 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; } }