emilsoftware-utilities 2.0.0-dev.1 → 2.0.0-dev.2

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.
Files changed (86) hide show
  1. package/README.MD +38 -38
  2. package/dist/ContractGenerator.js.map +1 -1
  3. package/dist/DatabaseUpdater.js +24 -24
  4. package/dist/DatabaseUpdater.js.map +1 -1
  5. package/dist/EmilsoftwareModule.js.map +1 -1
  6. package/dist/ExecutionTimeLogger.js.map +1 -1
  7. package/dist/Logger.js.map +1 -1
  8. package/dist/Orm.js.map +1 -1
  9. package/dist/RoutesLoggerMiddleware.js.map +1 -1
  10. package/dist/Utilities.js.map +1 -1
  11. package/dist/accessi-module/AccessiModule.js.map +1 -1
  12. package/dist/accessi-module/Controllers/AuthController.js.map +1 -1
  13. package/dist/accessi-module/Controllers/ConfiguratorController.js.map +1 -1
  14. package/dist/accessi-module/Controllers/EmailController.js.map +1 -1
  15. package/dist/accessi-module/Controllers/FiltriController.js.map +1 -1
  16. package/dist/accessi-module/Controllers/PermissionController.js.map +1 -1
  17. package/dist/accessi-module/Controllers/UserController.js.map +1 -1
  18. package/dist/accessi-module/Dtos/Abilitazione.js.map +1 -1
  19. package/dist/accessi-module/Dtos/AbilitazioneMenu.js.map +1 -1
  20. package/dist/accessi-module/Dtos/AssignPermissionsToUserRequest.js.map +1 -1
  21. package/dist/accessi-module/Dtos/AssignRolesToUserRequest.js.map +1 -1
  22. package/dist/accessi-module/Dtos/BaseResponse.js.map +1 -1
  23. package/dist/accessi-module/Dtos/FiltriUtente.js.map +1 -1
  24. package/dist/accessi-module/Dtos/GetGroupsWithMenusResponse.js.map +1 -1
  25. package/dist/accessi-module/Dtos/GetMenusResponse.js.map +1 -1
  26. package/dist/accessi-module/Dtos/GetRolesResponse.js.map +1 -1
  27. package/dist/accessi-module/Dtos/GetUsersResponse.js.map +1 -1
  28. package/dist/accessi-module/Dtos/LoginRequest.js.map +1 -1
  29. package/dist/accessi-module/Dtos/LoginResponse.js.map +1 -1
  30. package/dist/accessi-module/Dtos/Permission.js.map +1 -1
  31. package/dist/accessi-module/Dtos/RegisterRequest.js.map +1 -1
  32. package/dist/accessi-module/Dtos/RegisterResponse.js.map +1 -1
  33. package/dist/accessi-module/Dtos/Role.js.map +1 -1
  34. package/dist/accessi-module/Dtos/RuoliMenu.js.map +1 -1
  35. package/dist/accessi-module/Dtos/SetStatoRegistrazione.js.map +1 -1
  36. package/dist/accessi-module/Dtos/StatoRegistrazione.js.map +1 -1
  37. package/dist/accessi-module/Dtos/TipoAbilitazione.js.map +1 -1
  38. package/dist/accessi-module/Dtos/TipoFiltro.js.map +1 -1
  39. package/dist/accessi-module/Dtos/TokenResult.js.map +1 -1
  40. package/dist/accessi-module/Dtos/UpdateEnabledStatusRequest.js.map +1 -1
  41. package/dist/accessi-module/Dtos/UserDto.js.map +1 -1
  42. package/dist/accessi-module/Dtos/UserGrantsDto.js.map +1 -1
  43. package/dist/accessi-module/Dtos/index.js.map +1 -1
  44. package/dist/accessi-module/Services/AuthService/AuthService.d.ts +1 -0
  45. package/dist/accessi-module/Services/AuthService/AuthService.js +12 -2
  46. package/dist/accessi-module/Services/AuthService/AuthService.js.map +1 -1
  47. package/dist/accessi-module/Services/ConfiguratorService/ConfiguratorService.js.map +1 -1
  48. package/dist/accessi-module/Services/EmailService/EmailService.js +11 -11
  49. package/dist/accessi-module/Services/EmailService/EmailService.js.map +1 -1
  50. package/dist/accessi-module/Services/FiltriService/FiltriService.js +1 -1
  51. package/dist/accessi-module/Services/FiltriService/FiltriService.js.map +1 -1
  52. package/dist/accessi-module/Services/PermissionService/PermissionService.js +87 -87
  53. package/dist/accessi-module/Services/PermissionService/PermissionService.js.map +1 -1
  54. package/dist/accessi-module/Services/UserService/UserService.js +65 -65
  55. package/dist/accessi-module/Services/UserService/UserService.js.map +1 -1
  56. package/dist/accessi-module/Views/reset-password.html +213 -213
  57. package/dist/accessi-module/database-updates/AccessiDatabaseUpdater.js +25 -16
  58. package/dist/accessi-module/database-updates/AccessiDatabaseUpdater.js.map +1 -1
  59. package/dist/accessi-module/database-updates/runAccessiDbUpdate.js.map +1 -1
  60. package/dist/accessi-module/index.js +16 -1
  61. package/dist/accessi-module/index.js.map +1 -1
  62. package/dist/accessi-module/jwt/jwt.strategy.js.map +1 -1
  63. package/dist/accessi-module/middleware/accessiRequirements.js.map +1 -1
  64. package/dist/accessi-module/middleware/authenticateGen.js.map +1 -1
  65. package/dist/accessi-module/security/accessControl.js.map +1 -1
  66. package/dist/accessi-module/security/authenticatedToken.js.map +1 -1
  67. package/dist/accessi-module/security/passwordResetToken.js.map +1 -1
  68. package/dist/accessi-module/security/publicAuthRateLimit.js.map +1 -1
  69. package/dist/allegati-module/AllegatiModule.js.map +1 -1
  70. package/dist/allegati-module/Controllers/AllegatiController.js.map +1 -1
  71. package/dist/allegati-module/Dtos/AllegatoDto.js.map +1 -1
  72. package/dist/allegati-module/Dtos/BaseResponse.js.map +1 -1
  73. package/dist/allegati-module/Dtos/UploadSingleFileRequest.js.map +1 -1
  74. package/dist/allegati-module/Dtos/index.js.map +1 -1
  75. package/dist/allegati-module/Dtos/responses/DownloadAllegatoResponseDto.js.map +1 -1
  76. package/dist/allegati-module/Dtos/responses/GetListResponse.js.map +1 -1
  77. package/dist/allegati-module/Dtos/responses/UploadAllegatoResponseDto.js.map +1 -1
  78. package/dist/allegati-module/Services/AllegatiService/AllegatiService.js +49 -49
  79. package/dist/allegati-module/Services/AllegatiService/AllegatiService.js.map +1 -1
  80. package/dist/allegati-module/index.js.map +1 -1
  81. package/dist/autobind.js.map +1 -1
  82. package/dist/index.js.map +1 -1
  83. package/dist/initEmilsoftwareModule.js.map +1 -1
  84. package/dist/swagger/SwaggerConfig.js.map +1 -1
  85. package/package.json +83 -83
  86. package/dist/emilsoftware-utilities-2.0.0-dev.1.tgz +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"UserService.js","sourceRoot":"","sources":["../../../../src/accessi-module/Services/UserService/UserService.ts"],"names":[],"mappings":"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","sourcesContent":["import { Inject, Injectable } from '@nestjs/common';\nimport { autobind } from '../../../autobind';\nimport { Orm } from '../../../Orm';\nimport { RestUtilities } from '../../../Utilities';\nimport { AccessiOptions } from '../../AccessiModule';\nimport { FILTRI_UTENTE_DB_MAPPING, FiltriUtente } from '../../Dtos/FiltriUtente';\nimport { GetUsersResult } from '../../Dtos/GetUsersResponse';\nimport { RegisterRequest } from '../../Dtos/RegisterRequest';\nimport { StatoRegistrazione } from '../../Dtos/StatoRegistrazione';\nimport { UserDto } from '../../Dtos/UserDto';\nimport { AccessiAuthenticatedUserSnapshot } from '../../security/authenticatedToken';\nimport { EmailService } from '../EmailService/EmailService';\nimport { FiltriService } from '../FiltriService/FiltriService';\nimport { PermissionService } from '../PermissionService/PermissionService';\n\ninterface OptionalField<T> {\n key: keyof RegisterRequest;\n dbField: string;\n transform?: (value: any) => T;\n}\n\n@autobind\n@Injectable()\nexport class UserService {\n constructor(\n @Inject('ACCESSI_OPTIONS') private readonly accessiOptions: AccessiOptions,\n private readonly emailService: EmailService,\n private readonly permissionService: PermissionService,\n private readonly filtriService: FiltriService,\n ) {}\n\n private normalizeDatabaseBoolean(value: unknown): boolean {\n return value === true || value === 1 || value === '1';\n }\n\n private normalizeEmail(email: string): string {\n if (typeof email !== 'string' || email.trim() === '') {\n throw new Error(\"L'email e' obbligatoria.\");\n }\n\n return email.trim().toLowerCase();\n }\n\n private async ensureEmailIsAvailable(email: string, currentUserCode?: number): Promise<void> {\n const result = await Orm.query(\n this.accessiOptions.databaseOptions,\n 'SELECT FIRST 1 CODUTE as codice_utente FROM UTENTI WHERE LOWER(USRNAME) = ?',\n [email],\n );\n\n const existingUser = result.map(RestUtilities.convertKeysToCamelCase)[0] as\n | { codiceUtente?: number }\n | undefined;\n\n if (\n existingUser?.codiceUtente &&\n (!currentUserCode || existingUser.codiceUtente !== currentUserCode)\n ) {\n throw new Error(\"Questa e-mail e' gia stata utilizzata!\");\n }\n }\n\n async isAdminConfigurator(codiceUtente: number): Promise<boolean> {\n if (!codiceUtente) {\n return false;\n }\n\n const query = `SELECT FLGADMINCONFIG AS flag_admin_configurator FROM UTENTI_CONFIG WHERE CODUTE = ?`;\n const result = await Orm.query(this.accessiOptions.databaseOptions, query, [codiceUtente]);\n\n if (!result || result === 0) {\n return false;\n }\n\n const mapped = result.map(RestUtilities.convertKeysToCamelCase);\n const flagValue = mapped[0]?.flag_admin_configurator;\n\n if (typeof flagValue === 'boolean') {\n return flagValue;\n }\n\n return flagValue === 1;\n }\n\n async getAuthenticatedUserSnapshot(\n codiceUtente: number,\n ): Promise<AccessiAuthenticatedUserSnapshot | null> {\n if (!codiceUtente || codiceUtente <= 0) {\n return null;\n }\n\n const result = await Orm.query(\n this.accessiOptions.databaseOptions,\n `\n SELECT\n U.CODUTE AS codice_utente,\n U.USRNAME AS email,\n U.STAREG AS stato_registrazione,\n C.FLGSUPER AS flag_super,\n C.FLGADMINCONFIG AS flag_admin_configurator\n FROM UTENTI U\n LEFT JOIN UTENTI_CONFIG C ON C.CODUTE = U.CODUTE\n WHERE U.CODUTE = ?\n `,\n [codiceUtente],\n );\n\n const user = result.map(RestUtilities.convertKeysToCamelCase)[0] as\n | {\n codiceUtente?: number;\n email?: string;\n statoRegistrazione?: StatoRegistrazione | number;\n flagSuper?: unknown;\n flagAdminConfigurator?: unknown;\n }\n | undefined;\n\n if (!user?.codiceUtente) {\n return null;\n }\n\n return {\n codiceUtente: Number(user.codiceUtente),\n email: typeof user.email === 'string' ? user.email : undefined,\n statoRegistrazione: Number(user.statoRegistrazione) as StatoRegistrazione,\n flagSuper: this.normalizeDatabaseBoolean(user.flagSuper),\n flagAdminConfigurator: this.normalizeDatabaseBoolean(user.flagAdminConfigurator),\n };\n }\n\n async getUsers(\n filters?: { email?: string; codiceUtente?: number },\n options?: { includeExtensionFields: boolean; includeGrants: boolean },\n ): Promise<GetUsersResult[]> {\n try {\n let query = ` \n SELECT \n U.CODUTE as codice_utente, \n U.USRNAME as email, \n U.FLGGDPR as flag_gdpr, \n U.DATGDPR as data_gdpr, \n U.DATINS as data_inserimento, \n U.DATSCAPWD as data_scadenza_password, \n U.DATLASTLOGIN as data_last_login, \n U.STAREG as stato_registrazione, \n G.COGNOME as cognome, \n G.NOME as nome, \n G.AVATAR as avatar, \n G.FLG2FATT as flag_due_fattori, \n G.CODLINGUA as codice_lingua,\n G.CELLULARE as cellulare,\n G.FLGSUPER as flag_super, \n G.FLGADMINCONFIG as flag_admin_configurator,\n G.PAGDEF as pagina_default,\n G.JSON_METADATA as json_metadata,\n G.RAGSOCCLI as rag_soc_cli,\n G.NUMMAC as nummac,\n F.NUMREP AS num_rep,\n F.IDXPERS AS idx_pers,\n F.CODCLISUPER AS cod_cli_super,\n F.CODAGE AS cod_age,\n F.CODCLICOL AS cod_cli_col,\n F.CODCLIENTI AS cod_clienti,\n F.TIPFIL AS tip_fil,\n F.IDXPOS AS idx_postazione\n FROM UTENTI U \n INNER JOIN UTENTI_CONFIG G ON U.CODUTE = G.CODUTE\n LEFT JOIN FILTRI F ON F.CODUTE = U.CODUTE\n WHERE 1=1\n `;\n\n const queryParams: any[] = [];\n\n if (filters?.email) {\n query += ` AND LOWER(U.USRNAME) = ? `;\n queryParams.push(filters.email.trim().toLowerCase());\n }\n\n if (filters?.codiceUtente) {\n query += ` AND U.CODUTE = ? `;\n queryParams.push(filters.codiceUtente);\n }\n\n query += ` ORDER BY U.CODUTE DESC `;\n\n let users = (await Orm.query(\n this.accessiOptions.databaseOptions,\n query,\n queryParams,\n )) as UserDto[];\n users = users.map(RestUtilities.convertKeysToCamelCase);\n\n const usersResponse: GetUsersResult[] = [];\n\n for (const user of users) {\n let userGrants = null;\n\n if (options?.includeGrants) {\n userGrants = await this.permissionService.getUserRolesAndGrants(user.codiceUtente);\n }\n\n let extensionFields = options?.includeExtensionFields ? {} : null;\n\n if (options?.includeExtensionFields && this.accessiOptions.extensionFieldsOptions) {\n for (const ext of this.accessiOptions.extensionFieldsOptions) {\n const values = (\n await Orm.query(\n ext.databaseOptions,\n `SELECT ${ext.tableFields.join(',')} FROM ${ext.tableName} WHERE ${\n ext.tableJoinFieldName\n } = ?`,\n [user.codiceUtente],\n )\n ).map(RestUtilities.convertKeysToCamelCase);\n\n extensionFields[ext.objectKey] = values;\n }\n }\n\n usersResponse.push({\n utente: user,\n userGrants,\n extensionFields,\n });\n }\n\n return usersResponse;\n } catch (error) {\n throw error;\n }\n }\n\n async getCodiceUtenteByEmail(email: string): Promise<{ codiceUtente: number }> {\n try {\n const query = `SELECT CODUTE as codice_utente FROM UTENTI WHERE LOWER(USRNAME) = ?`;\n const result = await Orm.query(this.accessiOptions.databaseOptions, query, [\n email.trim().toLowerCase(),\n ]);\n return result.map(RestUtilities.convertKeysToCamelCase)[0];\n } catch (error) {\n throw error;\n }\n }\n\n async getUserByEmail(email: string): Promise<UserDto | null> {\n const query = `\n SELECT \n U.CODUTE AS codice_utente, \n U.USRNAME AS email, \n U.FLGGDPR AS flag_gdpr,\n U.DATSCAPWD as data_scadenza_password,\n U.STAREG AS stato_registrazione, \n C.COGNOME AS cognome, \n C.NOME AS nome, \n C.AVATAR AS avatar, \n C.FLG2FATT AS flag_due_fattori,\n C.CODLINGUA AS codice_lingua, \n C.CELLULARE AS cellulare, \n C.FLGSUPER AS flag_super,\n C.FLGADMINCONFIG AS flag_admin_configurator,\n C.PAGDEF AS pagina_default,\n C.NUMMAC AS nummac,\n C.RAGSOCCLI AS rag_soc_cli\n FROM UTENTI U\n INNER JOIN UTENTI_CONFIG C ON C.CODUTE = U.CODUTE\n WHERE LOWER(U.USRNAME) = ?\n `;\n\n const utenti = (await Orm.query(this.accessiOptions.databaseOptions, query, [email]).then(\n (results) => results.map(RestUtilities.convertKeysToCamelCase),\n )) as UserDto[];\n\n const filtriUtente = await this.filtriService.getFiltriUser(utenti[0]?.codiceUtente);\n\n if (utenti.length <= 0) {\n return null;\n }\n\n if (utenti.length > 0 && filtriUtente.length > 0) {\n const user = utenti[0];\n const filtro = filtriUtente[0];\n\n Object.entries(FILTRI_UTENTE_DB_MAPPING).forEach(([key]) => {\n if (key in filtro) {\n (user as UserDto)[key] = filtro[key as keyof FiltriUtente];\n }\n });\n }\n\n return utenti.length > 0 ? utenti[0] : null;\n }\n\n async insertUserFilters(codiceUtente: number, filterData: RegisterRequest): Promise<void> {\n try {\n if (!codiceUtente || codiceUtente <= 0) {\n throw new Error('Codice utente non valido');\n }\n\n const fieldMapping: Record<string, { dbField: string; type: 'string' | 'number' }> = {\n numeroReport: { dbField: 'NUMREP', type: 'number' },\n indicePersonale: { dbField: 'IDXPERS', type: 'number' },\n codiceClienteSuper: { dbField: 'CODCLISUPER', type: 'number' },\n codAge: { dbField: 'CODAGE', type: 'number' },\n codiceClienteCollegato: { dbField: 'CODCLICOL', type: 'number' },\n codiceClienti: { dbField: 'CODCLIENTI', type: 'string' },\n tipFil: { dbField: 'TIPFIL', type: 'number' },\n idxPostazione: { dbField: 'IDXPOS', type: 'number' },\n };\n\n const fieldsToInsert = Object.entries(fieldMapping)\n .filter(([tsField]) => {\n const value = filterData[tsField as keyof RegisterRequest];\n return value !== undefined && value !== null && value !== '';\n })\n .map(([tsField, config]) => {\n const value = filterData[tsField as keyof RegisterRequest];\n\n if (config.type === 'number' && typeof value !== 'number') {\n throw new Error(`Il campo ${tsField} deve essere un numero`);\n }\n if (config.type === 'string' && typeof value !== 'string') {\n throw new Error(`Il campo ${tsField} deve essere una stringa`);\n }\n\n return { tsField, dbField: config.dbField, value };\n });\n\n if (fieldsToInsert.length === 0) {\n return;\n }\n\n await this.executeInTransaction(async () => {\n await Orm.execute(\n this.accessiOptions.databaseOptions,\n 'DELETE FROM FILTRI WHERE CODUTE = ?',\n [codiceUtente],\n );\n\n const dbFields = ['CODUTE', ...fieldsToInsert.map((f) => f.dbField)];\n const placeholders = dbFields.map(() => '?');\n const values = [codiceUtente, ...fieldsToInsert.map((f) => f.value)];\n\n const insertQuery = `INSERT INTO FILTRI (${dbFields.join(\n ', ',\n )}) VALUES (${placeholders.join(', ')})`;\n await Orm.execute(this.accessiOptions.databaseOptions, insertQuery, values);\n });\n } catch (error) {\n throw new Error(\n `Errore durante l'inserimento dei filtri per utente ${codiceUtente}: ${error.message}`,\n );\n }\n }\n\n private async executeInTransaction(operation: () => Promise<void>): Promise<void> {\n await operation();\n }\n\n async register(\n registrationData: RegisterRequest,\n options?: { allowPrivilegedFields?: boolean },\n ): Promise<number> {\n try {\n const allowPrivilegedFields = options?.allowPrivilegedFields === true;\n const normalizedEmail = this.normalizeEmail(registrationData.email);\n\n if (\n !allowPrivilegedFields &&\n (registrationData.flagSuper !== undefined ||\n registrationData.flagAdminConfigurator !== undefined ||\n registrationData.roles !== undefined ||\n registrationData.permissions !== undefined)\n ) {\n throw new Error('I campi privilegiati non sono consentiti nella registrazione pubblica.');\n }\n\n await this.ensureEmailIsAvailable(normalizedEmail);\n\n const queryUtenti = `INSERT INTO UTENTI (USRNAME, STAREG) VALUES (?,?)`;\n const paramsUtenti = [normalizedEmail, StatoRegistrazione.INVIO];\n\n await Orm.execute(this.accessiOptions.databaseOptions, queryUtenti, paramsUtenti);\n\n const codiceUtenteResult = await Orm.query(\n this.accessiOptions.databaseOptions,\n 'SELECT FIRST 1 CODUTE FROM UTENTI WHERE USRNAME = ? ORDER BY CODUTE DESC',\n [normalizedEmail],\n );\n\n const codiceUtente = Number(\n codiceUtenteResult?.[0]?.CODUTE ?? codiceUtenteResult?.[0]?.codute,\n );\n if (!codiceUtente) {\n throw new Error('Creazione utente non riuscita: impossibile recuperare CODUTE.');\n }\n\n const utentiConfigFields = ['CODUTE', 'COGNOME', 'NOME'];\n const utentiConfigPlaceholders = ['?', '?', '?'];\n const utentiConfigParams = [codiceUtente, registrationData.cognome, registrationData.nome];\n\n const optionalFields: OptionalField<any>[] = [\n {\n key: 'cellulare',\n dbField: 'CELLULARE',\n transform: (v) => String(v),\n },\n {\n key: 'avatar',\n dbField: 'AVATAR',\n transform: (v) => String(v),\n },\n {\n key: 'flagDueFattori',\n dbField: 'FLG2FATT',\n transform: (v) => (v ? 1 : 0),\n },\n {\n key: 'paginaDefault',\n dbField: 'PAGDEF',\n transform: (v) => String(v),\n },\n {\n key: 'nummac',\n dbField: 'NUMMAC',\n transform: (v) => Number(v),\n },\n {\n key: 'ragSocCli',\n dbField: 'RAGSOCCLI',\n transform: (v) => String(v),\n },\n ];\n\n if (allowPrivilegedFields) {\n optionalFields.push(\n {\n key: 'flagSuper',\n dbField: 'FLGSUPER',\n transform: (v) => (v ? 1 : 0),\n },\n {\n key: 'flagAdminConfigurator',\n dbField: 'FLGADMINCONFIG',\n transform: (v) => (v ? 1 : 0),\n },\n );\n }\n\n for (const field of optionalFields) {\n const value = registrationData[field.key];\n if (value !== undefined && value !== null) {\n utentiConfigFields.push(field.dbField);\n utentiConfigPlaceholders.push('?');\n utentiConfigParams.push(field.transform ? field.transform(value) : value);\n }\n }\n\n const queryUtentiConfig = `INSERT INTO UTENTI_CONFIG (${utentiConfigFields.join(\n ', ',\n )}) VALUES (${utentiConfigPlaceholders.join(', ')})`;\n await Orm.execute(this.accessiOptions.databaseOptions, queryUtentiConfig, utentiConfigParams);\n\n await this.filtriService.upsertFiltriUtente(codiceUtente, registrationData);\n\n if (allowPrivilegedFields && !!registrationData.roles && registrationData.roles.length > 0) {\n await this.permissionService.assignRolesToUser(codiceUtente, registrationData.roles);\n }\n\n if (\n allowPrivilegedFields &&\n !!registrationData.permissions &&\n registrationData.permissions.length > 0\n ) {\n await this.permissionService.assignPermissionsToUser(\n codiceUtente,\n registrationData.permissions,\n );\n }\n\n return codiceUtente;\n } catch (error) {\n throw error;\n }\n }\n\n async updateUser(\n codiceUtente: number,\n user: UserDto,\n options?: { allowPrivilegedChanges?: boolean },\n ): Promise<void> {\n try {\n if (!codiceUtente) throw new Error('Impossibile aggiornare senza codice utente.');\n const allowPrivilegedChanges = options?.allowPrivilegedChanges === true;\n\n if (\n !allowPrivilegedChanges &&\n (user.statoRegistrazione !== undefined ||\n user.flagSuper !== undefined ||\n user.flagAdminConfigurator !== undefined ||\n user.roles !== undefined ||\n user.permissions !== undefined)\n ) {\n throw new Error('Non e consentito modificare campi privilegiati.');\n }\n\n const utentiUpdates = [];\n const utentiParams = [];\n\n if (user.email !== undefined) {\n const normalizedEmail = this.normalizeEmail(user.email);\n await this.ensureEmailIsAvailable(normalizedEmail, codiceUtente);\n utentiUpdates.push('usrname = ?');\n utentiParams.push(normalizedEmail);\n }\n if (user.flagGdpr !== undefined) {\n utentiUpdates.push('flggdpr = ?');\n utentiParams.push(user.flagGdpr);\n }\n if (allowPrivilegedChanges && user.statoRegistrazione !== undefined) {\n utentiUpdates.push('stareg = ?');\n utentiParams.push(user.statoRegistrazione);\n }\n\n if (utentiUpdates.length > 0) {\n const queryUtenti = `UPDATE UTENTI SET ${utentiUpdates.join(', ')} WHERE CODUTE = ?`;\n utentiParams.push(codiceUtente);\n await Orm.execute(this.accessiOptions.databaseOptions, queryUtenti, utentiParams);\n }\n\n const utentiConfigUpdates = [];\n const utentiConfigParams = [];\n\n if (user.cognome !== undefined) {\n utentiConfigUpdates.push('cognome = ?');\n utentiConfigParams.push(user.cognome);\n }\n if (user.nome !== undefined) {\n utentiConfigUpdates.push('nome = ?');\n utentiConfigParams.push(user.nome);\n }\n if (user.avatar !== undefined) {\n utentiConfigUpdates.push('avatar = ?');\n utentiConfigParams.push(user.avatar);\n }\n if (user.flagDueFattori !== undefined) {\n utentiConfigUpdates.push('flg2fatt = ?');\n utentiConfigParams.push(user.flagDueFattori);\n }\n if (user.codiceLingua !== undefined) {\n utentiConfigUpdates.push('codlingua = ?');\n utentiConfigParams.push(user.codiceLingua);\n }\n if (user.cellulare !== undefined) {\n utentiConfigUpdates.push('cellulare = ?');\n utentiConfigParams.push(user.cellulare);\n }\n if (allowPrivilegedChanges && user.flagSuper !== undefined) {\n utentiConfigUpdates.push('flgsuper = ?');\n utentiConfigParams.push(user.flagSuper);\n }\n if (allowPrivilegedChanges && user.flagAdminConfigurator !== undefined) {\n utentiConfigUpdates.push('flgadminconfig = ?');\n utentiConfigParams.push(user.flagAdminConfigurator);\n }\n if (user.paginaDefault !== undefined) {\n utentiConfigUpdates.push('pagdef = ?');\n utentiConfigParams.push(user.paginaDefault);\n }\n if (user.jsonMetadata !== undefined) {\n utentiConfigUpdates.push('json_metadata = ?');\n utentiConfigParams.push(user.jsonMetadata);\n }\n if (user.ragSocCli !== undefined) {\n utentiConfigUpdates.push('ragsoccli = ?');\n utentiConfigParams.push(user.ragSocCli);\n }\n\n if (utentiConfigUpdates.length > 0) {\n const queryUtentiConfig = `UPDATE UTENTI_CONFIG SET ${utentiConfigUpdates.join(\n ', ',\n )} WHERE CODUTE = ?`;\n utentiConfigParams.push(codiceUtente);\n await Orm.execute(\n this.accessiOptions.databaseOptions,\n queryUtentiConfig,\n utentiConfigParams,\n );\n }\n\n if (allowPrivilegedChanges && !!user.roles && user.roles.length > 0) {\n await this.permissionService.assignRolesToUser(codiceUtente, user.roles);\n }\n\n if (allowPrivilegedChanges && !!user.permissions && user.permissions.length > 0) {\n await this.permissionService.assignPermissionsToUser(codiceUtente, user.permissions);\n }\n\n await this.filtriService.upsertFiltriUtente(codiceUtente, user);\n } catch (error) {\n throw error;\n }\n }\n\n async updateUserFilters(codiceUtente: number, user: UserDto): Promise<void> {\n try {\n if (!codiceUtente || codiceUtente <= 0) {\n throw new Error('Codice utente non valido');\n }\n\n const fieldMapping: Record<string, { dbField: string; type: 'string' | 'number' }> = {\n numRep: { dbField: 'NUMREP', type: 'number' },\n idxPers: { dbField: 'IDXPERS', type: 'number' },\n codCliSuper: { dbField: 'CODCLISUPER', type: 'number' },\n codAge: { dbField: 'CODAGE', type: 'number' },\n codCliCol: { dbField: 'CODCLICOL', type: 'number' },\n codiceClienti: { dbField: 'CODCLIENTI', type: 'string' },\n tipFil: { dbField: 'TIPFIL', type: 'number' },\n idxPostazione: { dbField: 'IDXPOS', type: 'number' },\n };\n\n const fieldsToUpdate = Object.entries(fieldMapping)\n .filter(([tsField]) => {\n const value = user[tsField as keyof UserDto];\n return value !== undefined && value !== null;\n })\n .map(([tsField, config]) => {\n const value = user[tsField as keyof UserDto];\n\n if (config.type === 'number' && typeof value !== 'number') {\n throw new Error(`Il campo ${tsField} deve essere un numero`);\n }\n if (config.type === 'string' && typeof value !== 'string') {\n throw new Error(`Il campo ${tsField} deve essere una stringa`);\n }\n\n return { tsField, dbField: config.dbField, value };\n });\n\n if (fieldsToUpdate.length === 0) {\n return;\n }\n\n await this.executeInTransaction(async () => {\n const checkQuery = `SELECT COUNT(*) as CNT FROM FILTRI WHERE CODUTE = ?`;\n const existingRecord = await Orm.query(this.accessiOptions.databaseOptions, checkQuery, [\n codiceUtente,\n ]);\n const exists = existingRecord[0].CNT > 0;\n\n if (exists) {\n const updates = fieldsToUpdate.map((f) => `${f.dbField} = ?`).join(', ');\n const values = [...fieldsToUpdate.map((f) => f.value), codiceUtente];\n const updateQuery = `UPDATE FILTRI SET ${updates} WHERE CODUTE = ?`;\n await Orm.execute(this.accessiOptions.databaseOptions, updateQuery, values);\n } else {\n const dbFields = ['CODUTE', ...fieldsToUpdate.map((f) => f.dbField)];\n const placeholders = dbFields.map(() => '?');\n const insertValues = [codiceUtente, ...fieldsToUpdate.map((f) => f.value)];\n const insertQuery = `INSERT INTO FILTRI (${dbFields.join(\n ', ',\n )}) VALUES (${placeholders.join(', ')})`;\n await Orm.execute(this.accessiOptions.databaseOptions, insertQuery, insertValues);\n }\n });\n } catch (error) {\n throw new Error(\n `Errore durante l'aggiornamento dei filtri per utente ${codiceUtente}: ${error.message}`,\n );\n }\n }\n\n async deleteUser(codiceCliente: number): Promise<void> {\n try {\n const query = `UPDATE UTENTI SET STAREG = ? WHERE CODUTE = ?`;\n await Orm.execute(this.accessiOptions.databaseOptions, query, [\n StatoRegistrazione.DELETE,\n codiceCliente,\n ]);\n } catch (error) {\n throw error;\n }\n }\n\n async setStato(codiceCliente: number, statoRegistrazione: StatoRegistrazione) {\n try {\n const query = `UPDATE UTENTI SET STAREG = ? WHERE CODUTE = ?`;\n await Orm.execute(this.accessiOptions.databaseOptions, query, [\n statoRegistrazione,\n codiceCliente,\n ]);\n } catch (error) {\n throw error;\n }\n }\n\n public async setGdpr(codiceUtente: number) {\n try {\n const query = ` UPDATE OR INSERT UTENTI_GDPR SET CODUTE = ?, GDPR = ? `;\n const params = [codiceUtente, true];\n return await Orm.execute(this.accessiOptions.databaseOptions, query, params);\n } catch (error) {\n throw error;\n }\n }\n}\n"]}
