"use strict"; function getPagination( query ){ let limit = { page : 0, elements : 10 }; if( query.page ){ limit.page = parseInt( query.page ) || 0; if( limit.page < 0 ){ limit.page = 0; } } if( query.elements ){ limit.elements = parseInt( query.elements ) || 10; /** Safe pagination limit */ if( limit.elements > 1000 ){ limit.elements = 1000; } else if( limit.elements < 0 ){ limit.elements = 10; } } return limit; } async function getPage( page, elements, model, filter=null, projection=null){ const skip = elements * page; const total = await model.count( filter ); const list = await model.find( filter , projection, { skip : skip , limit : elements } ); return { total : total, limit : elements, skip : skip, data : list } } async function queryPage(page, elements, model, filter=null, projection=null){ const skip = elements * page; const total = await model.count( filter ); return { query : model.find( filter , projection, { skip : skip , limit : elements } ), total : total, skip : skip }; } module.exports = { getPagination , getPage, queryPage };