lucis-api-query
Advanced tools
Comparing version 0.0.2 to 0.0.3
117
index.js
function pluginMongoose (schema) { | ||
schema.statics.getSearchParams = function(rawParams) { | ||
function getSearchParams (rawParams) { | ||
@@ -163,4 +163,4 @@ var model = this; | ||
let populate = options.populate; | ||
let lean = options.lean || false; | ||
let leanWithId = options.leanWithId ? options.leanWithId : true; | ||
let lean = options.lean || true; | ||
let leanWithId = options.leanWithId || true; | ||
let limit = options.limit ? options.limit : 10; | ||
@@ -226,53 +226,90 @@ let page, offset, skip, promises; | ||
} | ||
/** | ||
* Função que efetivamente será chamada pelo serviço/router | ||
*/ | ||
schema.statics.lucisApiQuery = function(callback){ | ||
// TODO: O mongoose-paginate não trata erros, tem que adicionar isso e tratar aqui também | ||
return (req, res) => { | ||
const lucisApiData = getDataFromReq(req, res); | ||
const parsedParams = getSearchParams(req.query); | ||
this.paginate(parsedParams, lucisApiData, (data)=>{ | ||
if (callback){ | ||
return callback(req, res, data); | ||
} | ||
return res.json(data); | ||
}); | ||
}; | ||
}; | ||
}; | ||
// TODO: tornar ou tudo inglês ou portugues para não precisar aquelas funções util | ||
function middlewareExpress (req, res, next) { | ||
req.query.pagina = (typeof req.query.pagina === 'string') ? parseInt(req.query.pagina, 10) || 1 : 1; | ||
/** | ||
* Maps the sent params regarding pagination to its own object and removes them from the request params | ||
* | ||
* @param {*} req | ||
* @param {*} res | ||
* @param {*} next | ||
*/ | ||
function getDataFromReq (req, res) { | ||
// Data regarding pagination | ||
req.query.page = (typeof req.query.page === 'string') ? parseInt(req.query.page, 10) || 1 : 1; | ||
req.query.resultadosPorPagina = (typeof req.query.resultadosPorPagina === 'string') ? parseInt(req.query.resultadosPorPagina, 10) || 0 : 10; | ||
req.query.limit = (typeof req.query.limit === 'string') ? parseInt(req.query.limit, 10) || 0 : 10; | ||
if (req.query.resultadosPorPagina > 50) | ||
req.query.resultadosPorPagina = 50; | ||
if (req.query.limit > 50) | ||
req.query.limit = 50; | ||
if (req.query.pagina < 1) | ||
req.query.pagina = 1; | ||
if (req.query.page < 1) | ||
req.query.page = 1; | ||
if (req.query.resultadosPorPagina < 0) | ||
req.query.resultadosPorPagina = 0; | ||
if (req.query.limit < 0) | ||
req.query.limit = 0; | ||
req.skip = req.offset = (req.query.pagina * req.query.resultadosPorPagina) - req.query.resultadosPorPagina; | ||
req.skip = req.offset = (req.query.page * req.query.limit) - req.query.limit; | ||
res.locals.paginacao = {}; | ||
res.locals.paginacao.skip = req.skip; | ||
res.locals.paginacao.pagina = req.query.pagina; | ||
res.locals.paginacao.resultadosPorPagina = req.query.resultadosPorPagina | ||
const lucisApiData = {}; | ||
lucisApiData.skip = req.skip; | ||
lucisApiData.page = req.query.page; | ||
lucisApiData.limit = req.query.limit | ||
delete req.query.pagina; | ||
delete req.query.resultadosPorPagina; | ||
next(); | ||
}; | ||
delete req.query.page; | ||
delete req.query.limit; | ||
function montaEntidadePaginacao(resposta){ | ||
return { | ||
totalDeEntidades: resposta.total, | ||
entidades: resposta.docs, | ||
pagina: resposta.page, | ||
resultadosPorPagina: resposta.limit, | ||
totalDePaginas: resposta.pages | ||
} | ||
}; | ||
// Data regarding selection and paginate | ||
const { select, paginate } = req.query; | ||
select = (typeof select === 'string') ? select.replace(',', ' ') : null; | ||
paginate = (typeof paginate === 'string') ? paginate.replace(',', ' ') : null; | ||
function montaConfigPaginacao(paginacao, campos, populate){ | ||
return { | ||
page: paginacao.pagina, | ||
limit: paginacao.resultadosPorPagina, | ||
lean: true, | ||
select: campos, | ||
populate: populate | ||
}; | ||
lucisApiData.select = req.query.select; | ||
lucisApiData.paginate = req.query.paginate | ||
delete req.query.select; | ||
delete req.query.paginate; | ||
return lucisApiData; | ||
}; | ||
const biblioteca = {pluginMongoose, middlewareExpress, montaEntidadePaginacao, montaConfigPaginacao}; | ||
// TODO: Não deve ser necessário | ||
// function montaEntidadePaginacao(resposta){ | ||
// return { | ||
// totalDeEntidades: resposta.total, | ||
// entidades: resposta.docs, | ||
// pagina: resposta.page, | ||
// resultadosPorPagina: resposta.limit, | ||
// totalDePaginas: resposta.pages | ||
// } | ||
// }; | ||
// TODO: Não deve ser necessário | ||
// function montaConfigPaginacao(paginacao, campos, populate){ | ||
// return { | ||
// page: paginacao.pagina, | ||
// limit: paginacao.resultadosPorPagina, | ||
// lean: true, | ||
// select: campos, | ||
// populate: populate | ||
// }; | ||
// }; | ||
const biblioteca = {pluginMongoose}; | ||
module.exports = exports = biblioteca; |
{ | ||
"name": "lucis-api-query", | ||
"version": "0.0.2", | ||
"version": "0.0.3", | ||
"description": "Adaptação do mongoose-api-query para necessidades mais comuns", | ||
@@ -5,0 +5,0 @@ "main": "index.js", |
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
14757
4
279
24