1
+ {"version":3,"file":"UserService.js","sourceRoot":"","sources":["../../../../src/accessi-module/Services/UserService/UserService.ts"],"names":[],"mappings":"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","sourcesContent":["import { Inject, Injectable } from '@nestjs/common';\r\nimport { autobind } from '../../../autobind';\r\nimport { Orm } from '../../../Orm';\r\nimport { RestUtilities } from '../../../Utilities';\r\nimport { AccessiOptions } from '../../AccessiModule';\r\nimport { FILTRI_UTENTE_DB_MAPPING, FiltriUtente } from '../../Dtos/FiltriUtente';\r\nimport { GetUsersResult } from '../../Dtos/GetUsersResponse';\r\nimport { RegisterRequest } from '../../Dtos/RegisterRequest';\r\nimport { StatoRegistrazione } from '../../Dtos/StatoRegistrazione';\r\nimport { UserDto } from '../../Dtos/UserDto';\r\nimport { AccessiAuthenticatedUserSnapshot } from '../../security/authenticatedToken';\r\nimport { EmailService } from '../EmailService/EmailService';\r\nimport { FiltriService } from '../FiltriService/FiltriService';\r\nimport { PermissionService } from '../PermissionService/PermissionService';\r\n\r\ninterface OptionalField<T> {\r\n key: keyof RegisterRequest;\r\n dbField: string;\r\n transform?: (value: any) => T;\r\n}\r\n\r\n@autobind\r\n@Injectable()\r\nexport class UserService {\r\n constructor(\r\n @Inject('ACCESSI_OPTIONS') private readonly accessiOptions: AccessiOptions,\r\n private readonly emailService: EmailService,\r\n private readonly permissionService: PermissionService,\r\n private readonly filtriService: FiltriService,\r\n ) {}\r\n\r\n private normalizeDatabaseBoolean(value: unknown): boolean {\r\n return value === true || value === 1 || value === '1';\r\n }\r\n\r\n private normalizeEmail(email: string): string {\r\n if (typeof email !== 'string' || email.trim() === '') {\r\n throw new Error(\"L'email e' obbligatoria.\");\r\n }\r\n\r\n return email.trim().toLowerCase();\r\n }\r\n\r\n private async ensureEmailIsAvailable(email: string, currentUserCode?: number): Promise<void> {\r\n const result = await Orm.query(\r\n this.accessiOptions.databaseOptions,\r\n 'SELECT FIRST 1 CODUTE as codice_utente FROM UTENTI WHERE LOWER(USRNAME) = ?',\r\n [email],\r\n );\r\n\r\n const existingUser = result.map(RestUtilities.convertKeysToCamelCase)[0] as\r\n | { codiceUtente?: number }\r\n | undefined;\r\n\r\n if (\r\n existingUser?.codiceUtente &&\r\n (!currentUserCode || existingUser.codiceUtente !== currentUserCode)\r\n ) {\r\n throw new Error(\"Questa e-mail e' gia stata utilizzata!\");\r\n }\r\n }\r\n\r\n async isAdminConfigurator(codiceUtente: number): Promise<boolean> {\r\n if (!codiceUtente) {\r\n return false;\r\n }\r\n\r\n const query = `SELECT FLGADMINCONFIG AS flag_admin_configurator FROM UTENTI_CONFIG WHERE CODUTE = ?`;\r\n const result = await Orm.query(this.accessiOptions.databaseOptions, query, [codiceUtente]);\r\n\r\n if (!result || result === 0) {\r\n return false;\r\n }\r\n\r\n const mapped = result.map(RestUtilities.convertKeysToCamelCase);\r\n const flagValue = mapped[0]?.flag_admin_configurator;\r\n\r\n if (typeof flagValue === 'boolean') {\r\n return flagValue;\r\n }\r\n\r\n return flagValue === 1;\r\n }\r\n\r\n async getAuthenticatedUserSnapshot(\r\n codiceUtente: number,\r\n ): Promise<AccessiAuthenticatedUserSnapshot | null> {\r\n if (!codiceUtente || codiceUtente <= 0) {\r\n return null;\r\n }\r\n\r\n const result = await Orm.query(\r\n this.accessiOptions.databaseOptions,\r\n `\r\n SELECT\r\n U.CODUTE AS codice_utente,\r\n U.USRNAME AS email,\r\n U.STAREG AS stato_registrazione,\r\n C.FLGSUPER AS flag_super,\r\n C.FLGADMINCONFIG AS flag_admin_configurator\r\n FROM UTENTI U\r\n LEFT JOIN UTENTI_CONFIG C ON C.CODUTE = U.CODUTE\r\n WHERE U.CODUTE = ?\r\n `,\r\n [codiceUtente],\r\n );\r\n\r\n const user = result.map(RestUtilities.convertKeysToCamelCase)[0] as\r\n | {\r\n codiceUtente?: number;\r\n email?: string;\r\n statoRegistrazione?: StatoRegistrazione | number;\r\n flagSuper?: unknown;\r\n flagAdminConfigurator?: unknown;\r\n }\r\n | undefined;\r\n\r\n if (!user?.codiceUtente) {\r\n return null;\r\n }\r\n\r\n return {\r\n codiceUtente: Number(user.codiceUtente),\r\n email: typeof user.email === 'string' ? user.email : undefined,\r\n statoRegistrazione: Number(user.statoRegistrazione) as StatoRegistrazione,\r\n flagSuper: this.normalizeDatabaseBoolean(user.flagSuper),\r\n flagAdminConfigurator: this.normalizeDatabaseBoolean(user.flagAdminConfigurator),\r\n };\r\n }\r\n\r\n async getUsers(\r\n filters?: { email?: string; codiceUtente?: number },\r\n options?: { includeExtensionFields: boolean; includeGrants: boolean },\r\n ): Promise<GetUsersResult[]> {\r\n try {\r\n let query = ` \r\n SELECT \r\n U.CODUTE as codice_utente, \r\n U.USRNAME as email, \r\n U.FLGGDPR as flag_gdpr, \r\n U.DATGDPR as data_gdpr, \r\n U.DATINS as data_inserimento, \r\n U.DATSCAPWD as data_scadenza_password, \r\n U.DATLASTLOGIN as data_last_login, \r\n U.STAREG as stato_registrazione, \r\n G.COGNOME as cognome, \r\n G.NOME as nome, \r\n G.AVATAR as avatar, \r\n G.FLG2FATT as flag_due_fattori, \r\n G.CODLINGUA as codice_lingua,\r\n G.CELLULARE as cellulare,\r\n G.FLGSUPER as flag_super, \r\n G.FLGADMINCONFIG as flag_admin_configurator,\r\n G.PAGDEF as pagina_default,\r\n G.JSON_METADATA as json_metadata,\r\n G.RAGSOCCLI as rag_soc_cli,\r\n G.NUMMAC as nummac,\r\n F.NUMREP AS num_rep,\r\n F.IDXPERS AS idx_pers,\r\n F.CODCLISUPER AS cod_cli_super,\r\n F.CODAGE AS cod_age,\r\n F.CODCLICOL AS cod_cli_col,\r\n F.CODCLIENTI AS cod_clienti,\r\n F.TIPFIL AS tip_fil,\r\n F.IDXPOS AS idx_postazione\r\n FROM UTENTI U \r\n INNER JOIN UTENTI_CONFIG G ON U.CODUTE = G.CODUTE\r\n LEFT JOIN FILTRI F ON F.CODUTE = U.CODUTE\r\n WHERE 1=1\r\n `;\r\n\r\n const queryParams: any[] = [];\r\n\r\n if (filters?.email) {\r\n query += ` AND LOWER(U.USRNAME) = ? `;\r\n queryParams.push(filters.email.trim().toLowerCase());\r\n }\r\n\r\n if (filters?.codiceUtente) {\r\n query += ` AND U.CODUTE = ? `;\r\n queryParams.push(filters.codiceUtente);\r\n }\r\n\r\n query += ` ORDER BY U.CODUTE DESC `;\r\n\r\n let users = (await Orm.query(\r\n this.accessiOptions.databaseOptions,\r\n query,\r\n queryParams,\r\n )) as UserDto[];\r\n users = users.map(RestUtilities.convertKeysToCamelCase);\r\n\r\n const usersResponse: GetUsersResult[] = [];\r\n\r\n for (const user of users) {\r\n let userGrants = null;\r\n\r\n if (options?.includeGrants) {\r\n userGrants = await this.permissionService.getUserRolesAndGrants(user.codiceUtente);\r\n }\r\n\r\n let extensionFields = options?.includeExtensionFields ? {} : null;\r\n\r\n if (options?.includeExtensionFields && this.accessiOptions.extensionFieldsOptions) {\r\n for (const ext of this.accessiOptions.extensionFieldsOptions) {\r\n const values = (\r\n await Orm.query(\r\n ext.databaseOptions,\r\n `SELECT ${ext.tableFields.join(',')} FROM ${ext.tableName} WHERE ${\r\n ext.tableJoinFieldName\r\n } = ?`,\r\n [user.codiceUtente],\r\n )\r\n ).map(RestUtilities.convertKeysToCamelCase);\r\n\r\n extensionFields[ext.objectKey] = values;\r\n }\r\n }\r\n\r\n usersResponse.push({\r\n utente: user,\r\n userGrants,\r\n extensionFields,\r\n });\r\n }\r\n\r\n return usersResponse;\r\n } catch (error) {\r\n throw error;\r\n }\r\n }\r\n\r\n async getCodiceUtenteByEmail(email: string): Promise<{ codiceUtente: number }> {\r\n try {\r\n const query = `SELECT CODUTE as codice_utente FROM UTENTI WHERE LOWER(USRNAME) = ?`;\r\n const result = await Orm.query(this.accessiOptions.databaseOptions, query, [\r\n email.trim().toLowerCase(),\r\n ]);\r\n return result.map(RestUtilities.convertKeysToCamelCase)[0];\r\n } catch (error) {\r\n throw error;\r\n }\r\n }\r\n\r\n async getUserByEmail(email: string): Promise<UserDto | null> {\r\n const query = `\r\n SELECT \r\n U.CODUTE AS codice_utente, \r\n U.USRNAME AS email, \r\n U.FLGGDPR AS flag_gdpr,\r\n U.DATSCAPWD as data_scadenza_password,\r\n U.STAREG AS stato_registrazione, \r\n C.COGNOME AS cognome, \r\n C.NOME AS nome, \r\n C.AVATAR AS avatar, \r\n C.FLG2FATT AS flag_due_fattori,\r\n C.CODLINGUA AS codice_lingua, \r\n C.CELLULARE AS cellulare, \r\n C.FLGSUPER AS flag_super,\r\n C.FLGADMINCONFIG AS flag_admin_configurator,\r\n C.PAGDEF AS pagina_default,\r\n C.NUMMAC AS nummac,\r\n C.RAGSOCCLI AS rag_soc_cli\r\n FROM UTENTI U\r\n INNER JOIN UTENTI_CONFIG C ON C.CODUTE = U.CODUTE\r\n WHERE LOWER(U.USRNAME) = ?\r\n `;\r\n\r\n const utenti = (await Orm.query(this.accessiOptions.databaseOptions, query, [email]).then(\r\n (results) => results.map(RestUtilities.convertKeysToCamelCase),\r\n )) as UserDto[];\r\n\r\n const filtriUtente = await this.filtriService.getFiltriUser(utenti[0]?.codiceUtente);\r\n\r\n if (utenti.length <= 0) {\r\n return null;\r\n }\r\n\r\n if (utenti.length > 0 && filtriUtente.length > 0) {\r\n const user = utenti[0];\r\n const filtro = filtriUtente[0];\r\n\r\n Object.entries(FILTRI_UTENTE_DB_MAPPING).forEach(([key]) => {\r\n if (key in filtro) {\r\n (user as UserDto)[key] = filtro[key as keyof FiltriUtente];\r\n }\r\n });\r\n }\r\n\r\n return utenti.length > 0 ? utenti[0] : null;\r\n }\r\n\r\n async insertUserFilters(codiceUtente: number, filterData: RegisterRequest): Promise<void> {\r\n try {\r\n if (!codiceUtente || codiceUtente <= 0) {\r\n throw new Error('Codice utente non valido');\r\n }\r\n\r\n const fieldMapping: Record<string, { dbField: string; type: 'string' | 'number' }> = {\r\n numeroReport: { dbField: 'NUMREP', type: 'number' },\r\n indicePersonale: { dbField: 'IDXPERS', type: 'number' },\r\n codiceClienteSuper: { dbField: 'CODCLISUPER', type: 'number' },\r\n codAge: { dbField: 'CODAGE', type: 'number' },\r\n codiceClienteCollegato: { dbField: 'CODCLICOL', type: 'number' },\r\n codiceClienti: { dbField: 'CODCLIENTI', type: 'string' },\r\n tipFil: { dbField: 'TIPFIL', type: 'number' },\r\n idxPostazione: { dbField: 'IDXPOS', type: 'number' },\r\n };\r\n\r\n const fieldsToInsert = Object.entries(fieldMapping)\r\n .filter(([tsField]) => {\r\n const value = filterData[tsField as keyof RegisterRequest];\r\n return value !== undefined && value !== null && value !== '';\r\n })\r\n .map(([tsField, config]) => {\r\n const value = filterData[tsField as keyof RegisterRequest];\r\n\r\n if (config.type === 'number' && typeof value !== 'number') {\r\n throw new Error(`Il campo ${tsField} deve essere un numero`);\r\n }\r\n if (config.type === 'string' && typeof value !== 'string') {\r\n throw new Error(`Il campo ${tsField} deve essere una stringa`);\r\n }\r\n\r\n return { tsField, dbField: config.dbField, value };\r\n });\r\n\r\n if (fieldsToInsert.length === 0) {\r\n return;\r\n }\r\n\r\n await this.executeInTransaction(async () => {\r\n await Orm.execute(\r\n this.accessiOptions.databaseOptions,\r\n 'DELETE FROM FILTRI WHERE CODUTE = ?',\r\n [codiceUtente],\r\n );\r\n\r\n const dbFields = ['CODUTE', ...fieldsToInsert.map((f) => f.dbField)];\r\n const placeholders = dbFields.map(() => '?');\r\n const values = [codiceUtente, ...fieldsToInsert.map((f) => f.value)];\r\n\r\n const insertQuery = `INSERT INTO FILTRI (${dbFields.join(\r\n ', ',\r\n )}) VALUES (${placeholders.join(', ')})`;\r\n await Orm.execute(this.accessiOptions.databaseOptions, insertQuery, values);\r\n });\r\n } catch (error) {\r\n throw new Error(\r\n `Errore durante l'inserimento dei filtri per utente ${codiceUtente}: ${error.message}`,\r\n );\r\n }\r\n }\r\n\r\n private async executeInTransaction(operation: () => Promise<void>): Promise<void> {\r\n await operation();\r\n }\r\n\r\n async register(\r\n registrationData: RegisterRequest,\r\n options?: { allowPrivilegedFields?: boolean },\r\n ): Promise<number> {\r\n try {\r\n const allowPrivilegedFields = options?.allowPrivilegedFields === true;\r\n const normalizedEmail = this.normalizeEmail(registrationData.email);\r\n\r\n if (\r\n !allowPrivilegedFields &&\r\n (registrationData.flagSuper !== undefined ||\r\n registrationData.flagAdminConfigurator !== undefined ||\r\n registrationData.roles !== undefined ||\r\n registrationData.permissions !== undefined)\r\n ) {\r\n throw new Error('I campi privilegiati non sono consentiti nella registrazione pubblica.');\r\n }\r\n\r\n await this.ensureEmailIsAvailable(normalizedEmail);\r\n\r\n const queryUtenti = `INSERT INTO UTENTI (USRNAME, STAREG) VALUES (?,?)`;\r\n const paramsUtenti = [normalizedEmail, StatoRegistrazione.INVIO];\r\n\r\n await Orm.execute(this.accessiOptions.databaseOptions, queryUtenti, paramsUtenti);\r\n\r\n const codiceUtenteResult = await Orm.query(\r\n this.accessiOptions.databaseOptions,\r\n 'SELECT FIRST 1 CODUTE FROM UTENTI WHERE USRNAME = ? ORDER BY CODUTE DESC',\r\n [normalizedEmail],\r\n );\r\n\r\n const codiceUtente = Number(\r\n codiceUtenteResult?.[0]?.CODUTE ?? codiceUtenteResult?.[0]?.codute,\r\n );\r\n if (!codiceUtente) {\r\n throw new Error('Creazione utente non riuscita: impossibile recuperare CODUTE.');\r\n }\r\n\r\n const utentiConfigFields = ['CODUTE', 'COGNOME', 'NOME'];\r\n const utentiConfigPlaceholders = ['?', '?', '?'];\r\n const utentiConfigParams = [codiceUtente, registrationData.cognome, registrationData.nome];\r\n\r\n const optionalFields: OptionalField<any>[] = [\r\n {\r\n key: 'cellulare',\r\n dbField: 'CELLULARE',\r\n transform: (v) => String(v),\r\n },\r\n {\r\n key: 'avatar',\r\n dbField: 'AVATAR',\r\n transform: (v) => String(v),\r\n },\r\n {\r\n key: 'flagDueFattori',\r\n dbField: 'FLG2FATT',\r\n transform: (v) => (v ? 1 : 0),\r\n },\r\n {\r\n key: 'paginaDefault',\r\n dbField: 'PAGDEF',\r\n transform: (v) => String(v),\r\n },\r\n {\r\n key: 'nummac',\r\n dbField: 'NUMMAC',\r\n transform: (v) => Number(v),\r\n },\r\n {\r\n key: 'ragSocCli',\r\n dbField: 'RAGSOCCLI',\r\n transform: (v) => String(v),\r\n },\r\n ];\r\n\r\n if (allowPrivilegedFields) {\r\n optionalFields.push(\r\n {\r\n key: 'flagSuper',\r\n dbField: 'FLGSUPER',\r\n transform: (v) => (v ? 1 : 0),\r\n },\r\n {\r\n key: 'flagAdminConfigurator',\r\n dbField: 'FLGADMINCONFIG',\r\n transform: (v) => (v ? 1 : 0),\r\n },\r\n );\r\n }\r\n\r\n for (const field of optionalFields) {\r\n const value = registrationData[field.key];\r\n if (value !== undefined && value !== null) {\r\n utentiConfigFields.push(field.dbField);\r\n utentiConfigPlaceholders.push('?');\r\n utentiConfigParams.push(field.transform ? field.transform(value) : value);\r\n }\r\n }\r\n\r\n const queryUtentiConfig = `INSERT INTO UTENTI_CONFIG (${utentiConfigFields.join(\r\n ', ',\r\n )}) VALUES (${utentiConfigPlaceholders.join(', ')})`;\r\n await Orm.execute(this.accessiOptions.databaseOptions, queryUtentiConfig, utentiConfigParams);\r\n\r\n await this.filtriService.upsertFiltriUtente(codiceUtente, registrationData);\r\n\r\n if (allowPrivilegedFields && !!registrationData.roles && registrationData.roles.length > 0) {\r\n await this.permissionService.assignRolesToUser(codiceUtente, registrationData.roles);\r\n }\r\n\r\n if (\r\n allowPrivilegedFields &&\r\n !!registrationData.permissions &&\r\n registrationData.permissions.length > 0\r\n ) {\r\n await this.permissionService.assignPermissionsToUser(\r\n codiceUtente,\r\n registrationData.permissions,\r\n );\r\n }\r\n\r\n return codiceUtente;\r\n } catch (error) {\r\n throw error;\r\n }\r\n }\r\n\r\n async updateUser(\r\n codiceUtente: number,\r\n user: UserDto,\r\n options?: { allowPrivilegedChanges?: boolean },\r\n ): Promise<void> {\r\n try {\r\n if (!codiceUtente) throw new Error('Impossibile aggiornare senza codice utente.');\r\n const allowPrivilegedChanges = options?.allowPrivilegedChanges === true;\r\n\r\n if (\r\n !allowPrivilegedChanges &&\r\n (user.statoRegistrazione !== undefined ||\r\n user.flagSuper !== undefined ||\r\n user.flagAdminConfigurator !== undefined ||\r\n user.roles !== undefined ||\r\n user.permissions !== undefined)\r\n ) {\r\n throw new Error('Non e consentito modificare campi privilegiati.');\r\n }\r\n\r\n const utentiUpdates = [];\r\n const utentiParams = [];\r\n\r\n if (user.email !== undefined) {\r\n const normalizedEmail = this.normalizeEmail(user.email);\r\n await this.ensureEmailIsAvailable(normalizedEmail, codiceUtente);\r\n utentiUpdates.push('usrname = ?');\r\n utentiParams.push(normalizedEmail);\r\n }\r\n if (user.flagGdpr !== undefined) {\r\n utentiUpdates.push('flggdpr = ?');\r\n utentiParams.push(user.flagGdpr);\r\n }\r\n if (allowPrivilegedChanges && user.statoRegistrazione !== undefined) {\r\n utentiUpdates.push('stareg = ?');\r\n utentiParams.push(user.statoRegistrazione);\r\n }\r\n\r\n if (utentiUpdates.length > 0) {\r\n const queryUtenti = `UPDATE UTENTI SET ${utentiUpdates.join(', ')} WHERE CODUTE = ?`;\r\n utentiParams.push(codiceUtente);\r\n await Orm.execute(this.accessiOptions.databaseOptions, queryUtenti, utentiParams);\r\n }\r\n\r\n const utentiConfigUpdates = [];\r\n const utentiConfigParams = [];\r\n\r\n if (user.cognome !== undefined) {\r\n utentiConfigUpdates.push('cognome = ?');\r\n utentiConfigParams.push(user.cognome);\r\n }\r\n if (user.nome !== undefined) {\r\n utentiConfigUpdates.push('nome = ?');\r\n utentiConfigParams.push(user.nome);\r\n }\r\n if (user.avatar !== undefined) {\r\n utentiConfigUpdates.push('avatar = ?');\r\n utentiConfigParams.push(user.avatar);\r\n }\r\n if (user.flagDueFattori !== undefined) {\r\n utentiConfigUpdates.push('flg2fatt = ?');\r\n utentiConfigParams.push(user.flagDueFattori);\r\n }\r\n if (user.codiceLingua !== undefined) {\r\n utentiConfigUpdates.push('codlingua = ?');\r\n utentiConfigParams.push(user.codiceLingua);\r\n }\r\n if (user.cellulare !== undefined) {\r\n utentiConfigUpdates.push('cellulare = ?');\r\n utentiConfigParams.push(user.cellulare);\r\n }\r\n if (allowPrivilegedChanges && user.flagSuper !== undefined) {\r\n utentiConfigUpdates.push('flgsuper = ?');\r\n utentiConfigParams.push(user.flagSuper);\r\n }\r\n if (allowPrivilegedChanges && user.flagAdminConfigurator !== undefined) {\r\n utentiConfigUpdates.push('flgadminconfig = ?');\r\n utentiConfigParams.push(user.flagAdminConfigurator);\r\n }\r\n if (user.paginaDefault !== undefined) {\r\n utentiConfigUpdates.push('pagdef = ?');\r\n utentiConfigParams.push(user.paginaDefault);\r\n }\r\n if (user.jsonMetadata !== undefined) {\r\n utentiConfigUpdates.push('json_metadata = ?');\r\n utentiConfigParams.push(user.jsonMetadata);\r\n }\r\n if (user.ragSocCli !== undefined) {\r\n utentiConfigUpdates.push('ragsoccli = ?');\r\n utentiConfigParams.push(user.ragSocCli);\r\n }\r\n\r\n if (utentiConfigUpdates.length > 0) {\r\n const queryUtentiConfig = `UPDATE UTENTI_CONFIG SET ${utentiConfigUpdates.join(\r\n ', ',\r\n )} WHERE CODUTE = ?`;\r\n utentiConfigParams.push(codiceUtente);\r\n await Orm.execute(\r\n this.accessiOptions.databaseOptions,\r\n queryUtentiConfig,\r\n utentiConfigParams,\r\n );\r\n }\r\n\r\n if (allowPrivilegedChanges && !!user.roles && user.roles.length > 0) {\r\n await this.permissionService.assignRolesToUser(codiceUtente, user.roles);\r\n }\r\n\r\n if (allowPrivilegedChanges && !!user.permissions && user.permissions.length > 0) {\r\n await this.permissionService.assignPermissionsToUser(codiceUtente, user.permissions);\r\n }\r\n\r\n await this.filtriService.upsertFiltriUtente(codiceUtente, user);\r\n } catch (error) {\r\n throw error;\r\n }\r\n }\r\n\r\n async updateUserFilters(codiceUtente: number, user: UserDto): Promise<void> {\r\n try {\r\n if (!codiceUtente || codiceUtente <= 0) {\r\n throw new Error('Codice utente non valido');\r\n }\r\n\r\n const fieldMapping: Record<string, { dbField: string; type: 'string' | 'number' }> = {\r\n numRep: { dbField: 'NUMREP', type: 'number' },\r\n idxPers: { dbField: 'IDXPERS', type: 'number' },\r\n codCliSuper: { dbField: 'CODCLISUPER', type: 'number' },\r\n codAge: { dbField: 'CODAGE', type: 'number' },\r\n codCliCol: { dbField: 'CODCLICOL', type: 'number' },\r\n codiceClienti: { dbField: 'CODCLIENTI', type: 'string' },\r\n tipFil: { dbField: 'TIPFIL', type: 'number' },\r\n idxPostazione: { dbField: 'IDXPOS', type: 'number' },\r\n };\r\n\r\n const fieldsToUpdate = Object.entries(fieldMapping)\r\n .filter(([tsField]) => {\r\n const value = user[tsField as keyof UserDto];\r\n return value !== undefined && value !== null;\r\n })\r\n .map(([tsField, config]) => {\r\n const value = user[tsField as keyof UserDto];\r\n\r\n if (config.type === 'number' && typeof value !== 'number') {\r\n throw new Error(`Il campo ${tsField} deve essere un numero`);\r\n }\r\n if (config.type === 'string' && typeof value !== 'string') {\r\n throw new Error(`Il campo ${tsField} deve essere una stringa`);\r\n }\r\n\r\n return { tsField, dbField: config.dbField, value };\r\n });\r\n\r\n if (fieldsToUpdate.length === 0) {\r\n return;\r\n }\r\n\r\n await this.executeInTransaction(async () => {\r\n const checkQuery = `SELECT COUNT(*) as CNT FROM FILTRI WHERE CODUTE = ?`;\r\n const existingRecord = await Orm.query(this.accessiOptions.databaseOptions, checkQuery, [\r\n codiceUtente,\r\n ]);\r\n const exists = existingRecord[0].CNT > 0;\r\n\r\n if (exists) {\r\n const updates = fieldsToUpdate.map((f) => `${f.dbField} = ?`).join(', ');\r\n const values = [...fieldsToUpdate.map((f) => f.value), codiceUtente];\r\n const updateQuery = `UPDATE FILTRI SET ${updates} WHERE CODUTE = ?`;\r\n await Orm.execute(this.accessiOptions.databaseOptions, updateQuery, values);\r\n } else {\r\n const dbFields = ['CODUTE', ...fieldsToUpdate.map((f) => f.dbField)];\r\n const placeholders = dbFields.map(() => '?');\r\n const insertValues = [codiceUtente, ...fieldsToUpdate.map((f) => f.value)];\r\n const insertQuery = `INSERT INTO FILTRI (${dbFields.join(\r\n ', ',\r\n )}) VALUES (${placeholders.join(', ')})`;\r\n await Orm.execute(this.accessiOptions.databaseOptions, insertQuery, insertValues);\r\n }\r\n });\r\n } catch (error) {\r\n throw new Error(\r\n `Errore durante l'aggiornamento dei filtri per utente ${codiceUtente}: ${error.message}`,\r\n );\r\n }\r\n }\r\n\r\n async deleteUser(codiceCliente: number): Promise<void> {\r\n try {\r\n const query = `UPDATE UTENTI SET STAREG = ? WHERE CODUTE = ?`;\r\n await Orm.execute(this.accessiOptions.databaseOptions, query, [\r\n StatoRegistrazione.DELETE,\r\n codiceCliente,\r\n ]);\r\n } catch (error) {\r\n throw error;\r\n }\r\n }\r\n\r\n async setStato(codiceCliente: number, statoRegistrazione: StatoRegistrazione) {\r\n try {\r\n const query = `UPDATE UTENTI SET STAREG = ? WHERE CODUTE = ?`;\r\n await Orm.execute(this.accessiOptions.databaseOptions, query, [\r\n statoRegistrazione,\r\n codiceCliente,\r\n ]);\r\n } catch (error) {\r\n throw error;\r\n }\r\n }\r\n\r\n public async setGdpr(codiceUtente: number) {\r\n try {\r\n const query = ` UPDATE OR INSERT UTENTI_GDPR SET CODUTE = ?, GDPR = ? `;\r\n const params = [codiceUtente, true];\r\n return await Orm.execute(this.accessiOptions.databaseOptions, query, params);\r\n } catch (error) {\r\n throw error;\r\n }\r\n }\r\n}\r\n"]}