@javalabs/prisma-client 1.0.26 → 1.0.29

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 (170) hide show
  1. package/.github/CODEOWNERS +1 -1
  2. package/README.md +269 -269
  3. package/migration-config.json +63 -63
  4. package/migration-config.json.bk +95 -95
  5. package/migrations/add_reserved_amount.sql +7 -7
  6. package/package.json +44 -44
  7. package/prisma/migrations/add_uuid_to_transactions.sql +13 -13
  8. package/prisma/schema.prisma +609 -607
  9. package/src/index.ts +23 -23
  10. package/src/prisma-factory.service.ts +40 -40
  11. package/src/prisma.module.ts +9 -9
  12. package/src/prisma.service.ts +16 -16
  13. package/src/scripts/add-uuid-to-table.ts +138 -138
  14. package/src/scripts/create-tenant-schemas.ts +145 -145
  15. package/src/scripts/data-migration/batch-migrator.ts +248 -248
  16. package/src/scripts/data-migration/data-transformer.ts +426 -426
  17. package/src/scripts/data-migration/db-connector.ts +120 -120
  18. package/src/scripts/data-migration/dependency-resolver.ts +174 -174
  19. package/src/scripts/data-migration/entity-discovery.ts +196 -196
  20. package/src/scripts/data-migration/foreign-key-manager.ts +277 -277
  21. package/src/scripts/data-migration/migration-config.json +63 -63
  22. package/src/scripts/data-migration/migration-tool.ts +509 -509
  23. package/src/scripts/data-migration/schema-utils.ts +248 -248
  24. package/src/scripts/data-migration/tenant-migrator.ts +201 -201
  25. package/src/scripts/data-migration/typecast-manager.ts +193 -193
  26. package/src/scripts/data-migration/types.ts +113 -113
  27. package/src/scripts/database-initializer.ts +49 -49
  28. package/src/scripts/drop-database.ts +104 -104
  29. package/src/scripts/dump-source-db.sh +61 -61
  30. package/src/scripts/encrypt-user-passwords.ts +36 -36
  31. package/src/scripts/error-handler.ts +117 -117
  32. package/src/scripts/fix-data-types.ts +241 -241
  33. package/src/scripts/fix-enum-values.ts +357 -357
  34. package/src/scripts/fix-schema-discrepancies.ts +317 -317
  35. package/src/scripts/fix-table-indexes.ts +601 -601
  36. package/src/scripts/migrate-schema-structure.ts +90 -90
  37. package/src/scripts/migrate-uuid.ts +76 -76
  38. package/src/scripts/post-migration-validator.ts +526 -526
  39. package/src/scripts/pre-migration-validator.ts +610 -610
  40. package/src/scripts/reset-database.ts +263 -263
  41. package/src/scripts/retry-failed-migrations.ts +416 -416
  42. package/src/scripts/run-migration.ts +707 -707
  43. package/src/scripts/schema-sync.ts +128 -128
  44. package/src/scripts/sequence-sync-cli.ts +416 -416
  45. package/src/scripts/sequence-synchronizer.ts +127 -127
  46. package/src/scripts/sync-enum-types.ts +170 -170
  47. package/src/scripts/sync-enum-values.ts +563 -563
  48. package/src/scripts/truncate-database.ts +123 -123
  49. package/src/scripts/verify-migration-setup.ts +135 -135
  50. package/tsconfig.json +17 -17
  51. package/dist/index.d.ts +0 -7
  52. package/dist/index.js +0 -34
  53. package/dist/index.js.map +0 -1
  54. package/dist/prisma-factory.service.d.ts +0 -9
  55. package/dist/prisma-factory.service.js +0 -47
  56. package/dist/prisma-factory.service.js.map +0 -1
  57. package/dist/prisma.module.d.ts +0 -2
  58. package/dist/prisma.module.js +0 -23
  59. package/dist/prisma.module.js.map +0 -1
  60. package/dist/prisma.service.d.ts +0 -6
  61. package/dist/prisma.service.js +0 -27
  62. package/dist/prisma.service.js.map +0 -1
  63. package/dist/scripts/add-uuid-to-table.d.ts +0 -8
  64. package/dist/scripts/add-uuid-to-table.js +0 -98
  65. package/dist/scripts/add-uuid-to-table.js.map +0 -1
  66. package/dist/scripts/create-tenant-schemas.d.ts +0 -1
  67. package/dist/scripts/create-tenant-schemas.js +0 -117
  68. package/dist/scripts/create-tenant-schemas.js.map +0 -1
  69. package/dist/scripts/data-migration/batch-migrator.d.ts +0 -20
  70. package/dist/scripts/data-migration/batch-migrator.js +0 -134
  71. package/dist/scripts/data-migration/batch-migrator.js.map +0 -1
  72. package/dist/scripts/data-migration/data-transformer.d.ts +0 -26
  73. package/dist/scripts/data-migration/data-transformer.js +0 -278
  74. package/dist/scripts/data-migration/data-transformer.js.map +0 -1
  75. package/dist/scripts/data-migration/db-connector.d.ts +0 -12
  76. package/dist/scripts/data-migration/db-connector.js +0 -94
  77. package/dist/scripts/data-migration/db-connector.js.map +0 -1
  78. package/dist/scripts/data-migration/dependency-resolver.d.ts +0 -18
  79. package/dist/scripts/data-migration/dependency-resolver.js +0 -132
  80. package/dist/scripts/data-migration/dependency-resolver.js.map +0 -1
  81. package/dist/scripts/data-migration/entity-discovery.d.ts +0 -11
  82. package/dist/scripts/data-migration/entity-discovery.js +0 -152
  83. package/dist/scripts/data-migration/entity-discovery.js.map +0 -1
  84. package/dist/scripts/data-migration/foreign-key-manager.d.ts +0 -18
  85. package/dist/scripts/data-migration/foreign-key-manager.js +0 -160
  86. package/dist/scripts/data-migration/foreign-key-manager.js.map +0 -1
  87. package/dist/scripts/data-migration/migration-tool.d.ts +0 -48
  88. package/dist/scripts/data-migration/migration-tool.js +0 -290
  89. package/dist/scripts/data-migration/migration-tool.js.map +0 -1
  90. package/dist/scripts/data-migration/schema-utils.d.ts +0 -18
  91. package/dist/scripts/data-migration/schema-utils.js +0 -207
  92. package/dist/scripts/data-migration/schema-utils.js.map +0 -1
  93. package/dist/scripts/data-migration/tenant-migrator.d.ts +0 -15
  94. package/dist/scripts/data-migration/tenant-migrator.js +0 -117
  95. package/dist/scripts/data-migration/tenant-migrator.js.map +0 -1
  96. package/dist/scripts/data-migration/typecast-manager.d.ts +0 -9
  97. package/dist/scripts/data-migration/typecast-manager.js +0 -179
  98. package/dist/scripts/data-migration/typecast-manager.js.map +0 -1
  99. package/dist/scripts/data-migration/types.d.ts +0 -100
  100. package/dist/scripts/data-migration/types.js +0 -3
  101. package/dist/scripts/data-migration/types.js.map +0 -1
  102. package/dist/scripts/database-initializer.d.ts +0 -5
  103. package/dist/scripts/database-initializer.js +0 -45
  104. package/dist/scripts/database-initializer.js.map +0 -1
  105. package/dist/scripts/drop-database.d.ts +0 -10
  106. package/dist/scripts/drop-database.js +0 -81
  107. package/dist/scripts/drop-database.js.map +0 -1
  108. package/dist/scripts/encrypt-user-passwords.d.ts +0 -1
  109. package/dist/scripts/encrypt-user-passwords.js +0 -33
  110. package/dist/scripts/encrypt-user-passwords.js.map +0 -1
  111. package/dist/scripts/error-handler.d.ts +0 -12
  112. package/dist/scripts/error-handler.js +0 -82
  113. package/dist/scripts/error-handler.js.map +0 -1
  114. package/dist/scripts/fix-data-types.d.ts +0 -10
  115. package/dist/scripts/fix-data-types.js +0 -185
  116. package/dist/scripts/fix-data-types.js.map +0 -1
  117. package/dist/scripts/fix-enum-values.d.ts +0 -17
  118. package/dist/scripts/fix-enum-values.js +0 -234
  119. package/dist/scripts/fix-enum-values.js.map +0 -1
  120. package/dist/scripts/fix-schema-discrepancies.d.ts +0 -21
  121. package/dist/scripts/fix-schema-discrepancies.js +0 -240
  122. package/dist/scripts/fix-schema-discrepancies.js.map +0 -1
  123. package/dist/scripts/fix-table-indexes.d.ts +0 -26
  124. package/dist/scripts/fix-table-indexes.js +0 -460
  125. package/dist/scripts/fix-table-indexes.js.map +0 -1
  126. package/dist/scripts/migrate-schema-structure.d.ts +0 -1
  127. package/dist/scripts/migrate-schema-structure.js +0 -76
  128. package/dist/scripts/migrate-schema-structure.js.map +0 -1
  129. package/dist/scripts/migrate-uuid.d.ts +0 -2
  130. package/dist/scripts/migrate-uuid.js +0 -57
  131. package/dist/scripts/migrate-uuid.js.map +0 -1
  132. package/dist/scripts/post-migration-validator.d.ts +0 -34
  133. package/dist/scripts/post-migration-validator.js +0 -363
  134. package/dist/scripts/post-migration-validator.js.map +0 -1
  135. package/dist/scripts/pre-migration-validator.d.ts +0 -25
  136. package/dist/scripts/pre-migration-validator.js +0 -491
  137. package/dist/scripts/pre-migration-validator.js.map +0 -1
  138. package/dist/scripts/reset-database.d.ts +0 -17
  139. package/dist/scripts/reset-database.js +0 -202
  140. package/dist/scripts/reset-database.js.map +0 -1
  141. package/dist/scripts/retry-failed-migrations.d.ts +0 -14
  142. package/dist/scripts/retry-failed-migrations.js +0 -301
  143. package/dist/scripts/retry-failed-migrations.js.map +0 -1
  144. package/dist/scripts/run-migration.d.ts +0 -1
  145. package/dist/scripts/run-migration.js +0 -512
  146. package/dist/scripts/run-migration.js.map +0 -1
  147. package/dist/scripts/schema-sync.d.ts +0 -1
  148. package/dist/scripts/schema-sync.js +0 -85
  149. package/dist/scripts/schema-sync.js.map +0 -1
  150. package/dist/scripts/sequence-sync-cli.d.ts +0 -2
  151. package/dist/scripts/sequence-sync-cli.js +0 -287
  152. package/dist/scripts/sequence-sync-cli.js.map +0 -1
  153. package/dist/scripts/sequence-synchronizer.d.ts +0 -8
  154. package/dist/scripts/sequence-synchronizer.js +0 -88
  155. package/dist/scripts/sequence-synchronizer.js.map +0 -1
  156. package/dist/scripts/sync-enum-types.d.ts +0 -13
  157. package/dist/scripts/sync-enum-types.js +0 -139
  158. package/dist/scripts/sync-enum-types.js.map +0 -1
  159. package/dist/scripts/sync-enum-values.d.ts +0 -20
  160. package/dist/scripts/sync-enum-values.js +0 -336
  161. package/dist/scripts/sync-enum-values.js.map +0 -1
  162. package/dist/scripts/truncate-database.d.ts +0 -10
  163. package/dist/scripts/truncate-database.js +0 -100
  164. package/dist/scripts/truncate-database.js.map +0 -1
  165. package/dist/scripts/verify-migration-setup.d.ts +0 -11
  166. package/dist/scripts/verify-migration-setup.js +0 -120
  167. package/dist/scripts/verify-migration-setup.js.map +0 -1
  168. package/dist/tsconfig.tsbuildinfo +0 -1
  169. package/prisma/migrations/add_athena_match_fields.sql +0 -18
  170. package/prisma/migrations/add_bank_receipt_number.sql +0 -9
