emilsoftware-utilities 2.0.0-dev.7 → 2.0.0-dev.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -14,4 +14,5 @@ export declare class AccessiDatabaseUpdater extends DatabaseUpdater implements O
14
14
  private static ensureColumn;
15
15
  private static upsertFiltroTipo;
16
16
  private static upsertMenu;
17
+ private static upsertMenuGroup;
17
18
  }
@@ -156,6 +156,34 @@ let AccessiDatabaseUpdater = AccessiDatabaseUpdater_1 = class AccessiDatabaseUpd
156
156
  ]);
157
157
  });
158
158
  }
159
+ static upsertMenuGroup(options, menuGroup) {
160
+ return __awaiter(this, void 0, void 0, function* () {
161
+ const existing = yield Orm_1.Orm.query(options.databaseOptions, "SELECT CODGRP FROM MENU_GRP WHERE CODGRP = ?", [menuGroup.CODGRP]);
162
+ if (existing.length === 0) {
163
+ yield Orm_1.Orm.execute(options.databaseOptions, `INSERT INTO MENU_GRP (CODGRP, DESGRP, FLGENABLED, ORDINE, NOMECAMPO)
164
+ VALUES (?, ?, ?, ?, ?)`, [
165
+ menuGroup.CODGRP,
166
+ menuGroup.DESGRP,
167
+ menuGroup.FLGENABLED,
168
+ menuGroup.ORDINE,
169
+ menuGroup.NOMECAMPO,
170
+ ]);
171
+ return;
172
+ }
173
+ yield Orm_1.Orm.execute(options.databaseOptions, `UPDATE MENU_GRP
174
+ SET DESGRP = ?,
175
+ FLGENABLED = COALESCE(FLGENABLED, ?),
176
+ ORDINE = ?,
177
+ NOMECAMPO = ?
178
+ WHERE CODGRP = ?`, [
179
+ menuGroup.DESGRP,
180
+ menuGroup.FLGENABLED,
181
+ menuGroup.ORDINE,
182
+ menuGroup.NOMECAMPO,
183
+ menuGroup.CODGRP,
184
+ ]);
185
+ });
186
+ }
159
187
  };
160
188
  exports.AccessiDatabaseUpdater = AccessiDatabaseUpdater;
161
189
  AccessiDatabaseUpdater.logger = new Logger_1.Logger(AccessiDatabaseUpdater_1.name);
