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.
155 lines (141 loc) • 6.69 kB
text/typescript
import { IReturn, ConstruisciErrore } from "../utility/utility";
import { Request } from "express";
import fs from 'fs';
import { SanificatoreCampo } from "../utility/SanificatoreCampo";
import { RispostaControllo } from "../utility/RispostaControllo";
import { Risposta } from "../utility/Risposta";
import { IClasseRiferimento, IHtml } from "./utility";
export interface IMetodoVettori {
ListaSanificatori?: SanificatoreCampo[];
RisposteDiControllo?: RispostaControllo[];
nomiClasseRiferimento?: IClasseRiferimento[];
listaHtml?: IHtml[];
}
export class MetodoVettori implements IMetodoVettori {
ListaSanificatori?: SanificatoreCampo[];
RisposteDiControllo?: RispostaControllo[];
nomiClasseRiferimento?: IClasseRiferimento[];
listaHtml: IHtml[] = [];
Init(init: IMetodoVettori) {
if (init.nomiClasseRiferimento != undefined)
this.nomiClasseRiferimento = init.nomiClasseRiferimento;
if (init.ListaSanificatori)
this.ListaSanificatori = init.ListaSanificatori;
if (init.RisposteDiControllo)
this.RisposteDiControllo = init.RisposteDiControllo;
if (init.listaHtml) {
for (let index = 0; index < init.listaHtml.length; index++) {
const element = init.listaHtml[index];
if (element.percorsoIndipendente == undefined)
element.percorsoIndipendente = false;
if (element.html != undefined && element.htmlPath == undefined
&& this.listaHtml.find(x => {
if (x.path == element.path)
return true; else
return false;
}) == undefined) {
this.listaHtml.push({
contenuto: element.html,
path: element.path,
percorsoIndipendente: element.percorsoIndipendente
});
// this.listaHtml?.contenuto = element.html;
} else if (element.html == undefined && element.htmlPath != undefined
&& this.listaHtml.find(x => {
if (x.path == element.path)
return true; else
return false;
}) == undefined) {
this.listaHtml.push({
contenuto: fs.readFileSync(element.htmlPath).toString(),
path: element.path,
percorsoIndipendente: element.percorsoIndipendente
});
// this.listaHtml?.contenuto = fs.readFileSync(element.htmlPath).toString();
}
}
}
}
CercaRispostaConTrigger(richiesta: Request): Risposta | undefined {
let tmp = undefined;
if (this.RisposteDiControllo) {
for (let index = 0; index < this.RisposteDiControllo.length; index++) {
const element = this.RisposteDiControllo[index].risposta;
if (element && element.trigger) {
if (element.trigger.posizione == 'body')
tmp = richiesta.body[element.trigger.nome];
if (element.trigger.posizione == 'header')
tmp = richiesta.headers[element.trigger.nome];
if (element.trigger.posizione == 'query')
tmp = richiesta.query[element.trigger.nome];
if (tmp == element.trigger.valore)
return element;
}
}
}
return undefined;
}
VerificaPresenzaRispostaControllata(item: IReturn | undefined): boolean {
if (this.RisposteDiControllo != undefined) {
for (let index = 0; index < this.RisposteDiControllo.length; index++) {
const element = this.RisposteDiControllo[index];
if (element.trigger == item?.stato) {
return true;
}
}
}
return false;
}
async EseguiRispostaControllata(item: IReturn | undefined): Promise<IReturn> {
if (this.RisposteDiControllo != undefined) {
for (let index = 0; index < this.RisposteDiControllo.length; index++) {
const element = this.RisposteDiControllo[index];
if ((element).trigger == item?.stato) {
if (element.onModificaRisposta && element) {
const tmp = await element.onModificaRisposta(item);
if (tmp)
return tmp;
else {
return ConstruisciErrore('Attenzione errore!');
}
}
else {
return item;
}
}
}
}
if (item)
return item;
else {
return ConstruisciErrore('Attenzione errore!');
}
}
VerificaTrigger(richiesta: Request): boolean {
let tmp = undefined;
if (this.RisposteDiControllo) {
for (let index = 0; index < this.RisposteDiControllo.length; index++) {
const element = this.RisposteDiControllo[index].risposta;
if (element && element.trigger) {
if (element.trigger.posizione == 'body')
tmp = richiesta.body[element.trigger.nome];
if (element.trigger.posizione == 'header')
tmp = richiesta.headers[element.trigger.nome];
if (element.trigger.posizione == 'query')
tmp = richiesta.query[element.trigger.nome];
if (tmp == element.trigger.valore)
return true;
}
}
}
return false;
}
PrintStruttura() {
let ritorno = '';
if (this.ListaSanificatori) ritorno = ritorno + '\nListaSanificatori :' + JSON.stringify(this.ListaSanificatori);
if (this.RisposteDiControllo) ritorno = ritorno + '\nRisposteDiControllo :' + JSON.stringify(this.RisposteDiControllo);
if (this.nomiClasseRiferimento) ritorno = ritorno + '\nnomiClasseRiferimento :' + JSON.stringify(this.nomiClasseRiferimento);
if (this.listaHtml) ritorno = ritorno + '\nlistaHtml :' + JSON.stringify(this.listaHtml);
return ritorno;
}
}