Commit e477031d authored by ramiro's avatar ramiro

ajuste de sql query para docuemntos

parent 29bf0b8c
......@@ -27,13 +27,12 @@ function verificarPermiso (rolUsuario, rutaParam, verboHttp) {
try {
let ruta = rutaParam;
ruta = (ruta.split('?'))[0];
const posiblesLlaves = Object.keys(permisos).filter(el => el.startsWith(ruta));
console.log('------posiblesLlaves ', posiblesLlaves);
if (posiblesLlaves.length === 1 && posiblesLlaves[0] === ruta) {
return obtenerPermiso(posiblesLlaves[0], rolUsuario, verboHttp);
let posiblesLlaves = Object.keys(permisos).filter(el => el.startsWith(ruta));
if (posiblesLlaves.length === 0) {
posiblesLlaves = Object.keys(permisos).filter(x => new RegExp(`^${x}$`).test(ruta))
}
return obtenerPermiso(posiblesResultados[0], rolUsuario, verboHttp);
console.log('------posiblesLlaves ', posiblesLlaves);
return obtenerPermiso(posiblesLlaves[0], rolUsuario, verboHttp);
} catch (error) {
console.log('--- erro ', error);
return error;
......@@ -49,7 +48,6 @@ module.exports = (req, res, next) => {
.then(() => verificarPermiso(req.body.audit_usuario.roles, req.path, req.method))
.then((tienePermiso) => {
if (!tienePermiso) {
console.log('Usuario no tiene permiso para este recurso.');
return res.status(403).json({error: 'Usted no tiene permiso de acceso a esta ruta.'});
}
next();
......
const permisos = {
'/api/v1/plantillasFormly/plantilla_formly/': {
ADMIN: ['POST', 'GET']
ADMIN: ['POST', 'GET']
},
'/accesos': {
ADMINISTRADOR: ['PATCH'],
ENTIDAD: ['PATCH'],
},
'/usuarios/[a-zA-Z0-9]+': {
ADMINISTRADOR: ['POST', 'GET', 'PATCH'],
},
'/usuarios/[a-zA-Z0-9]+/cuentas': {
ADMINISTRADOR: ['PATCH'],
ENTIDAD: ['PATCH'],
},
'/entidades': {
ADMINISTRADOR: ['GET', 'POST'],
ENTIDAD: ['GET'],
},
'/entidades/cuentas': {
ADMINISTRADOR: ['GET'],
ENTIDAD: ['GET'],
},
'/entidades/[0-9]+': {
ADMINISTRADOR: ['PATCH', 'GET'],
},
'/entidades/[0-9]+/tramites': {
ENTIDAD: ['GET', 'POST'],
},
'/entidades/[0-9]+/tramites/[0-9]+': {
ENTIDAD: ['PATCH', 'GET'],
},
'/entidades/[0-9]+/cuentas': {
ADMINISTRADOR: ['GET', 'POST'],
ENTIDAD: ['GET', 'POST'],
},
'/entidades/[0-9]+/cuentas/[0-9]+': {
ADMINISTRADOR: ['PATCH', 'GET'],
ENTIDAD: ['GET', 'PATCH'],
},
'/usuariosAplicacion': {
ADMINISTRADOR: ['GET', 'POST', 'PATCH'],
ENTIDAD: ['GET'],
},
'/usuariosAplicacion/[0-9]+': {
ADMINISTRADOR: ['GET', 'POST', 'PATCH'],
ENTIDAD: ['GET'],
},
'/codigosPagoTramites': {
ENDPOINT: ['POST'],
ADMINISTRADOR: ['GET'],
ENTIDAD: ['GET'],
},
'/entidades/[0-9]+/tramites/[0-9]+/token': {
ENTIDAD: ['POST'],
},
'/entidades/[0-9]+/tramites/[0-9]+/token/[0-9]+': {
ENTIDAD: ['PATCH'],
},
'/codigosPagoTramites/[0-9]+': {
ADMINISTRADOR: ['GET'],
ENTIDAD: ['GET'],
ENDPOINT: ['GET', 'PATCH'],
},
'/codigosPagoTramites/movimientos/[0-9|-]+': {
ENTIDAD: ['GET'],
},
'/tramites': {
ENDPOINT: ['GET'],
},
'/api/v1/plantillasFormly/documento/[0-9]+/misdocumentos/': {
ADMIN: ['POST', 'GET'],
OPERADOR: ['POST', 'GET']
}
};
module.exports = permisos;
\ No newline at end of file
module.exports = permisos;
\ No newline at end of file
......@@ -568,21 +568,32 @@ module.exports = app => {
// app.get('/api/v1/plantillasFormly/documento/:id/misdocumentos', filtros, (req, res) => {
app.get('/api/v1/plantillasFormly/documento/:id/misdocumentos', (req, res) => {
const { limit, page, filter, fields } = req.query;
if(!filter) throw new Error('Debe escribir un texto para buscar.');
let mywhere;
let myselect;
let myorder;
let limite = parseInt(limit);
let pagina = parseInt(page) > 0 ? parseInt(page) : 1;
let strTo = filter.replace(/\s\s+/g, ' ').split(' ').filter(x => x);
let strToSearchFTS = strTo.join('&'); // solo un expacio entre palabras y unidolos con & para el fts
let strToSearch = strTo.join(' '); // para mandar a ilike
let myTsQuery = `to_tsquery('${diccionarioPlanillasFTS}', '${strToSearchFTS}')`;
let myWhere = `estado NOT IN ('ELIMINADO','RECHAZADO') AND _usuario_creacion = ${parseInt(req.params.id)}
AND (document_tokens @@ ${myTsQuery} OR nombre ilike '%${strToSearch}%' OR nombre_plantilla ilike '%${strToSearch}%')
`;
if(!!filter) {
let strTo = filter.replace(/\s\s+/g, ' ').split(' ').filter(x => x);
let strToSearchFTS = strTo.join('&'); // solo un expacio entre palabras y unidolos con & para el fts
let strToSearch = strTo.join(' '); // para mandar a ilike
let myTsQuery = `to_tsquery('${diccionarioPlanillasFTS}', '${strToSearchFTS}')`;
myWhere = `estado NOT IN ('ELIMINADO','RECHAZADO') AND _usuario_creacion = ${parseInt(req.params.id)}
AND (document_tokens @@ ${myTsQuery} OR nombre ilike '%${strToSearch}%' OR nombre_plantilla ilike '%${strToSearch}%')
`;
myselect = `SELECT ${fields}, ts_rank_cd(document_tokens, ${myTsQuery}) as rank, count(*) OVER() AS total_docs`;
myorder = `ORDER BY rank DESC, "_fecha_modificacion" desc`;
} else {
myWhere = `estado NOT IN ('ELIMINADO','RECHAZADO') AND _usuario_creacion = ${parseInt(req.params.id)}`;
myselect = `SELECT ${fields}, count(*) OVER() AS total_docs`;
myorder = `ORDER BY "_fecha_modificacion" desc`;
}
const strQuery = `
SELECT ${fields}, ts_rank_cd(document_tokens, ${myTsQuery}) as rank, count(*) OVER() AS total_docs
${myselect}
FROM documento
WHERE ${myWhere}
ORDER BY rank DESC, "_fecha_modificacion" desc
${myorder}
LIMIT ${limite}
OFFSET ${parseInt(pagina) - 1}*${limite}
;
......@@ -594,7 +605,7 @@ app.get('/api/v1/plantillasFormly/documento/:id/misdocumentos', (req, res) => {
type: dbx.QueryTypes.SELECT
})
.then(respDocumentos => {
if (!respDocumentos) throw new Error('No existen resultados.');
if (respDocumentos.length <= 0) throw new Error('No existen resultados.');
return res.send(util.formatearMensaje("EXITO", 'Obtención de documento exitosa.', {total: parseInt(respDocumentos[0].total_docs), resultado: respDocumentos}));
})
.catch(error => res.status(412).send(util.formatearMensaje("ERROR", error)));
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment