import { NextFunction } from 'express'; import { Response } from 'express'; import { Request } from 'express'; import { PaginationAwareObject, paginate } from "./helpers/pagination"; import { SelectQueryBuilder } from 'typeorm'; declare module "typeorm" { export interface SelectQueryBuilder<Entity> { paginate(per_page?: number|null): Promise<PaginationAwareObject>; } } /** * Boot the package by patching the SelectQueryBuilder * */ export function pagination(req: Request, res: Response, next: NextFunction):void { SelectQueryBuilder.prototype.paginate = async function(per_page?: number|null): Promise<PaginationAwareObject> { let current_page = getPage(req); if (!per_page) per_page = getPerPage(req) // If not set, then get from request, default to 15 else per_page = getPerPage(req, per_page);// If set, check if the request has per_page (which will override), or fallback to the set default return await paginate(this,current_page,per_page); } //console.log("pagination registered"); next(); } export function getPerPage(req: Request, defaultPerPage:number = 15) { return parseInt(req.query.per_page as string)|| defaultPerPage } export function getPage(req: Request, defaultPage:number=1) { return parseInt(req.query.page as string) || defaultPage }