mp-holistic
Version:
si prefigge l'umile compito di aiutare nella creazione di : - un server API REST mediante express - un semplice ORM per Postgres Questo tramite decoratori o classi particolari.
392 lines • 18.6 kB
JavaScript
"use strict";
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.MainPostgres = exports.EseguiQueryControllata = void 0;
const pg_1 = require("pg");
const metadata_1 = require("../metadata");
const classe_postgres_1 = require("./classe.postgres");
const policy_1 = require("./policy");
const fs_1 = __importDefault(require("fs"));
function EseguiQueryControllata(client, query) {
return __awaiter(this, void 0, void 0, function* () {
try {
if (query != "") {
yield client.query(query);
console.log('ESEGUITOO : \n' + query);
return {
index: 0,
errore: undefined,
risultato: query
};
}
return {
index: 0,
errore: undefined,
risultato: query
};
}
catch (error) {
console.log('\n\nINIZIO Errroe : \n**********************\n\n');
console.log('-Query:\n' + query + '\n\n');
console.log('-Error:\n' + error);
console.log('\n\nFINE Errroe : \n**********************\n\n');
return {
index: 0,
errore: {
query: query,
errore: '' + error
},
risultato: undefined
};
}
});
}
exports.EseguiQueryControllata = EseguiQueryControllata;
class MainPostgres {
constructor() {
this.listaRuoli = [];
this.listaUser = [];
this.elencoQuery = [];
this.listaRuoli = [];
this.listaUser = [];
this.listaClassi = (0, metadata_1.GetListaClasseMeta)('nomeMetadataKeyTargetFor_Postgres', () => { return new classe_postgres_1.ListaPostgresClasse(); });
}
InizializzaORM(item) {
var _a, _b, _c, _d;
try {
if (item == undefined)
item = {};
const ritorno = '';
this.elencoQuery.push(`CREATE EXTENSION plv8;`);
if (item.dropAllTable == undefined || item.dropAllTable == true) {
this.elencoQuery.push((0, classe_postgres_1.DropAllTable)());
}
this.elencoQuery.push((0, classe_postgres_1.TriggerUpdate_updated_at_column)());
this.InizializzaRuoli(this.elencoQuery, (_a = item.listaRuoli) !== null && _a !== void 0 ? _a : []);
this.InizializzaUser(this.elencoQuery, (_b = item.listaUser) !== null && _b !== void 0 ? _b : []);
/* */
for (const element of this.listaClassi) {
element.CostruisciCreazioneDB(this.elencoQuery, true);
}
/* for (const element of this.listaClassi) {
(<PostgresClasse>element).CostruisciCreazioneDB(this.elencoQuery, false);
} */
for (const element of this.listaClassi) {
element.CostruisciRelazioniDB(this.elencoQuery);
}
for (const element of this.listaClassi) {
element.CostruisceGrant((_c = element.grants) !== null && _c !== void 0 ? _c : [], this.elencoQuery);
}
for (const element of this.listaClassi) {
if (element.listaPolicy) {
((_d = element.listaPolicy) !== null && _d !== void 0 ? _d : new policy_1.ListaPolicy()).CostruiscePolicySicurezza(this.elencoQuery);
}
}
this.InizializzaRuoliGrantGenerale(this.elencoQuery, this.listaRuoli);
this.InizializzaUserGrantGenerale(this.elencoQuery, this.listaUser);
return ritorno;
}
catch (error) {
console.log('');
throw error;
}
}
IstanziaORM(client) {
return __awaiter(this, void 0, void 0, function* () {
try {
yield client.connect();
//console.log('\n!!!!!!?????######\n\n\n\n' + orm + '\n\n\n\n\n\n!!!!!!?????######\n');
const vetRisultatiQuery = [];
for (let index = 0; index < this.elencoQuery.length; index++) {
const element = this.elencoQuery[index];
const tmp = yield EseguiQueryControllata(client, element);
tmp.index = index;
vetRisultatiQuery.push(tmp);
}
console.log('*******');
console.log('\n\n\n');
// console.log(orm);
console.log('\n\n\n');
console.log('*******');
let count = 0;
const tmp1 = [];
for (let index = 0; index < vetRisultatiQuery.length; index++) {
const element = vetRisultatiQuery[index];
if (element.errore) {
console.log(element.errore);
tmp1.push(element.errore);
count++;
}
}
console.log('*******');
console.log('\n\n\n');
console.log('Query finiti in errore: \n');
// console.log(orm);
console.log(count);
console.log('\n\n\n');
console.log('*******');
const tmp2 = [];
count = 0;
for (let index = 0; index < vetRisultatiQuery.length; index++) {
const element = vetRisultatiQuery[index];
if (element.risultato) {
console.log(element.risultato);
tmp2.push(element.risultato);
count++;
}
}
console.log('*******');
console.log('\n\n\n');
console.log('Query finiti in eseguite: \n');
// console.log(orm);
console.log(count);
console.log('\n\n\n');
console.log('*******');
count = 0;
}
catch (error) {
console.log(error);
}
});
}
IstanziaTutto(client) {
return __awaiter(this, void 0, void 0, function* () {
this.InizializzaORM();
yield this.IstanziaORM(client);
});
}
EseguiListaQuery(clientConnection, querys) {
return __awaiter(this, void 0, void 0, function* () {
const tmp = yield this.EseguiQueryControllata(clientConnection, querys);
return tmp;
});
}
InizializzaRuoli(/* client: Client */ elencoQuery, listaRuoli) {
let ritornoTmp = '';
if (listaRuoli) {
for (let index = 0; index < listaRuoli.length; index++) {
const element = listaRuoli[index];
const faxs = `CREATE ROLE "${element.nome}" WITH
${element.option.isSuperUser != undefined && element.option.isSuperUser == true ? 'SUPERUSER' : 'NOSUPERUSER'}
${element.option.creaDB != undefined && element.option.creaDB == true ? 'CREATEDB' : 'NOCREATEDB'}
${element.option.creaUser != undefined && element.option.creaUser == true ? 'CREATEROLE' : 'NOCREATEROLE'}
INHERIT
${element.option.login != undefined && element.option.login == true ? 'LOGIN' : 'NOLOGIN'}
NOREPLICATION
NOBYPASSRLS
ENCRYPTED PASSWORD '${element.password}'
${element.connectionLimit != undefined ? 'CONNECTION LIMIT ' + element.connectionLimit : ''}
; \n`;
const faxsDrop = `DROP ROLE IF EXISTS "${element.nome}";`;
elencoQuery.push(faxsDrop);
elencoQuery.push(faxs);
ritornoTmp = faxs;
this.listaRuoli.push(element);
}
}
return ritornoTmp;
}
InizializzaRuoliGrantGenerale(/* client: Client */ elencoQuery, listaRuoli) {
let ritornoTmp = '';
if (listaRuoli) {
for (let index = 0; index < listaRuoli.length; index++) {
const element = listaRuoli[index];
const faxSchema = `GRANT USAGE
ON ALL SEQUENCES IN SCHEMA public
TO "${element.nome}";`;
elencoQuery.push(faxSchema);
const faxFunction = `GRANT EXECUTE
ON ALL functions IN SCHEMA public
TO "${element.nome}";`;
elencoQuery.push(faxFunction);
ritornoTmp = faxSchema;
}
}
return ritornoTmp;
}
InizializzaUser(/* client: Client */ elencoQuery, listaUser) {
let ritornoTmp = '';
if (listaUser) {
for (let index = 0; index < listaUser.length; index++) {
const element = listaUser[index];
const costruisciRuoli = this.CostruisciRuoli(element.inRole);
const faxs = `CREATE USER "${element.nome}" WITH
${element.option.isSuperUser != undefined && element.option.isSuperUser == true ? 'SUPERUSER' : 'NOSUPERUSER'}
${element.option.creaDB != undefined && element.option.creaDB == true ? 'CREATEDB' : 'NOCREATEDB'}
${element.option.creaUser != undefined && element.option.creaUser == true ? 'CREATEROLE' : 'NOCREATEROLE'}
INHERIT
${element.option.login != undefined && element.option.login == true ? 'LOGIN' : 'NOLOGIN'}
NOREPLICATION
NOBYPASSRLS
PASSWORD '${element.password}'
${element.connectionLimit != undefined ? 'CONNECTION LIMIT ' + element.connectionLimit : ''}
IN ROLE ${costruisciRuoli}
; \n`;
const faxsDrop = `DROP USER IF EXISTS "${element.nome}";`;
elencoQuery.push(faxsDrop);
elencoQuery.push(faxs);
this.listaUser.push(element);
ritornoTmp = ritornoTmp + faxs;
}
}
return ritornoTmp;
}
InizializzaUserGrantGenerale(/* client: Client */ elencoQuery, listaUser) {
let ritornoTmp = '';
if (listaUser) {
for (let index = 0; index < listaUser.length; index++) {
const element = listaUser[index];
const faxSchema = `GRANT USAGE
ON ALL SEQUENCES IN SCHEMA public
TO "${element.nome}";`;
elencoQuery.push(faxSchema);
const faxFunction = `GRANT EXECUTE
ON ALL functions IN SCHEMA public
TO "${element.nome}";`;
elencoQuery.push(faxFunction);
ritornoTmp = ritornoTmp + faxSchema;
}
}
return ritornoTmp;
}
CostruisciRuoli(item) {
let ritorno = '';
for (let index = 0; index < item.length; index++) {
const element = item[index];
if (index + 1 <= item.length && index != 0)
ritorno = ritorno + ', ' + element;
else
ritorno = ritorno + ' ' + element;
}
return ritorno;
}
EseguiQueryControllata(clientConnection, querys) {
return __awaiter(this, void 0, void 0, function* () {
try {
const db = new pg_1.Client({
host: clientConnection.host,
port: clientConnection.port,
user: clientConnection.user,
password: clientConnection.password,
database: clientConnection.database
});
yield db.connect();
const vetRisultatiQuery = [];
for (let index = 0; index < querys.length; index++) {
const element = querys[index];
try {
/* const result = */ yield db.query(element);
console.log('ESEGUITOO : \n' + element);
vetRisultatiQuery.push({
index: index,
errore: undefined,
risultato: element
});
}
catch (error) {
console.log('\n\nINIZIO Errroe : \n**********************\n\n');
console.log('-Query:\n' + element + '\n\n');
console.log('-Error:\n' + error);
console.log('\n\nFINE Errroe : \n**********************\n\n');
vetRisultatiQuery.push({
index: index,
errore: {
query: element,
errore: '' + error
},
risultato: undefined
});
}
}
return vetRisultatiQuery;
}
catch (err) {
console.log(err);
throw err;
}
});
}
ScriviFile(pathDoveScrivereFile) {
var _a, _b, _c, _d, _e;
try {
try {
fs_1.default.rmSync(pathDoveScrivereFile + '/FileGenerati_MP/postgres', { recursive: true });
}
catch (error) {
console.log("...");
}
fs_1.default.mkdirSync(pathDoveScrivereFile + '/FileGenerati_MP/postgres', { recursive: true });
try {
const path = pathDoveScrivereFile + '/FileGenerati_MP' + '/postgres';
let query = [];
fs_1.default.mkdirSync(path + '/Generici', { recursive: true });
for (let index = 0; index < this.elencoQuery.length; index++) {
const element = this.elencoQuery[index];
//fs.writeFileSync(path + '/exe.dump', element.toString());
fs_1.default.appendFileSync(path + '/exe.dump', '\n' + element.toString());
}
for (const element of this.listaClassi) {
element.CostruisciCreazioneDB(query, false);
}
//fs.writeFileSync(path + '/Generici/relazioni.generale', query.toString());
fs_1.default.appendFileSync(path + '/Generici/relazioni.generale', '\n' + query.toString());
query = [];
for (const element of this.listaClassi) {
element.CostruisceGrant((_a = element.grants) !== null && _a !== void 0 ? _a : [], query);
}
//fs.writeFileSync(path + '/Generici/grant.generale', query.toString());
fs_1.default.appendFileSync(path + '/Generici/grant.generale', '\n' + query.toString());
query = [];
for (const element of this.listaClassi) {
if (element.listaPolicy) {
((_b = element.listaPolicy) !== null && _b !== void 0 ? _b : new policy_1.ListaPolicy()).CostruiscePolicySicurezza(query);
//fs.writeFileSync(path + '/Generici/policy.generale', query.toString());
fs_1.default.appendFileSync(path + '/Generici/policy.generale', '\n' + query.toString());
}
}
/* */
query = [];
fs_1.default.mkdirSync(path + '/Specifici', { recursive: true });
for (const element of this.listaClassi) {
const pathSpec = path + '/Specifici/' + element.nomeOriginale;
fs_1.default.mkdirSync(pathSpec, { recursive: true });
query = [];
element.CostruisciCreazioneDB(query, false);
//fs.writeFileSync(pathSpec + '/relazioni.' + element.nomeOriginale, query.toString());
fs_1.default.appendFileSync(pathSpec + '/relazioni.' + element.nomeOriginale, '\n' + query.toString());
query = [];
element.CostruisceGrant((_c = element.grants) !== null && _c !== void 0 ? _c : [], query);
//fs.writeFileSync(pathSpec + '/grant.' + element.nomeOriginale, query.toString());
fs_1.default.appendFileSync(pathSpec + '/grant.' + element.nomeOriginale, '\n' + query.toString());
if (element.listaPolicy) {
query = [];
((_d = element.listaPolicy) !== null && _d !== void 0 ? _d : new policy_1.ListaPolicy()).CostruiscePolicySicurezza(query);
//fs.writeFileSync(pathSpec + '/policy.' + element.nomeOriginale, query.toString());
fs_1.default.appendFileSync(pathSpec + '/policy.' + element.nomeOriginale, '\n' + query.toString());
}
}
}
catch (error) {
console.log(error);
}
return '';
}
catch (error) {
console.log(error);
return (_e = error.message) !== null && _e !== void 0 ? _e : '';
}
}
}
exports.MainPostgres = MainPostgres;
//# sourceMappingURL=main.postgres.js.map