@@ -167,6 +195,13 @@ AccessiDatabaseUpdater.updates = [
167
195
  apply: (options) => __awaiter(void 0, void 0, void 0, function* () {
168
196
  yield AccessiDatabaseUpdater_1.upsertFiltroTipo(options, 20, "POSTAZIONE", "IDXPOS", undefined);
169
197
  yield AccessiDatabaseUpdater_1.ensureColumn(options, "FILTRI", "IDXPOS SMALLINT", "IDXPOS", "idx della postazione nella tabella ANTENNE_POS di PROLAV");
198
+ yield AccessiDatabaseUpdater_1.upsertMenuGroup(options, {
199
+ CODGRP: "F",
200
+ DESGRP: "Verifica RFID",
201
+ FLGENABLED: 1,
202
+ ORDINE: 10,
203
+ NOMECAMPO: "FLGPIANARFID",
204
+ });
170
205
  yield AccessiDatabaseUpdater_1.upsertMenu(options, {
171
206
  CODMNU: "MNUVERRFID",
172
207
  DESMNU: "Verifica RFID",
@@ -1 +1 @@
1
- {"version":3,"file":"AccessiDatabaseUpdater.js","sourceRoot":"","sources":["../../../src/accessi-module/database-updates/AccessiDatabaseUpdater.ts"],"names":[],"mappings":"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","sourcesContent":["import { Injectable, Inject, OnModuleInit } from \"@nestjs/common\";\r\nimport { DatabaseUpdater } from \"../../DatabaseUpdater\";\r\nimport { AccessiOptions } from \"../AccessiModule\";\r\nimport { Orm } from \"../../Orm\";\r\nimport { Logger } from \"../../Logger\";\r\n\r\ntype AccessiUpdateStep = {\r\n fromVersion: string;\r\n toVersion: string;\r\n description: string;\r\n apply: (options: AccessiOptions) => Promise<void>;\r\n};\r\n\r\n@Injectable()\r\nexport class AccessiDatabaseUpdater extends DatabaseUpdater implements OnModuleInit {\n protected static override logger: Logger = new Logger(AccessiDatabaseUpdater.name);\n\r\n private static readonly updates: AccessiUpdateStep[] = [\r\n {\r\n fromVersion: \"1.0.0\",\r\n toVersion: \"1.1.0\",\r\n description: \"Aggiunge filtro postazione, colonna IDXPOS e menu verifica RFID\",\r\n apply: async (options) => {\r\n await AccessiDatabaseUpdater.upsertFiltroTipo(options, 20, \"POSTAZIONE\", \"IDXPOS\", undefined);\r\n await AccessiDatabaseUpdater.ensureColumn(\r\n options,\r\n \"FILTRI\",\r\n \"IDXPOS SMALLINT\",\r\n \"IDXPOS\",\r\n \"idx della postazione nella tabella ANTENNE_POS di PROLAV\"\r\n );\r\n await AccessiDatabaseUpdater.upsertMenu(options, {\r\n CODMNU: \"MNUVERRFID\",\r\n DESMNU: \"Verifica RFID\",\r\n CODGRP: \"F\",\r\n FLGENABLED: 1,\r\n ICON: \"hardware-chip-outline\",\r\n ORDINE: 10,\r\n CODTIP: \"M\",\r\n PAGINA: \"/verifica-rfid\",\r\n RIFMENU: null,\r\n });\r\n },\r\n },\r\n {\r\n fromVersion: \"1.1.0\",\r\n toVersion: \"1.1.1\",\r\n description: \"Aggiunge FLGENABLED su FILTRI_TIPO\",\r\n apply: async (options) => {\r\n const columnCreated = await AccessiDatabaseUpdater.ensureColumn(\r\n options,\r\n \"FILTRI_TIPO\",\r\n \"FLGENABLED SMALLINT DEFAULT 1 NOT NULL\",\r\n \"FLGENABLED\"\r\n );\r\n\r\n if (!columnCreated) {\r\n await Orm.execute(\r\n options.databaseOptions,\r\n \"UPDATE FILTRI_TIPO SET FLGENABLED = 1 WHERE FLGENABLED IS NULL\"\r\n );\r\n }\r\n },\r\n },\r\n {\r\n fromVersion: \"1.1.1\",\r\n toVersion: \"1.1.2\",\r\n description: \"Aggiunge filtro vettore e colonna CODVET\",\r\n apply: async (options) => {\r\n await AccessiDatabaseUpdater.upsertFiltroTipo(options, 30, \"VETTORE\", \"CODVET\", 1);\r\n await AccessiDatabaseUpdater.ensureColumn(\r\n options,\r\n \"FILTRI\",\r\n \"CODVET INTEGER\",\r\n \"CODVET\",\r\n \"CODICE DEL VETTORE DA INSERIRE SE COME FILTRO HA 30\"\r\n );\r\n },\r\n },\r\n {\r\n fromVersion: \"1.1.2\",\r\n toVersion: \"1.1.3\",\r\n description: \"Aggiunge FLGADMINCONFIG e inizializza PARAMETRI\",\r\n apply: async (options) => {\r\n await AccessiDatabaseUpdater.ensureColumn(\r\n options,\r\n \"UTENTI_CONFIG\",\r\n \"FLGADMINCONFIG SMALLINT DEFAULT 0\",\r\n \"FLGADMINCONFIG\",\r\n \"flag utente configuratore dei menu amministratore\"\r\n );\r\n await AccessiDatabaseUpdater.createParametersTable(options.databaseOptions);\r\n },\r\n },\r\n {\r\n fromVersion: \"1.1.3\",\r\n toVersion: \"1.1.4\",\r\n description: \"Aggiunge sequence e trigger per RUOLI\",\r\n apply: async (options) => {\r\n if (!(await AccessiDatabaseUpdater.generatorExists(options.databaseOptions, \"GEN_RUOLI_ID\"))) {\r\n await Orm.execute(options.databaseOptions, \"CREATE SEQUENCE GEN_RUOLI_ID\");\r\n }\r\n\r\n if (!(await AccessiDatabaseUpdater.triggerExists(options.databaseOptions, \"RUOLI_BI\"))) {\r\n await Orm.execute(\r\n options.databaseOptions,\r\n `CREATE TRIGGER RUOLI_BI FOR RUOLI\r\nACTIVE BEFORE INSERT POSITION 0\r\nAS\r\nBEGIN\r\n IF (NEW.CODRUO IS NULL) THEN\r\n NEW.CODRUO = GEN_ID(GEN_RUOLI_ID,1);\r\nEND`\r\n );\r\n }\r\n },\r\n },\r\n {\r\n fromVersion: \"1.1.4\",\r\n toVersion: \"1.1.5\",\r\n description: \"Aggiunge NOTE su MENU\",\r\n apply: async (options) => {\r\n await AccessiDatabaseUpdater.ensureColumn(\r\n options,\r\n \"MENU\",\r\n \"NOTE VARCHAR(1000)\",\r\n \"NOTE\"\r\n );\r\n },\r\n },\r\n {\r\n fromVersion: \"1.1.5\",\r\n toVersion: \"1.1.6\",\r\n description: \"Aggiunge NUMMAC su UTENTI_CONFIG\",\r\n apply: async (options) => {\r\n await AccessiDatabaseUpdater.ensureColumn(\r\n options,\r\n \"UTENTI_CONFIG\",\r\n \"NUMMAC INTEGER\",\r\n \"NUMMAC\",\r\n 'Numero macchina DESPOST PROLAV'\r\n );\r\n },\r\n },\r\n ];\r\n\r\n constructor(\r\n @Inject(\"ACCESSI_OPTIONS\") private readonly accessiOptions: AccessiOptions\r\n ) {\r\n super();\r\n }\r\n\r\n async onModuleInit(): Promise<void> {\n if (this.accessiOptions.autoUpdateDatabase === false) {\n AccessiDatabaseUpdater.logger.info(\"Aggiornamento automatico database accessi disabilitato da configurazione.\");\n return;\n }\n\n AccessiDatabaseUpdater.logger.info(\"Avvio updater database accessi.\");\n await AccessiDatabaseUpdater.run(this.accessiOptions);\n AccessiDatabaseUpdater.logger.info(\"Updater database accessi completato.\");\n }\n\n static async run(options: AccessiOptions): Promise<void> {\n const startedAt = performance.now();\n this.logger.info(\n `Verifica schema accessi su ${options.databaseOptions.host ?? \"?\"}:${options.databaseOptions.port ?? \"?\"} -> ${options.databaseOptions.database ?? \"?\"}`\n );\n await this.createParametersTable(options.databaseOptions);\n this.logger.info(\"Tabella PARAMETRI verificata.\");\n\n const currentVersion = await this.getDatabaseVersion(options.databaseOptions);\n const currentIndex = this.updates.findIndex(\r\n (update) => update.toVersion === currentVersion\r\n );\r\n const startIndex = currentIndex >= 0 ? currentIndex + 1 : 0;\r\n\r\n if (currentVersion && currentIndex === this.updates.length - 1) {\r\n this.logger.info(`Database accessi gia' all'ultima versione disponibile (${currentVersion}).`);\r\n } else if (currentVersion && currentIndex >= 0) {\r\n this.logger.info(`Database accessi rilevato alla versione ${currentVersion}.`);\r\n } else if (currentVersion) {\r\n this.logger.warning(\r\n `Versione database accessi non riconosciuta (${currentVersion}). Verifico tutti gli update idempotenti.`\r\n );\r\n } else {\r\n this.logger.warning(\r\n \"Versione database accessi assente. Verifico tutti gli update idempotenti.\"\r\n );\r\n }\r\n\r\n for (let index = startIndex; index < this.updates.length; index++) {\n const update = this.updates[index];\n const stepStartedAt = performance.now();\n this.logger.info(\n `Applico aggiornamento accessi ${update.fromVersion} -> ${update.toVersion}: ${update.description}`\n );\n await update.apply(options);\n await this.setDatabaseVersion(options.databaseOptions, update.toVersion);\n this.logger.info(\n `Aggiornamento accessi ${update.toVersion} completato in ${(performance.now() - stepStartedAt).toFixed(2)} ms`\n );\n }\n\n this.logger.info(\n `Verifica/aggiornamento database accessi completato in ${(performance.now() - startedAt).toFixed(2)} ms`\n );\n }\n\r\n static async getCurrentVersion(options: AccessiOptions): Promise<string | null> {\r\n return await this.getDatabaseVersion(options.databaseOptions);\r\n }\r\n\r\n static getLatestVersion(): string {\r\n return this.updates[this.updates.length - 1]?.toVersion ?? \"0.0.0\";\r\n }\r\n\r\n private static async ensureColumn(\r\n options: AccessiOptions,\r\n tableName: string,\r\n columnDefinition: string,\r\n columnName: string,\r\n comment?: string\r\n ): Promise<boolean> {\r\n const exists = await this.columnExists(\r\n options.databaseOptions,\r\n tableName,\r\n columnName\r\n );\r\n\r\n if (!exists) {\r\n await Orm.execute(\r\n options.databaseOptions,\r\n `ALTER TABLE ${tableName} ADD ${columnDefinition}`\r\n );\r\n }\r\n\r\n if (comment) {\r\n await Orm.execute(\r\n options.databaseOptions,\r\n `COMMENT ON COLUMN ${tableName}.${columnName} IS '${comment.replace(/'/g, \"''\")}'`\r\n );\r\n }\r\n\r\n return !exists;\r\n }\r\n\r\n private static async upsertFiltroTipo(\r\n options: AccessiOptions,\r\n tipfil: number,\r\n desfil: string,\r\n fldfil: string,\r\n flgEnabled?: number\r\n ): Promise<void> {\r\n const hasEnabledColumn = await this.columnExists(\r\n options.databaseOptions,\r\n \"FILTRI_TIPO\",\r\n \"FLGENABLED\"\r\n );\r\n\r\n const existing = await Orm.query(\r\n options.databaseOptions,\r\n \"SELECT TIPFIL FROM FILTRI_TIPO WHERE TIPFIL = ?\",\r\n [tipfil]\r\n );\r\n\r\n if (existing.length === 0) {\r\n if (hasEnabledColumn && flgEnabled !== undefined) {\r\n await Orm.execute(\r\n options.databaseOptions,\r\n \"INSERT INTO FILTRI_TIPO (TIPFIL, DESFIL, FLDFIL, FLGENABLED) VALUES (?, ?, ?, ?)\",\r\n [tipfil, desfil, fldfil, flgEnabled]\r\n );\r\n return;\r\n }\r\n\r\n await Orm.execute(\r\n options.databaseOptions,\r\n \"INSERT INTO FILTRI_TIPO (TIPFIL, DESFIL, FLDFIL) VALUES (?, ?, ?)\",\r\n [tipfil, desfil, fldfil]\r\n );\r\n return;\r\n }\r\n\r\n if (hasEnabledColumn && flgEnabled !== undefined) {\r\n await Orm.execute(\r\n options.databaseOptions,\r\n \"UPDATE FILTRI_TIPO SET DESFIL = ?, FLDFIL = ?, FLGENABLED = COALESCE(FLGENABLED, ?) WHERE TIPFIL = ?\",\r\n [desfil, fldfil, flgEnabled, tipfil]\r\n );\r\n return;\r\n }\r\n\r\n await Orm.execute(\r\n options.databaseOptions,\r\n \"UPDATE FILTRI_TIPO SET DESFIL = ?, FLDFIL = ? WHERE TIPFIL = ?\",\r\n [desfil, fldfil, tipfil]\r\n );\r\n }\r\n\r\n private static async upsertMenu(\r\n options: AccessiOptions,\r\n menu: {\r\n CODMNU: string;\r\n DESMNU: string;\r\n CODGRP: string;\r\n FLGENABLED: number;\r\n ICON: string;\r\n ORDINE: number;\r\n CODTIP: string;\r\n PAGINA: string;\r\n RIFMENU: string | null;\r\n }\r\n ): Promise<void> {\r\n const existing = await Orm.query(\r\n options.databaseOptions,\r\n \"SELECT CODMNU FROM MENU WHERE CODMNU = ?\",\r\n [menu.CODMNU]\r\n );\r\n\r\n if (existing.length === 0) {\r\n await Orm.execute(\r\n options.databaseOptions,\r\n `INSERT INTO MENU (CODMNU, DESMNU, CODGRP, FLGENABLED, ICON, ORDINE, CODTIP, PAGINA, RIFMENU)\r\n VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)`,\r\n [\r\n menu.CODMNU,\r\n menu.DESMNU,\r\n menu.CODGRP,\r\n menu.FLGENABLED,\r\n menu.ICON,\r\n menu.ORDINE,\r\n menu.CODTIP,\r\n menu.PAGINA,\r\n menu.RIFMENU,\r\n ]\r\n );\r\n return;\r\n }\r\n\r\n await Orm.execute(\r\n options.databaseOptions,\r\n `UPDATE MENU\r\n SET DESMNU = ?,\r\n CODGRP = ?,\r\n FLGENABLED = COALESCE(FLGENABLED, ?),\r\n ICON = ?,\r\n ORDINE = ?,\r\n CODTIP = ?,\r\n PAGINA = ?,\r\n RIFMENU = ?\r\n WHERE CODMNU = ?`,\r\n [\r\n menu.DESMNU,\r\n menu.CODGRP,\r\n menu.FLGENABLED,\r\n menu.ICON,\r\n menu.ORDINE,\r\n menu.CODTIP,\r\n menu.PAGINA,\r\n menu.RIFMENU,\r\n menu.CODMNU,\r\n ]\r\n );\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"AccessiDatabaseUpdater.js","sourceRoot":"","sources":["../../../src/accessi-module/database-updates/AccessiDatabaseUpdater.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAAA,2CAAkE;AAClE,2DAAwD;AAExD,mCAAgC;AAChC,yCAAsC;AAU/B,IAAM,sBAAsB,8BAA5B,MAAM,sBAAuB,SAAQ,iCAAe;IA2IzD,YAC8C,cAA8B;QAE1E,KAAK,EAAE,CAAC;QAFoC,mBAAc,GAAd,cAAc,CAAgB;IAG5E,CAAC;IAEK,YAAY;;YAChB,IAAI,IAAI,CAAC,cAAc,CAAC,kBAAkB,KAAK,KAAK,EAAE,CAAC;gBACrD,wBAAsB,CAAC,MAAM,CAAC,IAAI,CAAC,2EAA2E,CAAC,CAAC;gBAChH,OAAO;YACT,CAAC;YAED,wBAAsB,CAAC,MAAM,CAAC,IAAI,CAAC,iCAAiC,CAAC,CAAC;YACtE,MAAM,wBAAsB,CAAC,GAAG,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;YACtD,wBAAsB,CAAC,MAAM,CAAC,IAAI,CAAC,sCAAsC,CAAC,CAAC;QAC7E,CAAC;KAAA;IAED,MAAM,CAAO,GAAG,CAAC,OAAuB;;;YACtC,MAAM,SAAS,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC;YACpC,IAAI,CAAC,MAAM,CAAC,IAAI,CACd,8BAA8B,MAAA,OAAO,CAAC,eAAe,CAAC,IAAI,mCAAI,GAAG,IAAI,MAAA,OAAO,CAAC,eAAe,CAAC,IAAI,mCAAI,GAAG,OAAO,MAAA,OAAO,CAAC,eAAe,CAAC,QAAQ,mCAAI,GAAG,EAAE,CACzJ,CAAC;YACF,MAAM,IAAI,CAAC,qBAAqB,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC;YAC1D,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,+BAA+B,CAAC,CAAC;YAElD,MAAM,cAAc,GAAG,MAAM,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC;YAC9E,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,CACzC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,SAAS,KAAK,cAAc,CAChD,CAAC;YACF,MAAM,UAAU,GAAG,YAAY,IAAI,CAAC,CAAC,CAAC,CAAC,YAAY,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAE5D,IAAI,cAAc,IAAI,YAAY,KAAK,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC/D,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,0DAA0D,cAAc,IAAI,CAAC,CAAC;YACjG,CAAC;iBAAM,IAAI,cAAc,IAAI,YAAY,IAAI,CAAC,EAAE,CAAC;gBAC/C,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,2CAA2C,cAAc,GAAG,CAAC,CAAC;YACjF,CAAC;iBAAM,IAAI,cAAc,EAAE,CAAC;gBAC1B,IAAI,CAAC,MAAM,CAAC,OAAO,CACjB,+CAA+C,cAAc,2CAA2C,CACzG,CAAC;YACJ,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,MAAM,CAAC,OAAO,CACjB,2EAA2E,CAC5E,CAAC;YACJ,CAAC;YAED,KAAK,IAAI,KAAK,GAAG,UAAU,EAAE,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC;gBAClE,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;gBACnC,MAAM,aAAa,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC;gBACxC,IAAI,CAAC,MAAM,CAAC,IAAI,CACd,iCAAiC,MAAM,CAAC,WAAW,OAAO,MAAM,CAAC,SAAS,KAAK,MAAM,CAAC,WAAW,EAAE,CACpG,CAAC;gBACF,MAAM,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;gBAC5B,MAAM,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,eAAe,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC;gBACzE,IAAI,CAAC,MAAM,CAAC,IAAI,CACd,yBAAyB,MAAM,CAAC,SAAS,kBAAkB,CAAC,WAAW,CAAC,GAAG,EAAE,GAAG,aAAa,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAC/G,CAAC;YACJ,CAAC;YAED,IAAI,CAAC,MAAM,CAAC,IAAI,CACd,yDAAyD,CAAC,WAAW,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CACzG,CAAC;QACJ,CAAC;KAAA;IAED,MAAM,CAAO,iBAAiB,CAAC,OAAuB;;YACpD,OAAO,MAAM,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC;QAChE,CAAC;KAAA;IAED,MAAM,CAAC,gBAAgB;;QACrB,OAAO,MAAA,MAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,0CAAE,SAAS,mCAAI,OAAO,CAAC;IACrE,CAAC;IAEO,MAAM,CAAO,YAAY,CAC/B,OAAuB,EACvB,SAAiB,EACjB,gBAAwB,EACxB,UAAkB,EAClB,OAAgB;;YAEhB,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,YAAY,CACpC,OAAO,CAAC,eAAe,EACvB,SAAS,EACT,UAAU,CACX,CAAC;YAEF,IAAI,CAAC,MAAM,EAAE,CAAC;gBACZ,MAAM,SAAG,CAAC,OAAO,CACf,OAAO,CAAC,eAAe,EACvB,eAAe,SAAS,QAAQ,gBAAgB,EAAE,CACnD,CAAC;YACJ,CAAC;YAED,IAAI,OAAO,EAAE,CAAC;gBACZ,MAAM,SAAG,CAAC,OAAO,CACf,OAAO,CAAC,eAAe,EACvB,qBAAqB,SAAS,IAAI,UAAU,QAAQ,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,CACnF,CAAC;YACJ,CAAC;YAED,OAAO,CAAC,MAAM,CAAC;QACjB,CAAC;KAAA;IAEO,MAAM,CAAO,gBAAgB,CACnC,OAAuB,EACvB,MAAc,EACd,MAAc,EACd,MAAc,EACd,UAAmB;;YAEnB,MAAM,gBAAgB,GAAG,MAAM,IAAI,CAAC,YAAY,CAC9C,OAAO,CAAC,eAAe,EACvB,aAAa,EACb,YAAY,CACb,CAAC;YAEF,MAAM,QAAQ,GAAG,MAAM,SAAG,CAAC,KAAK,CAC9B,OAAO,CAAC,eAAe,EACvB,iDAAiD,EACjD,CAAC,MAAM,CAAC,CACT,CAAC;YAEF,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAC1B,IAAI,gBAAgB,IAAI,UAAU,KAAK,SAAS,EAAE,CAAC;oBACjD,MAAM,SAAG,CAAC,OAAO,CACf,OAAO,CAAC,eAAe,EACvB,kFAAkF,EAClF,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,CAAC,CACrC,CAAC;oBACF,OAAO;gBACT,CAAC;gBAED,MAAM,SAAG,CAAC,OAAO,CACf,OAAO,CAAC,eAAe,EACvB,mEAAmE,EACnE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CACzB,CAAC;gBACF,OAAO;YACT,CAAC;YAED,IAAI,gBAAgB,IAAI,UAAU,KAAK,SAAS,EAAE,CAAC;gBACjD,MAAM,SAAG,CAAC,OAAO,CACf,OAAO,CAAC,eAAe,EACvB,sGAAsG,EACtG,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,CAAC,CACrC,CAAC;gBACF,OAAO;YACT,CAAC;YAED,MAAM,SAAG,CAAC,OAAO,CACf,OAAO,CAAC,eAAe,EACvB,gEAAgE,EAChE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CACzB,CAAC;QACJ,CAAC;KAAA;IAEO,MAAM,CAAO,UAAU,CAC7B,OAAuB,EACvB,IAUC;;YAED,MAAM,QAAQ,GAAG,MAAM,SAAG,CAAC,KAAK,CAC9B,OAAO,CAAC,eAAe,EACvB,0CAA0C,EAC1C,CAAC,IAAI,CAAC,MAAM,CAAC,CACd,CAAC;YAEF,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAC1B,MAAM,SAAG,CAAC,OAAO,CACf,OAAO,CAAC,eAAe,EACvB;4CACoC,EACpC;oBACE,IAAI,CAAC,MAAM;oBACX,IAAI,CAAC,MAAM;oBACX,IAAI,CAAC,MAAM;oBACX,IAAI,CAAC,UAAU;oBACf,IAAI,CAAC,IAAI;oBACT,IAAI,CAAC,MAAM;oBACX,IAAI,CAAC,MAAM;oBACX,IAAI,CAAC,MAAM;oBACX,IAAI,CAAC,OAAO;iBACb,CACF,CAAC;gBACF,OAAO;YACT,CAAC;YAED,MAAM,SAAG,CAAC,OAAO,CACf,OAAO,CAAC,eAAe,EACvB;;;;;;;;;wBASkB,EAClB;gBACE,IAAI,CAAC,MAAM;gBACX,IAAI,CAAC,MAAM;gBACX,IAAI,CAAC,UAAU;gBACf,IAAI,CAAC,IAAI;gBACT,IAAI,CAAC,MAAM;gBACX,IAAI,CAAC,MAAM;gBACX,IAAI,CAAC,MAAM;gBACX,IAAI,CAAC,OAAO;gBACZ,IAAI,CAAC,MAAM;aACZ,CACF,CAAC;QACJ,CAAC;KAAA;IAEO,MAAM,CAAO,eAAe,CAClC,OAAuB,EACvB,SAMC;;YAED,MAAM,QAAQ,GAAG,MAAM,SAAG,CAAC,KAAK,CAC9B,OAAO,CAAC,eAAe,EACvB,8CAA8C,EAC9C,CAAC,SAAS,CAAC,MAAM,CAAC,CACnB,CAAC;YAEF,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAC1B,MAAM,SAAG,CAAC,OAAO,CACf,OAAO,CAAC,eAAe,EACvB;gCACwB,EACxB;oBACE,SAAS,CAAC,MAAM;oBAChB,SAAS,CAAC,MAAM;oBAChB,SAAS,CAAC,UAAU;oBACpB,SAAS,CAAC,MAAM;oBAChB,SAAS,CAAC,SAAS;iBACpB,CACF,CAAC;gBACF,OAAO;YACT,CAAC;YAED,MAAM,SAAG,CAAC,OAAO,CACf,OAAO,CAAC,eAAe,EACvB;;;;;wBAKkB,EAClB;gBACE,SAAS,CAAC,MAAM;gBAChB,SAAS,CAAC,UAAU;gBACpB,SAAS,CAAC,MAAM;gBAChB,SAAS,CAAC,SAAS;gBACnB,SAAS,CAAC,MAAM;aACjB,CACF,CAAC;QACJ,CAAC;KAAA;;AAvZU,wDAAsB;AACP,6BAAM,GAAW,IAAI,eAAM,CAAC,wBAAsB,CAAC,IAAI,CAAC,AAAlD,CAAmD;AAE3D,8BAAO,GAAwB;IACrD;QACE,WAAW,EAAE,OAAO;QACpB,SAAS,EAAE,OAAO;QAClB,WAAW,EAAE,iEAAiE;QAC9E,KAAK,EAAE,CAAO,OAAO,EAAE,EAAE;YACvB,MAAM,wBAAsB,CAAC,gBAAgB,CAAC,OAAO,EAAE,EAAE,EAAE,YAAY,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC;YAC9F,MAAM,wBAAsB,CAAC,YAAY,CACvC,OAAO,EACP,QAAQ,EACR,iBAAiB,EACjB,QAAQ,EACR,0DAA0D,CAC3D,CAAC;YACF,MAAM,wBAAsB,CAAC,eAAe,CAAC,OAAO,EAAE;gBACpD,MAAM,EAAE,GAAG;gBACX,MAAM,EAAE,eAAe;gBACvB,UAAU,EAAE,CAAC;gBACb,MAAM,EAAE,EAAE;gBACV,SAAS,EAAE,cAAc;aAC1B,CAAC,CAAC;YACH,MAAM,wBAAsB,CAAC,UAAU,CAAC,OAAO,EAAE;gBAC/C,MAAM,EAAE,YAAY;gBACpB,MAAM,EAAE,eAAe;gBACvB,MAAM,EAAE,GAAG;gBACX,UAAU,EAAE,CAAC;gBACb,IAAI,EAAE,uBAAuB;gBAC7B,MAAM,EAAE,EAAE;gBACV,MAAM,EAAE,GAAG;gBACX,MAAM,EAAE,gBAAgB;gBACxB,OAAO,EAAE,IAAI;aACd,CAAC,CAAC;QACL,CAAC,CAAA;KACF;IACD;QACE,WAAW,EAAE,OAAO;QACpB,SAAS,EAAE,OAAO;QAClB,WAAW,EAAE,oCAAoC;QACjD,KAAK,EAAE,CAAO,OAAO,EAAE,EAAE;YACvB,MAAM,aAAa,GAAG,MAAM,wBAAsB,CAAC,YAAY,CAC7D,OAAO,EACP,aAAa,EACb,wCAAwC,EACxC,YAAY,CACb,CAAC;YAEF,IAAI,CAAC,aAAa,EAAE,CAAC;gBACnB,MAAM,SAAG,CAAC,OAAO,CACf,OAAO,CAAC,eAAe,EACvB,gEAAgE,CACjE,CAAC;YACJ,CAAC;QACH,CAAC,CAAA;KACF;IACD;QACE,WAAW,EAAE,OAAO;QACpB,SAAS,EAAE,OAAO;QAClB,WAAW,EAAE,0CAA0C;QACvD,KAAK,EAAE,CAAO,OAAO,EAAE,EAAE;YACvB,MAAM,wBAAsB,CAAC,gBAAgB,CAAC,OAAO,EAAE,EAAE,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC;YACnF,MAAM,wBAAsB,CAAC,YAAY,CACvC,OAAO,EACP,QAAQ,EACR,gBAAgB,EAChB,QAAQ,EACR,qDAAqD,CACtD,CAAC;QACJ,CAAC,CAAA;KACF;IACD;QACE,WAAW,EAAE,OAAO;QACpB,SAAS,EAAE,OAAO;QAClB,WAAW,EAAE,iDAAiD;QAC9D,KAAK,EAAE,CAAO,OAAO,EAAE,EAAE;YACvB,MAAM,wBAAsB,CAAC,YAAY,CACvC,OAAO,EACP,eAAe,EACf,mCAAmC,EACnC,gBAAgB,EAChB,mDAAmD,CACpD,CAAC;YACF,MAAM,wBAAsB,CAAC,qBAAqB,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC;QAC9E,CAAC,CAAA;KACF;IACD;QACE,WAAW,EAAE,OAAO;QACpB,SAAS,EAAE,OAAO;QAClB,WAAW,EAAE,uCAAuC;QACpD,KAAK,EAAE,CAAO,OAAO,EAAE,EAAE;YACvB,IAAI,CAAC,CAAC,MAAM,wBAAsB,CAAC,eAAe,CAAC,OAAO,CAAC,eAAe,EAAE,cAAc,CAAC,CAAC,EAAE,CAAC;gBAC7F,MAAM,SAAG,CAAC,OAAO,CAAC,OAAO,CAAC,eAAe,EAAE,8BAA8B,CAAC,CAAC;YAC7E,CAAC;YAED,IAAI,CAAC,CAAC,MAAM,wBAAsB,CAAC,aAAa,CAAC,OAAO,CAAC,eAAe,EAAE,UAAU,CAAC,CAAC,EAAE,CAAC;gBACvF,MAAM,SAAG,CAAC,OAAO,CACf,OAAO,CAAC,eAAe,EACvB;;;;;;IAMR,CACO,CAAC;YACJ,CAAC;QACH,CAAC,CAAA;KACF;IACD;QACE,WAAW,EAAE,OAAO;QACpB,SAAS,EAAE,OAAO;QAClB,WAAW,EAAE,uBAAuB;QACpC,KAAK,EAAE,CAAO,OAAO,EAAE,EAAE;YACvB,MAAM,wBAAsB,CAAC,YAAY,CACvC,OAAO,EACP,MAAM,EACN,oBAAoB,EACpB,MAAM,CACP,CAAC;QACJ,CAAC,CAAA;KACF;IACD;QACE,WAAW,EAAE,OAAO;QACpB,SAAS,EAAE,OAAO;QAClB,WAAW,EAAE,kCAAkC;QAC/C,KAAK,EAAE,CAAO,OAAO,EAAE,EAAE;YACvB,MAAM,wBAAsB,CAAC,YAAY,CACvC,OAAO,EACP,eAAe,EACf,gBAAgB,EAChB,QAAQ,EACR,gCAAgC,CACjC,CAAC;QACJ,CAAC,CAAA;KACF;CACF,AAtI8B,CAsI7B;iCAzIS,sBAAsB;IADlC,IAAA,mBAAU,GAAE;IA6IR,WAAA,IAAA,eAAM,EAAC,iBAAiB,CAAC,CAAA;;GA5IjB,sBAAsB,CAwZlC","sourcesContent":["import { Injectable, Inject, OnModuleInit } from \"@nestjs/common\";\r\nimport { DatabaseUpdater } from \"../../DatabaseUpdater\";\r\nimport { AccessiOptions } from \"../AccessiModule\";\r\nimport { Orm } from \"../../Orm\";\r\nimport { Logger } from \"../../Logger\";\r\n\r\ntype AccessiUpdateStep = {\r\n fromVersion: string;\r\n toVersion: string;\r\n description: string;\r\n apply: (options: AccessiOptions) => Promise<void>;\r\n};\r\n\r\n@Injectable()\r\nexport class AccessiDatabaseUpdater extends DatabaseUpdater implements OnModuleInit {\n protected static override logger: Logger = new Logger(AccessiDatabaseUpdater.name);\n\r\n private static readonly updates: AccessiUpdateStep[] = [\r\n {\r\n fromVersion: \"1.0.0\",\r\n toVersion: \"1.1.0\",\r\n description: \"Aggiunge filtro postazione, colonna IDXPOS e menu verifica RFID\",\n apply: async (options) => {\n await AccessiDatabaseUpdater.upsertFiltroTipo(options, 20, \"POSTAZIONE\", \"IDXPOS\", undefined);\n await AccessiDatabaseUpdater.ensureColumn(\n options,\n \"FILTRI\",\r\n \"IDXPOS SMALLINT\",\r\n \"IDXPOS\",\n \"idx della postazione nella tabella ANTENNE_POS di PROLAV\"\n );\n await AccessiDatabaseUpdater.upsertMenuGroup(options, {\n CODGRP: \"F\",\n DESGRP: \"Verifica RFID\",\n FLGENABLED: 1,\n ORDINE: 10,\n NOMECAMPO: \"FLGPIANARFID\",\n });\n await AccessiDatabaseUpdater.upsertMenu(options, {\n CODMNU: \"MNUVERRFID\",\n DESMNU: \"Verifica RFID\",\n CODGRP: \"F\",\n FLGENABLED: 1,\r\n ICON: \"hardware-chip-outline\",\r\n ORDINE: 10,\r\n CODTIP: \"M\",\r\n PAGINA: \"/verifica-rfid\",\r\n RIFMENU: null,\r\n });\r\n },\r\n },\r\n {\r\n fromVersion: \"1.1.0\",\r\n toVersion: \"1.1.1\",\r\n description: \"Aggiunge FLGENABLED su FILTRI_TIPO\",\r\n apply: async (options) => {\r\n const columnCreated = await AccessiDatabaseUpdater.ensureColumn(\r\n options,\r\n \"FILTRI_TIPO\",\r\n \"FLGENABLED SMALLINT DEFAULT 1 NOT NULL\",\r\n \"FLGENABLED\"\r\n );\r\n\r\n if (!columnCreated) {\r\n await Orm.execute(\r\n options.databaseOptions,\r\n \"UPDATE FILTRI_TIPO SET FLGENABLED = 1 WHERE FLGENABLED IS NULL\"\r\n );\r\n }\r\n },\r\n },\r\n {\r\n fromVersion: \"1.1.1\",\r\n toVersion: \"1.1.2\",\r\n description: \"Aggiunge filtro vettore e colonna CODVET\",\r\n apply: async (options) => {\r\n await AccessiDatabaseUpdater.upsertFiltroTipo(options, 30, \"VETTORE\", \"CODVET\", 1);\r\n await AccessiDatabaseUpdater.ensureColumn(\r\n options,\r\n \"FILTRI\",\r\n \"CODVET INTEGER\",\r\n \"CODVET\",\r\n \"CODICE DEL VETTORE DA INSERIRE SE COME FILTRO HA 30\"\r\n );\r\n },\r\n },\r\n {\r\n fromVersion: \"1.1.2\",\r\n toVersion: \"1.1.3\",\r\n description: \"Aggiunge FLGADMINCONFIG e inizializza PARAMETRI\",\r\n apply: async (options) => {\r\n await AccessiDatabaseUpdater.ensureColumn(\r\n options,\r\n \"UTENTI_CONFIG\",\r\n \"FLGADMINCONFIG SMALLINT DEFAULT 0\",\r\n \"FLGADMINCONFIG\",\r\n \"flag utente configuratore dei menu amministratore\"\r\n );\r\n await AccessiDatabaseUpdater.createParametersTable(options.databaseOptions);\r\n },\r\n },\r\n {\r\n fromVersion: \"1.1.3\",\r\n toVersion: \"1.1.4\",\r\n description: \"Aggiunge sequence e trigger per RUOLI\",\r\n apply: async (options) => {\r\n if (!(await AccessiDatabaseUpdater.generatorExists(options.databaseOptions, \"GEN_RUOLI_ID\"))) {\r\n await Orm.execute(options.databaseOptions, \"CREATE SEQUENCE GEN_RUOLI_ID\");\r\n }\r\n\r\n if (!(await AccessiDatabaseUpdater.triggerExists(options.databaseOptions, \"RUOLI_BI\"))) {\r\n await Orm.execute(\r\n options.databaseOptions,\r\n `CREATE TRIGGER RUOLI_BI FOR RUOLI\r\nACTIVE BEFORE INSERT POSITION 0\r\nAS\r\nBEGIN\r\n IF (NEW.CODRUO IS NULL) THEN\r\n NEW.CODRUO = GEN_ID(GEN_RUOLI_ID,1);\r\nEND`\r\n );\r\n }\r\n },\r\n },\r\n {\r\n fromVersion: \"1.1.4\",\r\n toVersion: \"1.1.5\",\r\n description: \"Aggiunge NOTE su MENU\",\r\n apply: async (options) => {\r\n await AccessiDatabaseUpdater.ensureColumn(\r\n options,\r\n \"MENU\",\r\n \"NOTE VARCHAR(1000)\",\r\n \"NOTE\"\r\n );\r\n },\r\n },\r\n {\r\n fromVersion: \"1.1.5\",\r\n toVersion: \"1.1.6\",\r\n description: \"Aggiunge NUMMAC su UTENTI_CONFIG\",\r\n apply: async (options) => {\r\n await AccessiDatabaseUpdater.ensureColumn(\r\n options,\r\n \"UTENTI_CONFIG\",\r\n \"NUMMAC INTEGER\",\r\n \"NUMMAC\",\r\n 'Numero macchina DESPOST PROLAV'\r\n );\r\n },\r\n },\r\n ];\r\n\r\n constructor(\r\n @Inject(\"ACCESSI_OPTIONS\") private readonly accessiOptions: AccessiOptions\r\n ) {\r\n super();\r\n }\r\n\r\n async onModuleInit(): Promise<void> {\n if (this.accessiOptions.autoUpdateDatabase === false) {\n AccessiDatabaseUpdater.logger.info(\"Aggiornamento automatico database accessi disabilitato da configurazione.\");\n return;\n }\n\n AccessiDatabaseUpdater.logger.info(\"Avvio updater database accessi.\");\n await AccessiDatabaseUpdater.run(this.accessiOptions);\n AccessiDatabaseUpdater.logger.info(\"Updater database accessi completato.\");\n }\n\n static async run(options: AccessiOptions): Promise<void> {\n const startedAt = performance.now();\n this.logger.info(\n `Verifica schema accessi su ${options.databaseOptions.host ?? \"?\"}:${options.databaseOptions.port ?? \"?\"} -> ${options.databaseOptions.database ?? \"?\"}`\n );\n await this.createParametersTable(options.databaseOptions);\n this.logger.info(\"Tabella PARAMETRI verificata.\");\n\n const currentVersion = await this.getDatabaseVersion(options.databaseOptions);\n const currentIndex = this.updates.findIndex(\r\n (update) => update.toVersion === currentVersion\r\n );\r\n const startIndex = currentIndex >= 0 ? currentIndex + 1 : 0;\r\n\r\n if (currentVersion && currentIndex === this.updates.length - 1) {\r\n this.logger.info(`Database accessi gia' all'ultima versione disponibile (${currentVersion}).`);\r\n } else if (currentVersion && currentIndex >= 0) {\r\n this.logger.info(`Database accessi rilevato alla versione ${currentVersion}.`);\r\n } else if (currentVersion) {\r\n this.logger.warning(\r\n `Versione database accessi non riconosciuta (${currentVersion}). Verifico tutti gli update idempotenti.`\r\n );\r\n } else {\r\n this.logger.warning(\r\n \"Versione database accessi assente. Verifico tutti gli update idempotenti.\"\r\n );\r\n }\r\n\r\n for (let index = startIndex; index < this.updates.length; index++) {\n const update = this.updates[index];\n const stepStartedAt = performance.now();\n this.logger.info(\n `Applico aggiornamento accessi ${update.fromVersion} -> ${update.toVersion}: ${update.description}`\n );\n await update.apply(options);\n await this.setDatabaseVersion(options.databaseOptions, update.toVersion);\n this.logger.info(\n `Aggiornamento accessi ${update.toVersion} completato in ${(performance.now() - stepStartedAt).toFixed(2)} ms`\n );\n }\n\n this.logger.info(\n `Verifica/aggiornamento database accessi completato in ${(performance.now() - startedAt).toFixed(2)} ms`\n );\n }\n\r\n static async getCurrentVersion(options: AccessiOptions): Promise<string | null> {\r\n return await this.getDatabaseVersion(options.databaseOptions);\r\n }\r\n\r\n static getLatestVersion(): string {\r\n return this.updates[this.updates.length - 1]?.toVersion ?? \"0.0.0\";\r\n }\r\n\r\n private static async ensureColumn(\r\n options: AccessiOptions,\r\n tableName: string,\r\n columnDefinition: string,\r\n columnName: string,\r\n comment?: string\r\n ): Promise<boolean> {\r\n const exists = await this.columnExists(\r\n options.databaseOptions,\r\n tableName,\r\n columnName\r\n );\r\n\r\n if (!exists) {\r\n await Orm.execute(\r\n options.databaseOptions,\r\n `ALTER TABLE ${tableName} ADD ${columnDefinition}`\r\n );\r\n }\r\n\r\n if (comment) {\r\n await Orm.execute(\r\n options.databaseOptions,\r\n `COMMENT ON COLUMN ${tableName}.${columnName} IS '${comment.replace(/'/g, \"''\")}'`\r\n );\r\n }\r\n\r\n return !exists;\r\n }\r\n\r\n private static async upsertFiltroTipo(\r\n options: AccessiOptions,\r\n tipfil: number,\r\n desfil: string,\r\n fldfil: string,\r\n flgEnabled?: number\r\n ): Promise<void> {\r\n const hasEnabledColumn = await this.columnExists(\r\n options.databaseOptions,\r\n \"FILTRI_TIPO\",\r\n \"FLGENABLED\"\r\n );\r\n\r\n const existing = await Orm.query(\r\n options.databaseOptions,\r\n \"SELECT TIPFIL FROM FILTRI_TIPO WHERE TIPFIL = ?\",\r\n [tipfil]\r\n );\r\n\r\n if (existing.length === 0) {\r\n if (hasEnabledColumn && flgEnabled !== undefined) {\r\n await Orm.execute(\r\n options.databaseOptions,\r\n \"INSERT INTO FILTRI_TIPO (TIPFIL, DESFIL, FLDFIL, FLGENABLED) VALUES (?, ?, ?, ?)\",\r\n [tipfil, desfil, fldfil, flgEnabled]\r\n );\r\n return;\r\n }\r\n\r\n await Orm.execute(\r\n options.databaseOptions,\r\n \"INSERT INTO FILTRI_TIPO (TIPFIL, DESFIL, FLDFIL) VALUES (?, ?, ?)\",\r\n [tipfil, desfil, fldfil]\r\n );\r\n return;\r\n }\r\n\r\n if (hasEnabledColumn && flgEnabled !== undefined) {\r\n await Orm.execute(\r\n options.databaseOptions,\r\n \"UPDATE FILTRI_TIPO SET DESFIL = ?, FLDFIL = ?, FLGENABLED = COALESCE(FLGENABLED, ?) WHERE TIPFIL = ?\",\r\n [desfil, fldfil, flgEnabled, tipfil]\r\n );\r\n return;\r\n }\r\n\r\n await Orm.execute(\r\n options.databaseOptions,\r\n \"UPDATE FILTRI_TIPO SET DESFIL = ?, FLDFIL = ? WHERE TIPFIL = ?\",\r\n [desfil, fldfil, tipfil]\r\n );\r\n }\r\n\r\n private static async upsertMenu(\n options: AccessiOptions,\n menu: {\n CODMNU: string;\r\n DESMNU: string;\r\n CODGRP: string;\r\n FLGENABLED: number;\r\n ICON: string;\r\n ORDINE: number;\r\n CODTIP: string;\r\n PAGINA: string;\r\n RIFMENU: string | null;\r\n }\n ): Promise<void> {\n const existing = await Orm.query(\r\n options.databaseOptions,\r\n \"SELECT CODMNU FROM MENU WHERE CODMNU = ?\",\r\n [menu.CODMNU]\r\n );\r\n\r\n if (existing.length === 0) {\r\n await Orm.execute(\r\n options.databaseOptions,\r\n `INSERT INTO MENU (CODMNU, DESMNU, CODGRP, FLGENABLED, ICON, ORDINE, CODTIP, PAGINA, RIFMENU)\r\n VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)`,\r\n [\r\n menu.CODMNU,\r\n menu.DESMNU,\r\n menu.CODGRP,\r\n menu.FLGENABLED,\r\n menu.ICON,\r\n menu.ORDINE,\r\n menu.CODTIP,\r\n menu.PAGINA,\r\n menu.RIFMENU,\r\n ]\r\n );\r\n return;\r\n }\r\n\r\n await Orm.execute(\r\n options.databaseOptions,\r\n `UPDATE MENU\r\n SET DESMNU = ?,\r\n CODGRP = ?,\r\n FLGENABLED = COALESCE(FLGENABLED, ?),\r\n ICON = ?,\r\n ORDINE = ?,\r\n CODTIP = ?,\r\n PAGINA = ?,\r\n RIFMENU = ?\r\n WHERE CODMNU = ?`,\r\n [\r\n menu.DESMNU,\r\n menu.CODGRP,\r\n menu.FLGENABLED,\r\n menu.ICON,\r\n menu.ORDINE,\r\n menu.CODTIP,\r\n menu.PAGINA,\r\n menu.RIFMENU,\r\n menu.CODMNU,\r\n ]\n );\n }\n\n private static async upsertMenuGroup(\n options: AccessiOptions,\n menuGroup: {\n CODGRP: string;\n DESGRP: string;\n FLGENABLED: number;\n ORDINE: number;\n NOMECAMPO: string | null;\n }\n ): Promise<void> {\n const existing = await Orm.query(\n options.databaseOptions,\n \"SELECT CODGRP FROM MENU_GRP WHERE CODGRP = ?\",\n [menuGroup.CODGRP]\n );\n\n if (existing.length === 0) {\n await Orm.execute(\n options.databaseOptions,\n `INSERT INTO MENU_GRP (CODGRP, DESGRP, FLGENABLED, ORDINE, NOMECAMPO)\n VALUES (?, ?, ?, ?, ?)`,\n [\n menuGroup.CODGRP,\n menuGroup.DESGRP,\n menuGroup.FLGENABLED,\n menuGroup.ORDINE,\n menuGroup.NOMECAMPO,\n ]\n );\n return;\n }\n\n await Orm.execute(\n options.databaseOptions,\n `UPDATE MENU_GRP\n SET DESGRP = ?,\n FLGENABLED = COALESCE(FLGENABLED, ?),\n ORDINE = ?,\n NOMECAMPO = ?\n WHERE CODGRP = ?`,\n [\n menuGroup.DESGRP,\n menuGroup.FLGENABLED,\n menuGroup.ORDINE,\n menuGroup.NOMECAMPO,\n menuGroup.CODGRP,\n ]\n );\n }\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "emilsoftware-utilities",
3
- "version": "2.0.0-dev.7",
3
+ "version": "2.0.0-dev.8",
4
4
  "description": "Utilities for EmilSoftware",
5
5
  "main": "dist/index.js",
6
6
  "module": "dist/index.js",
@@ -37,7 +37,7 @@
37
37
  "class-transformer": "^0.5.1",
38
38
  "class-validator": "^0.14.1",
39
39
  "colorette": "^2.0.20",
40
- "jsonwebtoken": "^9.0.2",
40
+ "jsonwebtoken": "^9.0.2",
41
41
  "jspdf": "^3.0.0",
42
42
  "jspdf-autotable": "^5.0.2",
43
43
  "multer": "^1.4.5-lts.2",