@ngmartinezs-npm/orm-dinamicsentence-pg
v1.0.2
Published
Librería javascript que permite la coneccion y ejecución de operaciones a nivel de base de datos postgres. Esta librería proporciona métodos para establecer y gestionar la coneccion hacia la base de datos, así como los mecanismos para realizar operación
Downloads
1
Maintainers
Readme
@ngmartinezs-npm/ORM-DinamicSentence-pg
Librería javascript que permite la coneccion y ejecución de operaciones a nivel de base de datos postgres. Esta librería proporciona métodos para establecer y gestionar la coneccion hacia la base de datos, así como los mecanismos para realizar operación insert, update, delete y select sobre una base de postgres, retirando al equipo de desarrollo la necesidad de hacer líneas para abrir conexiones hacia la base de datos y crear rutinas para acceder a extraer información de la DB.
ORM-DinamicSentence-pg presenta la API para obtener coneccion a la DB, realizar operaciones insert, update, delete, select indicando a dichas API el nombre de la entidad o tabla sobre la que se va a trabajar, el esquema y la base de datos, y ORM-DinamicSentence-pg se encarga de construir las sentencias SQL requeridas para efectuar la operación.
Otro servicio provisto por ORM-DinamicSentence-pg es la posibilidad de configurar Querys de alta complejidad y efectuar la ejecución dinámica del mismo, eliminando la necesidad de tener que crear los objetos que se conectar a la DB y programar estos querys.
Comenzando 🚀
ORM-DinamicSentence-pg es una librería para DBMS Postgres 9.0.0 o superior que permite la generación de sentencias SQL dinámicas, por que para su correcto funcionamiento ya se usó como cliente de la API o como para mejorar esta librería, requiere que se tenga configurada una base de datos Postgres en la máquina local o acceso hacia la DB sobre la que se quiere conectar.
- De las base de datos sobre la que se va a trabajar es importante tener claro el valor a asignar a las siguiente variables de entorno.
DBNAME=XX /Nombre de la base de datos/ DBUSER=XX /Usuario con el que se conecta a la base de datos/ DBPASSWORD=XX /Pasword de coneccion a la base de datos./ DBHOST=XXX /Host de la base de datos/ DBPORT=XXX /Puerto de coneccion./
Asegurar que el usuario con el que va a conectar a la base de datos cuenta con los permisos requeridos para efectuar la operación que se va a utilizar.
Para uso de la api de querys dinámicos, es importante que a nivel de su DBMS al cual se va a conectar, se cree la estructura de la tabla sobre la que se almacena la información de los SQL dinamientos. Por favor referirse a la carpeta SQL del repositorio donde se deja la estructura base requerida.
Pre-requisitos 📋
- Se debe asegurar que se cuente con los datos para parametrizar las variables de entorno, asegurando no dejar espacios entre el nombre de la variable y el valor.
DBNAME=/*Nombre de la base de datos*/
DBUSER=/*Usuario con el que se conecta a la base de datos*/
DBPASSWORD=/*Pasword de coneccion a la base de datos.*/
DBHOST=/*Host de la base de datos*/
DBPORT=/*Puerto de coneccion.*/
Instalación 🔧
Para realizar la instalacion de la libreria, se debe ejecutar el siguiente comando.
npm install @ngmartinezs-npm/ORM-DinamicSentence-pg
Modo de Uso 🔧
Para usar la libreria se puede usar en tres modalidades:
1) Obtener coneccion de base de datos de forma Pool
const ConnectionDB = require("./connectionDB");
const ObjectCrud = require("./objectCrud");
const { configDB } = require("./configDB");
const pruebaTransactionDBPool = async () => {
console.log("Se inicial ejecucion --> pruebaTransactionDBPool");
var lConnectionDB = null;
try {
/*Se obtiene coneccion a la base de datos a mode de pool*/
lConnectionDB = new ConnectionDB("Pool");
const lResultI1 = await lConnectionDB.getConnection().query({
name: "fetch-insert1",
text:
"insert into public.table_with_seq (data,fecha_creacion) values ($1,now());",
values: ["Prueba Transaction1"],
});
console.log("Se ejecuta fetch-insert1 => " + JSON.stringify(lResultI1));
} catch (error) {
console.log("ERROR pruebaTransactionDBPool => " + error);
} finally {
/*Se libera la coneccion*/
if (lConnectionDB) await lConnectionDB.closeConnection();
}
};
2) Obtener coneccion de base de datos de forma Client
var lConnectionDB;
try {
/*Se obtiene coneccion como Cliente*/
lConnectionDB = new ConnectionDB("Client");
console.log("lConnectionDB --> " + JSON.stringify(lConnectionDB));
/*Se marca inicio de transaccion*/
await lConnectionDB.beginTransaction();
const lResultI1 = await lConnectionDB.getConnection().query({
name: "fetch-insert1",
text:
"insert into public.table_with_seq (data,fecha_creacion) values ($1,now());",
values: ["Prueba Transaction1"],
});
console.log("Se ejecuta fetch-insert1 => " + JSON.stringify(lResultI1));
const idAleatorio = Math.floor(Math.random() * 101);
const lResultI2 = await lConnectionDB.getConnection().query({
name: "fetch-insert2",
text:
"insert into public.table_without_se (id,data,fecha_creacion) values ($1,$2,now());",
values: [idAleatorio, "Prueba Transaction1"],
});
console.log("Se ejecuta fetch-insert2 => " + JSON.stringify(lResultI2));
/*Se confirma transaccion*/
await lConnectionDB.commitTransaction();
} catch (error) {
/*Se hace rollback de la transaccion*/
if (lConnectionDB) lConnectionDB.rollBackTransaction();
console.log("ERROR pruebaTransactionDBPool => " + error);
} finally {
/*Se cierra la coneccion*/
if (lConnectionDB) await lConnectionDB.closeConnection();
}
3)Hacer uso de CRUDS
3.1) Metodo Insertar mediante el api de CrudObjects
const pruebaTransactionDBClientObjectCrud = async () => {
console.log("Se inicial ejecucion --> pruebaTransactionDBClientObjectCrud");
var lConnectionDB = null;
try {
lConnectionDB = new ConnectionDB("Client");
const lObjectCrud = new ObjectCrud();
await lConnectionDB.beginTransaction();
const lResultI1 = await lObjectCrud.insertar(
lConnectionDB.getConnection(),
configDB.dbName,
"public",
"table_with_seq",
{ data: "Prueba Transaction1-crud" }
);
console.log(
"Se ejecuta fetch-insert1-crud => " + JSON.stringify(lResultI1)
);
};
3.2) Metodo Actualizar mediante api de CrudObjects
const datosUpdate = {
datosActulizar: { data: "Datos modificados" },
filtros: { id: "1" },
};
const lRespuesta = await objectCrud.update(
null,
configDB.dbName,
ESQUEMA_TABLE_TEST,
TABLE_TEST_WITH_SEQ,
datosUpdate
);
console.log(`Respuesta update-WithSeq => ${JSON.stringify(lRespuesta)}`);
assert.equal(lRespuesta.CODIGO_RETORNO, "0");
3.3) Metodo Select mediante api de CrudsObjects
const lRespuesta = await objectCrud.consultar(
null,
configDB.dbName,
ESQUEMA_TABLE_TEST,
TABLE_TEST_WITH_SEQ,
{ id: "1" }
);
assert.notEqual(lRespuesta.DATA.length, 0);
3.4) Metodo Delete mediante Api de CrudsObjects
const lFiltros = { id: "1" };
const lRespuesta = await objectCrud.delete(
null,
configDB.dbName,
ESQUEMA_TABLE_TEST,
TABLE_TEST_WITH_SEQ,
lFiltros
);
console.log(`Respuesta delete-WithSeq => ${JSON.stringify(lRespuesta)}`);
4) Uso del Api de SQL dinamico
const TABLE_QUERY_DINAMIC = "table_query_dinamic";
const generarDataQuery = require("../src/dinamicQuery");
const lRespuesta = await generarDataQuery(
null,
ESQUEMA_TABLE_TEST,
TABLE_QUERY_DINAMIC,
"QUERY_TEST",
{ num: "1" }
);
/*console.log(
`Respuesta generarDataQuery => ${JSO
Instalación En Desarrollo 🔧
Si el proposito de la libreria es validarla en ambiente de desarrollo para ajustarla, modificarla o mejorarla, primero descargue el proyecto, clonelo o efectue un fork.
git clone https://github.com/ngmartinezs/ORM-DinamicSentence-pg.git
Ejecutando las pruebas De Desarrollo ⚙️
Si se quiere probar la libreria en modo de desarrollo, se debe ejecutar el siguientes comando, asegurandose de establecer el valor de las variables de entorno.
npm run test
Construido con 🛠️
- Visual Studio Code - Id Desarrollo
- pg - Libreria para conectarse a postgres desde nodejs
- dotenv - Libreria para obtener el valor de la variables de entorno.
- postgres
Contribuyendo 🖇️
Wiki 📖
Versionado 📌
Para todas las versiones disponibles, mira los tags en este repositorio.
Autores ✒️
- Nestor Gonzalo Martinez Sarmiento - [email protected] @ngmartinezs
Licencia 📄
Este proyecto está bajo la Licencia GPU - mira el archivo LICENSE.md para detalles
⌨️ Cordialmente Nestor Martinez 😊