@@ -1,336 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.EnumValueSynchronizer = void 0;
4
- const common_1 = require("@nestjs/common");
5
- const pg_1 = require("pg");
6
- const path = require("path");
7
- const fs = require("fs");
8
- const dotenv = require("dotenv");
9
- dotenv.config();
10
- class EnumValueSynchronizer {
11
- constructor(sourceUrl = process.env.SOURCE_DATABASE_URL, targetUrl = process.env.DATABASE_URL) {
12
- this.sourceUrl = sourceUrl;
13
- this.targetUrl = targetUrl;
14
- this.logger = new common_1.Logger("EnumValueSynchronizer");
15
- this.enumMappings = {
16
- enum_credit_requests_status: "enum_transaction_status",
17
- enum_global_user_transactions_status: "enum_transaction_status",
18
- enum_global_user_transactions_transaction_type: "enum_transaction_type",
19
- enum_invoices_status: "enum_transaction_status",
20
- enum_payin_status: "enum_transaction_status",
21
- enum_payout_status: "enum_transaction_status",
22
- enum_pending_references_status: "enum_transaction_status",
23
- enum_toku_status: "enum_transaction_status",
24
- enum_transaction_updates_new_status: "enum_transaction_status",
25
- enum_transactions_account_type: "enum_account_type",
26
- enum_transactions_status: "enum_transaction_status",
27
- enum_transactions_transaction_type: "enum_transaction_type",
28
- enum_transactions_typetransaction: "enum_transaction_type",
29
- enum_transactions_user_type_account: "enum_account_type",
30
- enum_transactions_usertypeaccount: "enum_account_type",
31
- };
32
- this.valueNormalizationMap = {
33
- enum_transaction_status: {
34
- PENDING: "PENDING",
35
- pending: "PENDING",
36
- COMPLETED: "COMPLETED",
37
- completed: "COMPLETED",
38
- FAILED: "FAILED",
39
- failed: "FAILED",
40
- PROCESSING: "PROCESSING",
41
- processing: "PROCESSING",
42
- CANCELLED: "CANCELLED",
43
- cancelled: "CANCELLED",
44
- canceled: "CANCELLED",
45
- CANCELED: "CANCELLED",
46
- REJECTED: "REJECTED",
47
- rejected: "REJECTED",
48
- APPROVED: "APPROVED",
49
- approved: "APPROVED",
50
- EXPIRED: "EXPIRED",
51
- expired: "EXPIRED",
52
- REFUNDED: "REFUNDED",
53
- refunded: "REFUNDED",
54
- PARTIAL_REFUND: "PARTIAL_REFUND",
55
- partial_refund: "PARTIAL_REFUND",
56
- },
57
- enum_transaction_type: {
58
- DEPOSIT: "DEPOSIT",
59
- deposit: "DEPOSIT",
60
- WITHDRAWAL: "WITHDRAWAL",
61
- withdrawal: "WITHDRAWAL",
62
- TRANSFER: "TRANSFER",
63
- transfer: "TRANSFER",
64
- PAYMENT: "PAYMENT",
65
- payment: "PAYMENT",
66
- REFUND: "REFUND",
67
- refund: "REFUND",
68
- FEE: "FEE",
69
- fee: "FEE",
70
- ADJUSTMENT: "ADJUSTMENT",
71
- adjustment: "ADJUSTMENT",
72
- },
73
- enum_account_type: {
74
- PERSONAL: "PERSONAL",
75
- personal: "PERSONAL",
76
- BUSINESS: "BUSINESS",
77
- business: "BUSINESS",
78
- MERCHANT: "MERCHANT",
79
- merchant: "MERCHANT",
80
- PLATFORM: "PLATFORM",
81
- platform: "PLATFORM",
82
- },
83
- };
84
- this.enumValuesCache = {};
85
- this.pool = new pg_1.Pool({
86
- connectionString: this.targetUrl,
87
- });
88
- }
89
- async synchronizeEnumValues() {
90
- try {
91
- this.logger.log("Iniciando sincronización de valores de enum");
92
- const logsDir = path.join(process.cwd(), "migration-logs");
93
- if (!fs.existsSync(logsDir)) {
94
- fs.mkdirSync(logsDir, { recursive: true });
95
- }
96
- const enumsResult = await this.pool.query(`
97
- SELECT t.typname AS enum_name
98
- FROM pg_type t
99
- JOIN pg_namespace n ON t.typnamespace = n.oid
100
- WHERE t.typtype = 'e' -- enum types
101
- AND n.nspname = 'public'
102
- ORDER BY t.typname
103
- `);
104
- this.logger.log(`Encontrados ${enumsResult.rows.length} tipos enum en la base de datos`);
105
- for (const [specificEnum, consolidatedEnum] of Object.entries(this.enumMappings)) {
106
- await this.synchronizeSpecificEnum(specificEnum, consolidatedEnum);
107
- }
108
- await this.normalizeEnumValuesInTables();
109
- this.logger.log("Sincronización de valores de enum completada con éxito");
110
- }
111
- catch (error) {
112
- this.logger.error(`Error durante la sincronización de valores de enum: ${error.message}`, error.stack);
113
- throw error;
114
- }
115
- finally {
116
- await this.pool.end();
117
- }
118
- }
119
- async synchronizeSpecificEnum(specificEnum, consolidatedEnum) {
120
- try {
121
- this.logger.log(`Sincronizando valores entre ${specificEnum} y ${consolidatedEnum}`);
122
- const specificEnumExists = await this.enumExists(specificEnum);
123
- const consolidatedEnumExists = await this.enumExists(consolidatedEnum);
124
- if (!specificEnumExists || !consolidatedEnumExists) {
125
- this.logger.warn(`No se puede sincronizar: ${!specificEnumExists ? specificEnum : consolidatedEnum} no existe`);
126
- return;
127
- }
128
- const specificValues = await this.getEnumValues(specificEnum);
129
- const consolidatedValues = await this.getEnumValues(consolidatedEnum);
130
- this.logger.log(`Valores en ${specificEnum}: ${specificValues.join(", ")}\n` +
131
- `Valores en ${consolidatedEnum}: ${consolidatedValues.join(", ")}`);
132
- const missingValues = specificValues.filter((value) => !consolidatedValues.includes(value));
133
- if (missingValues.length === 0) {
134
- this.logger.log(`No hay valores faltantes entre ${specificEnum} y ${consolidatedEnum}`);
135
- return;
136
- }
137
- this.logger.log(`Encontrados ${missingValues.length} valores en ${specificEnum} que faltan en ${consolidatedEnum}: ${missingValues.join(", ")}`);
138
- for (const value of missingValues) {
139
- await this.addValueToEnum(consolidatedEnum, value);
140
- }
141
- this.logger.log(`Sincronización entre ${specificEnum} y ${consolidatedEnum} completada`);
142
- }
143
- catch (error) {
144
- this.logger.error(`Error sincronizando ${specificEnum} con ${consolidatedEnum}: ${error.message}`);
145
- }
146
- }
147
- async enumExists(enumName) {
148
- const result = await this.pool.query(`
149
- SELECT 1
150
- FROM pg_type t
151
- JOIN pg_namespace n ON t.typnamespace = n.oid
152
- WHERE t.typname = $1
153
- AND t.typtype = 'e' -- enum types
154
- AND n.nspname = 'public'
155
- `, [enumName]);
156
- return result.rows.length > 0;
157
- }
158
- async getEnumValues(enumName) {
159
- const result = await this.pool.query(`
160
- SELECT e.enumlabel
161
- FROM pg_enum e
162
- JOIN pg_type t ON e.enumtypid = t.oid
163
- JOIN pg_namespace n ON t.typnamespace = n.oid
164
- WHERE t.typname = $1
165
- AND n.nspname = 'public'
166
- ORDER BY e.enumsortorder
167
- `, [enumName]);
168
- return result.rows.map((row) => row.enumlabel);
169
- }
170
- async addValueToEnum(enumName, value) {
171
- try {
172
- const escapedValue = value.replace(/'/g, "''");
173
- await this.pool.query(`
174
- ALTER TYPE ${enumName} ADD VALUE IF NOT EXISTS '${escapedValue}'
175
- `);
176
- if (this.enumValuesCache[enumName]) {
177
- if (!this.enumValuesCache[enumName].includes(value)) {
178
- this.enumValuesCache[enumName].push(value);
179
- }
180
- }
181
- this.logger.log(`Valor '${value}' agregado al enum ${enumName}`);
182
- }
183
- catch (error) {
184
- this.logger.error(`Error agregando valor '${value}' al enum ${enumName}: ${error.message}`);
185
- throw error;
186
- }
187
- }
188
- async normalizeEnumValuesInTables() {
189
- this.logger.log("Iniciando normalización de valores de enum en tablas");
190
- try {
191
- const schemas = await this.getSchemas();
192
- this.logger.log(`Encontrados ${schemas.length} schemas para procesar`);
193
- for (const schema of schemas) {
194
- await this.normalizeEnumValuesInSchema(schema);
195
- }
196
- this.logger.log("Normalización de valores de enum en tablas completada");
197
- }
198
- catch (error) {
199
- this.logger.error(`Error durante la normalización de valores de enum: ${error.message}`, error.stack);
200
- }
201
- }
202
- async getSchemas() {
203
- const result = await this.pool.query(`
204
- SELECT schema_name
205
- FROM information_schema.schemata
206
- WHERE schema_name NOT IN ('information_schema', 'pg_catalog', 'pg_toast')
207
- AND schema_name NOT LIKE 'pg_%'
208
- `);
209
- return result.rows.map((row) => row.schema_name);
210
- }
211
- async normalizeEnumValuesInSchema(schema) {
212
- this.logger.log(`Procesando valores de enum en schema: ${schema}`);
213
- try {
214
- const enumColumnsQuery = `
215
- SELECT
216
- c.table_name,
217
- c.column_name,
218
- c.udt_name
219
- FROM
220
- information_schema.columns c
221
- WHERE
222
- c.table_schema = $1
223
- AND c.data_type = 'USER-DEFINED'
224
- AND c.udt_name LIKE 'enum_%'
225
- `;
226
- const enumColumnsResult = await this.pool.query(enumColumnsQuery, [
227
- schema,
228
- ]);
229
- if (enumColumnsResult.rows.length === 0) {
230
- this.logger.log(`No se encontraron columnas enum en schema: ${schema}`);
231
- return;
232
- }
233
- this.logger.log(`Encontradas ${enumColumnsResult.rows.length} columnas enum en schema: ${schema}`);
234
- for (const row of enumColumnsResult.rows) {
235
- const tableName = row.table_name;
236
- const columnName = row.column_name;
237
- const enumTypeName = row.udt_name;
238
- await this.normalizeEnumColumn(schema, tableName, columnName, enumTypeName);
239
- }
240
- this.logger.log(`Completado procesamiento de valores enum para schema: ${schema}`);
241
- }
242
- catch (error) {
243
- this.logger.error(`Error procesando valores enum para schema ${schema}: ${error.message}`, error.stack);
244
- }
245
- }
246
- async normalizeEnumColumn(schema, tableName, columnName, enumTypeName) {
247
- this.logger.log(`Normalizando columna enum ${columnName} (${enumTypeName}) en tabla ${schema}.${tableName}`);
248
- try {
249
- if (!this.enumValuesCache[enumTypeName]) {
250
- this.enumValuesCache[enumTypeName] = await this.getEnumValues(enumTypeName);
251
- }
252
- const validEnumValues = this.enumValuesCache[enumTypeName];
253
- if (validEnumValues.length === 0) {
254
- this.logger.warn(`No se encontraron valores para el enum ${enumTypeName}. Omitiendo.`);
255
- return;
256
- }
257
- const currentValuesQuery = `
258
- SELECT DISTINCT "${columnName}"
259
- FROM "${schema}"."${tableName}"
260
- WHERE "${columnName}" IS NOT NULL
261
- `;
262
- const currentValuesResult = await this.pool.query(currentValuesQuery);
263
- const currentValues = currentValuesResult.rows.map((r) => r[columnName]);
264
- const invalidValues = currentValues.filter((val) => !validEnumValues.includes(val));
265
- if (invalidValues.length === 0) {
266
- this.logger.log(`No se encontraron valores inválidos para columna enum ${columnName} en tabla ${schema}.${tableName}`);
267
- return;
268
- }
269
- this.logger.log(`Encontrados ${invalidValues.length} valores inválidos para enum ${enumTypeName} en ${schema}.${tableName}: ${invalidValues.join(", ")}`);
270
- for (const invalidValue of invalidValues) {
271
- const normalizedValue = this.getNormalizedEnumValue(enumTypeName, invalidValue);
272
- if (normalizedValue && normalizedValue !== invalidValue) {
273
- const updateQuery = `
274
- UPDATE "${schema}"."${tableName}"
275
- SET "${columnName}" = $1
276
- WHERE "${columnName}" = $2
277
- `;
278
- const result = await this.pool.query(updateQuery, [
279
- normalizedValue,
280
- invalidValue,
281
- ]);
282
- this.logger.log(`Actualizado valor '${invalidValue}' a '${normalizedValue}' en ${result.rowCount} filas de ${schema}.${tableName}.${columnName}`);
283
- if (!validEnumValues.includes(normalizedValue)) {
284
- await this.addValueToEnum(enumTypeName, normalizedValue);
285
- }
286
- }
287
- else if (!normalizedValue) {
288
- const updateQuery = `
289
- UPDATE "${schema}"."${tableName}"
290
- SET "${columnName}" = NULL
291
- WHERE "${columnName}" = $1
292
- `;
293
- const result = await this.pool.query(updateQuery, [invalidValue]);
294
- this.logger.log(`Establecido valor '${invalidValue}' a NULL en ${result.rowCount} filas de ${schema}.${tableName}.${columnName}`);
295
- }
296
- }
297
- }
298
- catch (error) {
299
- this.logger.error(`Error normalizando columna enum ${columnName} en ${schema}.${tableName}: ${error.message}`, error.stack);
300
- }
301
- }
302
- getNormalizedEnumValue(enumTypeName, value) {
303
- var _a;
304
- if ((_a = this.enumValuesCache[enumTypeName]) === null || _a === void 0 ? void 0 : _a.includes(value)) {
305
- return value;
306
- }
307
- if (this.valueNormalizationMap[enumTypeName] &&
308
- this.valueNormalizationMap[enumTypeName][value]) {
309
- return this.valueNormalizationMap[enumTypeName][value];
310
- }
311
- const normalizedInput = value.toUpperCase().replace(/\s+/g, "_");
312
- if (this.valueNormalizationMap[enumTypeName] &&
313
- this.valueNormalizationMap[enumTypeName][normalizedInput]) {
314
- return this.valueNormalizationMap[enumTypeName][normalizedInput];
315
- }
316
- const validValues = this.enumValuesCache[enumTypeName] || [];
317
- for (const validValue of validValues) {
318
- if (validValue.toLowerCase() === value.toLowerCase()) {
319
- return validValue;
320
- }
321
- }
322
- return null;
323
- }
324
- }
325
- exports.EnumValueSynchronizer = EnumValueSynchronizer;
326
- if (require.main === module) {
327
- const run = async () => {
328
- const synchronizer = new EnumValueSynchronizer(process.env.SOURCE_DATABASE_URL, process.env.DATABASE_URL);
329
- await synchronizer.synchronizeEnumValues();
330
- };
331
- run().catch((error) => {
332
- console.error("Error ejecutando sincronización de valores de enum:", error);
333
- process.exit(1);
334
- });
335
- }
336
- //# sourceMappingURL=sync-enum-values.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"sync-enum-values.js","sourceRoot":"","sources":["../../src/scripts/sync-enum-values.ts"],"names":[],"mappings":"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"}
@@ -1,10 +0,0 @@
1
- export declare class DatabaseTruncateTool {
2
- private readonly databaseUrl;
3
- private readonly logger;
4
- private readonly pool;
5
- constructor(databaseUrl: string);
6
- truncateDatabase(): Promise<void>;
7
- private getSchemas;
8
- private truncateSchema;
9
- private cleanup;
10
- }
@@ -1,100 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.DatabaseTruncateTool = void 0;
4
- const pg = require("pg");
5
- const dotenv = require("dotenv");
6
- const common_1 = require("@nestjs/common");
7
- dotenv.config();
8
- class DatabaseTruncateTool {
9
- constructor(databaseUrl) {
10
- this.databaseUrl = databaseUrl;
11
- this.logger = new common_1.Logger("DatabaseTruncateTool");
12
- this.pool = new pg.Pool({
13
- connectionString: this.databaseUrl,
14
- });
15
- }
16
- async truncateDatabase() {
17
- try {
18
- this.logger.log("Starting database truncate process");
19
- const schemas = await this.getSchemas();
20
- this.logger.log(`Found ${schemas.length} schemas to process`);
21
- for (const schema of schemas) {
22
- await this.truncateSchema(schema);
23
- }
24
- this.logger.log("Database has been successfully truncated");
25
- }
26
- catch (error) {
27
- this.logger.error(`Error truncating database: ${error.message}`, error.stack);
28
- throw error;
29
- }
30
- finally {
31
- await this.cleanup();
32
- }
33
- }
34
- async getSchemas() {
35
- const result = await this.pool.query(`
36
- SELECT schema_name
37
- FROM information_schema.schemata
38
- WHERE schema_name NOT IN ('information_schema', 'pg_catalog', 'pg_toast')
39
- AND schema_name NOT LIKE 'pg_%'
40
- `);
41
- return result.rows.map(row => row.schema_name);
42
- }
43
- async truncateSchema(schemaName) {
44
- this.logger.log(`Processing schema: ${schemaName}`);
45
- try {
46
- const tablesResult = await this.pool.query(`
47
- SELECT table_name
48
- FROM information_schema.tables
49
- WHERE table_schema = $1
50
- AND table_type = 'BASE TABLE'
51
- `, [schemaName]);
52
- const tables = tablesResult.rows.map(row => row.table_name);
53
- if (tables.length === 0) {
54
- this.logger.log(`No tables found in schema ${schemaName}`);
55
- return;
56
- }
57
- this.logger.log(`Found ${tables.length} tables in schema ${schemaName}`);
58
- await this.pool.query(`SET session_replication_role = 'replica'`);
59
- for (const table of tables) {
60
- try {
61
- await this.pool.query(`TRUNCATE TABLE "${schemaName}"."${table}" CASCADE`);
62
- this.logger.log(`Truncated table ${schemaName}.${table}`);
63
- }
64
- catch (tableError) {
65
- this.logger.error(`Error truncating table ${schemaName}.${table}: ${tableError.message}`);
66
- }
67
- }
68
- await this.pool.query(`SET session_replication_role = 'origin'`);
69
- this.logger.log(`Successfully processed schema: ${schemaName}`);
70
- }
71
- catch (error) {
72
- this.logger.error(`Error processing schema ${schemaName}: ${error.message}`);
73
- }
74
- }
75
- async cleanup() {
76
- this.logger.log("Cleaning up database connections");
77
- await this.pool.end();
78
- }
79
- }
80
- exports.DatabaseTruncateTool = DatabaseTruncateTool;
81
- if (require.main === module) {
82
- const run = async () => {
83
- try {
84
- const databaseUrl = process.argv[2] || process.env.DATABASE_URL;
85
- if (!databaseUrl) {
86
- console.error("Error: No database URL provided. Please provide a database URL as an argument or set DATABASE_URL environment variable.");
87
- process.exit(1);
88
- }
89
- const truncateTool = new DatabaseTruncateTool(databaseUrl);
90
- await truncateTool.truncateDatabase();
91
- process.exit(0);
92
- }
93
- catch (error) {
94
- console.error("Error:", error.message);
95
- process.exit(1);
96
- }
97
- };
98
- run();
99
- }
100
- //# sourceMappingURL=truncate-database.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"truncate-database.js","sourceRoot":"","sources":["../../src/scripts/truncate-database.ts"],"names":[],"mappings":"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"}
@@ -1,11 +0,0 @@
1
- export declare class MigrationSetupVerifier {
2
- private readonly logger;
3
- private readonly sourcePool;
4
- private readonly targetPool;
5
- constructor();
6
- verifySetup(): Promise<void>;
7
- private verifyConnections;
8
- private verifyTenants;
9
- private verifySchemas;
10
- private cleanup;
11
- }
@@ -1,120 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.MigrationSetupVerifier = void 0;
4
- const dotenv = require("dotenv");
5
- const pg = require("pg");
6
- const common_1 = require("@nestjs/common");
7
- dotenv.config();
8
- class MigrationSetupVerifier {
9
- constructor() {
10
- this.logger = new common_1.Logger('MigrationSetupVerifier');
11
- this.sourcePool = new pg.Pool({
12
- connectionString: process.env.SOURCE_DATABASE_URL,
13
- });
14
- this.targetPool = new pg.Pool({
15
- connectionString: process.env.DATABASE_URL,
16
- });
17
- }
18
- async verifySetup() {
19
- this.logger.log('Starting migration setup verification');
20
- try {
21
- await this.verifyConnections();
22
- await this.verifyTenants();
23
- await this.verifySchemas();
24
- this.logger.log('Migration setup verification completed');
25
- }
26
- catch (error) {
27
- this.logger.error(`Error during setup verification: ${error.message}`);
28
- }
29
- finally {
30
- await this.cleanup();
31
- }
32
- }
33
- async verifyConnections() {
34
- this.logger.log('Verifying database connections...');
35
- try {
36
- const sourceClient = await this.sourcePool.connect();
37
- const sourceResult = await sourceClient.query('SELECT NOW() as time');
38
- sourceClient.release();
39
- this.logger.log(`Source database connection successful: ${sourceResult.rows[0].time}`);
40
- }
41
- catch (error) {
42
- this.logger.error(`Source database connection failed: ${error.message}`);
43
- throw new Error('Source database connection failed');
44
- }
45
- try {
46
- const targetClient = await this.targetPool.connect();
47
- const targetResult = await targetClient.query('SELECT NOW() as time');
48
- targetClient.release();
49
- this.logger.log(`Target database connection successful: ${targetResult.rows[0].time}`);
50
- }
51
- catch (error) {
52
- this.logger.error(`Target database connection failed: ${error.message}`);
53
- throw new Error('Target database connection failed');
54
- }
55
- }
56
- async verifyTenants() {
57
- this.logger.log('Verifying tenants in source database...');
58
- try {
59
- const result = await this.sourcePool.query(`
60
- SELECT api_key, provider_id
61
- FROM api_keys
62
- WHERE api_key != ''
63
- AND provider_id IS NOT NULL
64
- `);
65
- this.logger.log(`Found ${result.rows.length} valid tenants in source database`);
66
- if (result.rows.length === 0) {
67
- this.logger.warn('No valid tenants found in source database!');
68
- this.logger.log('Will use "public" schema as default source for migration');
69
- }
70
- else {
71
- const examples = result.rows.slice(0, 5);
72
- this.logger.log(`Sample tenants: ${JSON.stringify(examples)}`);
73
- }
74
- }
75
- catch (error) {
76
- this.logger.error(`Error verifying tenants: ${error.message}`);
77
- this.logger.log('Will use "public" schema as default source for migration');
78
- }
79
- }
80
- async verifySchemas() {
81
- this.logger.log('Verifying schemas in target database...');
82
- try {
83
- const result = await this.targetPool.query(`
84
- SELECT schema_name
85
- FROM information_schema.schemata
86
- WHERE schema_name NOT IN ('public', 'information_schema', 'pg_catalog', 'pg_toast')
87
- AND schema_name NOT LIKE 'pg_%'
88
- `);
89
- this.logger.log(`Found ${result.rows.length} schemas in target database`);
90
- if (result.rows.length === 0) {
91
- this.logger.warn('No tenant schemas found in target database!');
92
- }
93
- else {
94
- const examples = result.rows.slice(0, 5);
95
- this.logger.log(`Sample schemas: ${JSON.stringify(examples)}`);
96
- }
97
- }
98
- catch (error) {
99
- this.logger.error(`Error verifying schemas: ${error.message}`);
100
- }
101
- }
102
- async cleanup() {
103
- try {
104
- await this.sourcePool.end();
105
- await this.targetPool.end();
106
- }
107
- catch (error) {
108
- this.logger.error(`Error during cleanup: ${error.message}`);
109
- }
110
- }
111
- }
112
- exports.MigrationSetupVerifier = MigrationSetupVerifier;
113
- if (require.main === module) {
114
- const verifier = new MigrationSetupVerifier();
115
- verifier.verifySetup().catch(error => {
116
- console.error('Verification failed:', error);
117
- process.exit(1);
118
- });
119
- }
120
- //# sourceMappingURL=verify-migration-setup.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"verify-migration-setup.js","sourceRoot":"","sources":["../../src/scripts/verify-migration-setup.ts"],"names":[],"mappings":"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"}