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