@javalabs/prisma-client 1.0.25 → 1.0.27

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 (121) hide show
  1. package/package.json +5 -5
  2. package/prisma/schema.prisma +0 -4
  3. package/dist/index.d.ts +0 -7
  4. package/dist/index.js +0 -34
  5. package/dist/index.js.map +0 -1
  6. package/dist/prisma-factory.service.d.ts +0 -9
  7. package/dist/prisma-factory.service.js +0 -47
  8. package/dist/prisma-factory.service.js.map +0 -1
  9. package/dist/prisma.module.d.ts +0 -2
  10. package/dist/prisma.module.js +0 -23
  11. package/dist/prisma.module.js.map +0 -1
  12. package/dist/prisma.service.d.ts +0 -6
  13. package/dist/prisma.service.js +0 -27
  14. package/dist/prisma.service.js.map +0 -1
  15. package/dist/scripts/add-uuid-to-table.d.ts +0 -8
  16. package/dist/scripts/add-uuid-to-table.js +0 -98
  17. package/dist/scripts/add-uuid-to-table.js.map +0 -1
  18. package/dist/scripts/create-tenant-schemas.d.ts +0 -1
  19. package/dist/scripts/create-tenant-schemas.js +0 -117
  20. package/dist/scripts/create-tenant-schemas.js.map +0 -1
  21. package/dist/scripts/data-migration/batch-migrator.d.ts +0 -20
  22. package/dist/scripts/data-migration/batch-migrator.js +0 -134
  23. package/dist/scripts/data-migration/batch-migrator.js.map +0 -1
  24. package/dist/scripts/data-migration/data-transformer.d.ts +0 -26
  25. package/dist/scripts/data-migration/data-transformer.js +0 -278
  26. package/dist/scripts/data-migration/data-transformer.js.map +0 -1
  27. package/dist/scripts/data-migration/db-connector.d.ts +0 -12
  28. package/dist/scripts/data-migration/db-connector.js +0 -94
  29. package/dist/scripts/data-migration/db-connector.js.map +0 -1
  30. package/dist/scripts/data-migration/dependency-resolver.d.ts +0 -18
  31. package/dist/scripts/data-migration/dependency-resolver.js +0 -132
  32. package/dist/scripts/data-migration/dependency-resolver.js.map +0 -1
  33. package/dist/scripts/data-migration/entity-discovery.d.ts +0 -11
  34. package/dist/scripts/data-migration/entity-discovery.js +0 -152
  35. package/dist/scripts/data-migration/entity-discovery.js.map +0 -1
  36. package/dist/scripts/data-migration/foreign-key-manager.d.ts +0 -18
  37. package/dist/scripts/data-migration/foreign-key-manager.js +0 -160
  38. package/dist/scripts/data-migration/foreign-key-manager.js.map +0 -1
  39. package/dist/scripts/data-migration/migration-tool.d.ts +0 -48
  40. package/dist/scripts/data-migration/migration-tool.js +0 -290
  41. package/dist/scripts/data-migration/migration-tool.js.map +0 -1
  42. package/dist/scripts/data-migration/schema-utils.d.ts +0 -18
  43. package/dist/scripts/data-migration/schema-utils.js +0 -207
  44. package/dist/scripts/data-migration/schema-utils.js.map +0 -1
  45. package/dist/scripts/data-migration/tenant-migrator.d.ts +0 -15
  46. package/dist/scripts/data-migration/tenant-migrator.js +0 -117
  47. package/dist/scripts/data-migration/tenant-migrator.js.map +0 -1
  48. package/dist/scripts/data-migration/typecast-manager.d.ts +0 -9
  49. package/dist/scripts/data-migration/typecast-manager.js +0 -179
  50. package/dist/scripts/data-migration/typecast-manager.js.map +0 -1
  51. package/dist/scripts/data-migration/types.d.ts +0 -100
  52. package/dist/scripts/data-migration/types.js +0 -3
  53. package/dist/scripts/data-migration/types.js.map +0 -1
  54. package/dist/scripts/database-initializer.d.ts +0 -5
  55. package/dist/scripts/database-initializer.js +0 -45
  56. package/dist/scripts/database-initializer.js.map +0 -1
  57. package/dist/scripts/drop-database.d.ts +0 -10
  58. package/dist/scripts/drop-database.js +0 -81
  59. package/dist/scripts/drop-database.js.map +0 -1
  60. package/dist/scripts/encrypt-user-passwords.d.ts +0 -1
  61. package/dist/scripts/encrypt-user-passwords.js +0 -33
  62. package/dist/scripts/encrypt-user-passwords.js.map +0 -1
  63. package/dist/scripts/error-handler.d.ts +0 -12
  64. package/dist/scripts/error-handler.js +0 -82
  65. package/dist/scripts/error-handler.js.map +0 -1
  66. package/dist/scripts/fix-data-types.d.ts +0 -10
  67. package/dist/scripts/fix-data-types.js +0 -185
  68. package/dist/scripts/fix-data-types.js.map +0 -1
  69. package/dist/scripts/fix-enum-values.d.ts +0 -17
  70. package/dist/scripts/fix-enum-values.js +0 -234
  71. package/dist/scripts/fix-enum-values.js.map +0 -1
  72. package/dist/scripts/fix-schema-discrepancies.d.ts +0 -21
  73. package/dist/scripts/fix-schema-discrepancies.js +0 -240
  74. package/dist/scripts/fix-schema-discrepancies.js.map +0 -1
  75. package/dist/scripts/fix-table-indexes.d.ts +0 -26
  76. package/dist/scripts/fix-table-indexes.js +0 -460
  77. package/dist/scripts/fix-table-indexes.js.map +0 -1
  78. package/dist/scripts/migrate-schema-structure.d.ts +0 -1
  79. package/dist/scripts/migrate-schema-structure.js +0 -76
  80. package/dist/scripts/migrate-schema-structure.js.map +0 -1
  81. package/dist/scripts/migrate-uuid.d.ts +0 -2
  82. package/dist/scripts/migrate-uuid.js +0 -57
  83. package/dist/scripts/migrate-uuid.js.map +0 -1
  84. package/dist/scripts/post-migration-validator.d.ts +0 -34
  85. package/dist/scripts/post-migration-validator.js +0 -363
  86. package/dist/scripts/post-migration-validator.js.map +0 -1
  87. package/dist/scripts/pre-migration-validator.d.ts +0 -25
  88. package/dist/scripts/pre-migration-validator.js +0 -491
  89. package/dist/scripts/pre-migration-validator.js.map +0 -1
  90. package/dist/scripts/reset-database.d.ts +0 -17
  91. package/dist/scripts/reset-database.js +0 -202
  92. package/dist/scripts/reset-database.js.map +0 -1
  93. package/dist/scripts/retry-failed-migrations.d.ts +0 -14
  94. package/dist/scripts/retry-failed-migrations.js +0 -301
  95. package/dist/scripts/retry-failed-migrations.js.map +0 -1
  96. package/dist/scripts/run-migration.d.ts +0 -1
  97. package/dist/scripts/run-migration.js +0 -512
  98. package/dist/scripts/run-migration.js.map +0 -1
  99. package/dist/scripts/schema-sync.d.ts +0 -1
  100. package/dist/scripts/schema-sync.js +0 -85
  101. package/dist/scripts/schema-sync.js.map +0 -1
  102. package/dist/scripts/sequence-sync-cli.d.ts +0 -2
  103. package/dist/scripts/sequence-sync-cli.js +0 -287
  104. package/dist/scripts/sequence-sync-cli.js.map +0 -1
  105. package/dist/scripts/sequence-synchronizer.d.ts +0 -8
  106. package/dist/scripts/sequence-synchronizer.js +0 -88
  107. package/dist/scripts/sequence-synchronizer.js.map +0 -1
  108. package/dist/scripts/sync-enum-types.d.ts +0 -13
  109. package/dist/scripts/sync-enum-types.js +0 -139
  110. package/dist/scripts/sync-enum-types.js.map +0 -1
  111. package/dist/scripts/sync-enum-values.d.ts +0 -20
  112. package/dist/scripts/sync-enum-values.js +0 -336
  113. package/dist/scripts/sync-enum-values.js.map +0 -1
  114. package/dist/scripts/truncate-database.d.ts +0 -10
  115. package/dist/scripts/truncate-database.js +0 -100
  116. package/dist/scripts/truncate-database.js.map +0 -1
  117. package/dist/scripts/verify-migration-setup.d.ts +0 -11
  118. package/dist/scripts/verify-migration-setup.js +0 -120
  119. package/dist/scripts/verify-migration-setup.js.map +0 -1
  120. package/dist/tsconfig.tsbuildinfo +0 -1
  121. package/prisma/migrations/add_athena_match_fields.sql +0 -13
@@ -1,460 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.TableIndexFixer = void 0;
4
- const fs = require("fs");
5
- const path = require("path");
6
- const pg = require("pg");
7
- const common_1 = require("@nestjs/common");
8
- const dotenv = require("dotenv");
9
- dotenv.config();
10
- class TableIndexFixer {
11
- constructor(targetUrl = process.env.DATABASE_URL) {
12
- this.targetUrl = targetUrl;
13
- this.logger = new common_1.Logger('TableIndexFixer');
14
- this.fixedIndexes = [];
15
- if (!this.targetUrl) {
16
- throw new Error('DATABASE_URL environment variable is required');
17
- }
18
- this.targetPool = new pg.Pool({
19
- connectionString: this.targetUrl,
20
- });
21
- this.logDir = path.join(process.cwd(), 'migration-logs');
22
- if (!fs.existsSync(this.logDir)) {
23
- fs.mkdirSync(this.logDir, { recursive: true });
24
- }
25
- const timestamp = new Date().toISOString().replace(/:/g, '-').replace(/\..+/, '');
26
- this.logPath = path.join(this.logDir, `index-fixes-${timestamp}.json`);
27
- }
28
- async fixIndexes() {
29
- try {
30
- this.logger.log('Iniciando proceso de corrección de índices');
31
- const schemas = await this.getSchemas();
32
- this.logger.log(`Encontrados ${schemas.length} esquemas para procesar`);
33
- for (const schema of schemas) {
34
- await this.fixIndexesForSchema(schema);
35
- }
36
- this.saveFixLog();
37
- this.logger.log(`Proceso de corrección de índices completado. Log guardado en: ${this.logPath}`);
38
- }
39
- catch (error) {
40
- this.logger.error(`Error durante la corrección de índices: ${error.message}`, error.stack);
41
- }
42
- finally {
43
- await this.cleanup();
44
- }
45
- }
46
- async getSchemas() {
47
- const result = await this.targetPool.query(`
48
- SELECT schema_name
49
- FROM information_schema.schemata
50
- WHERE schema_name NOT IN ('information_schema', 'pg_catalog', 'pg_toast')
51
- AND schema_name NOT LIKE 'pg_%'
52
- `);
53
- return result.rows.map(row => row.schema_name);
54
- }
55
- async fixIndexesForSchema(schema) {
56
- this.logger.log(`Procesando índices para el esquema: ${schema}`);
57
- try {
58
- const tables = await this.getTablesForSchema(schema);
59
- this.logger.log(`Encontradas ${tables.length} tablas en el esquema ${schema}`);
60
- for (const table of tables) {
61
- await this.fixIndexesForTable(schema, table);
62
- }
63
- }
64
- catch (error) {
65
- this.logger.error(`Error procesando índices para el esquema ${schema}: ${error.message}`);
66
- }
67
- }
68
- async getTablesForSchema(schema) {
69
- const result = await this.targetPool.query(`
70
- SELECT table_name
71
- FROM information_schema.tables
72
- WHERE table_schema = $1
73
- AND table_type = 'BASE TABLE'
74
- `, [schema]);
75
- return result.rows.map(row => row.table_name);
76
- }
77
- async fixIndexesForTable(schema, table) {
78
- this.logger.log(`Procesando índices para la tabla ${schema}.${table}`);
79
- try {
80
- const tableInfo = await this.getTableInfo(schema, table);
81
- const existingIndexes = await this.getTableIndexes(this.targetPool, schema, table);
82
- this.logger.log(`Encontrados ${existingIndexes.length} índices en la tabla ${schema}.${table}`);
83
- if (tableInfo.has_identity_column) {
84
- await this.fixSequences(schema, table);
85
- }
86
- await this.fixCommonIndexIssues(schema, table);
87
- await this.fixForeignKeyIndexes(schema, table);
88
- await this.removeRedundantIndexes(schema, table, await this.getTableIndexes(this.targetPool, schema, table));
89
- if (table === 'users' || table === 'user' || table.includes('user')) {
90
- await this.ensureCriticalUserTableIndexes(schema, table);
91
- }
92
- }
93
- catch (error) {
94
- this.logger.error(`Error procesando índices para la tabla ${schema}.${table}: ${error.message}`);
95
- }
96
- }
97
- async ensureCriticalUserTableIndexes(schema, table) {
98
- try {
99
- const columns = await this.getTableColumns(schema, table);
100
- const existingIndexes = await this.getTableIndexes(this.targetPool, schema, table);
101
- const indexedColumns = new Set(existingIndexes.flatMap(idx => idx.column_names));
102
- const criticalColumns = ['email', 'username', 'phone', 'id', 'uuid'];
103
- for (const criticalCol of criticalColumns) {
104
- const column = columns.find(col => col.column_name === criticalCol);
105
- if (column && !indexedColumns.has(column.column_name)) {
106
- const shouldBeUnique = ['email', 'username', 'phone', 'uuid'].includes(column.column_name);
107
- const indexInfo = {
108
- schema,
109
- table,
110
- index_name: `idx_${table}_${column.column_name}`,
111
- column_names: [column.column_name],
112
- is_unique: shouldBeUnique,
113
- is_primary: false,
114
- definition: ''
115
- };
116
- this.logger.log(`Creando índice crítico para ${column.column_name} en tabla de usuarios ${schema}.${table}`);
117
- await this.createIndex(schema, table, indexInfo);
118
- }
119
- }
120
- await this.fixUserTableSequences(schema, table);
121
- }
122
- catch (error) {
123
- this.logger.error(`Error asegurando índices críticos para tabla de usuarios ${schema}.${table}: ${error.message}`);
124
- }
125
- }
126
- async fixUserTableSequences(schema, table) {
127
- var _a;
128
- try {
129
- const columnsQuery = `
130
- SELECT column_name
131
- FROM information_schema.columns
132
- WHERE table_schema = $1
133
- AND table_name = $2
134
- AND (is_identity = 'YES' OR column_default LIKE 'nextval%')
135
- `;
136
- const columnsResult = await this.targetPool.query(columnsQuery, [schema, table]);
137
- const identityColumns = columnsResult.rows.map(row => row.column_name);
138
- for (const column of identityColumns) {
139
- const sequenceQuery = `
140
- SELECT pg_get_serial_sequence($1, $2) AS sequence_name
141
- `;
142
- const sequenceResult = await this.targetPool.query(sequenceQuery, [`${schema}.${table}`, column]);
143
- const sequenceName = (_a = sequenceResult.rows[0]) === null || _a === void 0 ? void 0 : _a.sequence_name;
144
- if (sequenceName) {
145
- const resetQuery = `
146
- SELECT setval($1, COALESCE((SELECT MAX(${column}) FROM ${schema}.${table}), 0) + 1, true)
147
- `;
148
- await this.targetPool.query(resetQuery, [sequenceName]);
149
- this.logger.log(`Restablecida secuencia ${sequenceName} para la columna ${column} en ${schema}.${table} (tabla de usuarios)`);
150
- this.fixedIndexes.push({
151
- schema,
152
- table,
153
- column,
154
- sequence_name: sequenceName,
155
- action: 'reset_sequence_user_table',
156
- timestamp: new Date().toISOString()
157
- });
158
- }
159
- }
160
- }
161
- catch (error) {
162
- this.logger.error(`Error restableciendo secuencias para tabla de usuarios ${schema}.${table}: ${error.message}`);
163
- }
164
- }
165
- async removeRedundantIndexes(schema, table, indexes) {
166
- const redundantIndexes = [];
167
- const criticalIndexPatterns = [
168
- 'email', 'username', 'phone', 'uuid', 'pkey', 'primary',
169
- 'unique', 'user_id', 'auth', 'session', 'token'
170
- ];
171
- for (let i = 0; i < indexes.length; i++) {
172
- for (let j = 0; j < indexes.length; j++) {
173
- if (i !== j && !indexes[i].is_primary && !indexes[j].is_primary) {
174
- const index1 = indexes[i];
175
- const index2 = indexes[j];
176
- if (!Array.isArray(index1.column_names) || !Array.isArray(index2.column_names)) {
177
- this.logger.warn(`Índice con formato incorrecto en ${schema}.${table}: ${index1.index_name} o ${index2.index_name}`);
178
- continue;
179
- }
180
- const isIndex1Critical = criticalIndexPatterns.some(pattern => index1.index_name.toLowerCase().includes(pattern));
181
- if (isIndex1Critical) {
182
- continue;
183
- }
184
- if (index1.column_names.every(col => index2.column_names.includes(col)) &&
185
- index2.column_names.length > index1.column_names.length) {
186
- redundantIndexes.push(index1);
187
- break;
188
- }
189
- }
190
- }
191
- }
192
- for (const index of redundantIndexes) {
193
- try {
194
- const query = `DROP INDEX IF EXISTS "${schema}"."${index.index_name}"`;
195
- await this.targetPool.query(query);
196
- this.logger.log(`Eliminado índice redundante ${index.index_name} en ${schema}.${table}`);
197
- this.fixedIndexes.push({
198
- schema,
199
- table,
200
- index_name: index.index_name,
201
- action: 'removed_redundant',
202
- timestamp: new Date().toISOString()
203
- });
204
- }
205
- catch (error) {
206
- this.logger.error(`Error eliminando índice redundante ${index.index_name} en ${schema}.${table}: ${error.message}`);
207
- }
208
- }
209
- }
210
- async fixSequences(schema, table) {
211
- var _a;
212
- try {
213
- const columnsQuery = `
214
- SELECT column_name
215
- FROM information_schema.columns
216
- WHERE table_schema = $1
217
- AND table_name = $2
218
- AND (is_identity = 'YES' OR column_default LIKE 'nextval%')
219
- `;
220
- const columnsResult = await this.targetPool.query(columnsQuery, [schema, table]);
221
- const identityColumns = columnsResult.rows.map(row => row.column_name);
222
- for (const column of identityColumns) {
223
- const sequenceQuery = `
224
- SELECT pg_get_serial_sequence($1, $2) AS sequence_name
225
- `;
226
- const sequenceResult = await this.targetPool.query(sequenceQuery, [`${schema}.${table}`, column]);
227
- const sequenceName = (_a = sequenceResult.rows[0]) === null || _a === void 0 ? void 0 : _a.sequence_name;
228
- if (sequenceName) {
229
- const resetQuery = `
230
- SELECT setval($1, COALESCE((SELECT MAX(${column}) FROM ${schema}.${table}), 0) + 1, true)
231
- `;
232
- await this.targetPool.query(resetQuery, [sequenceName]);
233
- this.logger.log(`Restablecida secuencia ${sequenceName} para la columna ${column} en ${schema}.${table}`);
234
- this.fixedIndexes.push({
235
- schema,
236
- table,
237
- column,
238
- sequence_name: sequenceName,
239
- action: 'reset_sequence',
240
- timestamp: new Date().toISOString()
241
- });
242
- }
243
- }
244
- }
245
- catch (error) {
246
- this.logger.error(`Error restableciendo secuencias para ${schema}.${table}: ${error.message}`);
247
- }
248
- }
249
- async getTableInfo(schema, table) {
250
- var _a;
251
- try {
252
- const identityQuery = `
253
- SELECT EXISTS (
254
- SELECT 1
255
- FROM information_schema.columns
256
- WHERE table_schema = $1
257
- AND table_name = $2
258
- AND is_identity = 'YES'
259
- ) AS has_identity_column;
260
- `;
261
- const result = await this.targetPool.query(identityQuery, [schema, table]);
262
- return {
263
- has_identity_column: ((_a = result.rows[0]) === null || _a === void 0 ? void 0 : _a.has_identity_column) || false
264
- };
265
- }
266
- catch (error) {
267
- this.logger.error(`Error obteniendo información de la tabla ${schema}.${table}: ${error.message}`);
268
- return { has_identity_column: false };
269
- }
270
- }
271
- async getTableIndexes(pool, schema, table) {
272
- const query = `
273
- SELECT
274
- i.relname AS index_name,
275
- array_agg(a.attname) AS column_names,
276
- ix.indisunique AS is_unique,
277
- ix.indisprimary AS is_primary,
278
- pg_get_indexdef(ix.indexrelid) AS definition
279
- FROM
280
- pg_index ix
281
- JOIN pg_class i ON i.oid = ix.indexrelid
282
- JOIN pg_class t ON t.oid = ix.indrelid
283
- JOIN pg_namespace n ON n.oid = t.relnamespace
284
- JOIN pg_attribute a ON a.attrelid = t.oid AND a.attnum = ANY(ix.indkey)
285
- WHERE
286
- n.nspname = $1
287
- AND t.relname = $2
288
- GROUP BY
289
- i.relname, ix.indisunique, ix.indisprimary, ix.indexrelid
290
- ORDER BY
291
- i.relname;
292
- `;
293
- try {
294
- const result = await pool.query(query, [schema, table]);
295
- return result.rows.map(row => ({
296
- schema,
297
- table,
298
- index_name: row.index_name,
299
- column_names: row.column_names,
300
- is_unique: row.is_unique,
301
- is_primary: row.is_primary,
302
- definition: row.definition
303
- }));
304
- }
305
- catch (error) {
306
- this.logger.error(`Error obteniendo índices para ${schema}.${table}: ${error.message}`);
307
- return [];
308
- }
309
- }
310
- async createIndex(schema, table, indexInfo) {
311
- try {
312
- const columnList = indexInfo.column_names.join('_');
313
- const indexName = `idx_${table}_${columnList}`.substring(0, 63);
314
- let query = `CREATE`;
315
- if (indexInfo.is_unique) {
316
- query += ` UNIQUE`;
317
- }
318
- query += ` INDEX IF NOT EXISTS "${indexName}" ON "${schema}"."${table}" (${indexInfo.column_names.map(col => `"${col}"`).join(', ')})`;
319
- await this.targetPool.query(query);
320
- this.logger.log(`Creado índice ${indexName} en ${schema}.${table}`);
321
- this.fixedIndexes.push({
322
- schema,
323
- table,
324
- index_name: indexName,
325
- columns: indexInfo.column_names,
326
- is_unique: indexInfo.is_unique,
327
- timestamp: new Date().toISOString()
328
- });
329
- }
330
- catch (error) {
331
- this.logger.error(`Error creando índice en ${schema}.${table}: ${error.message}`);
332
- }
333
- }
334
- async fixCommonIndexIssues(schema, table) {
335
- try {
336
- const columns = await this.getTableColumns(schema, table);
337
- const potentialIndexColumns = columns.filter(col => col.column_name.endsWith('_id') ||
338
- col.column_name === 'id' ||
339
- col.column_name === 'uuid' ||
340
- col.column_name === 'slug' ||
341
- col.column_name === 'email' ||
342
- col.column_name === 'username' ||
343
- col.column_name.includes('code') ||
344
- col.column_name === 'user_id' ||
345
- col.column_name === 'created_at' ||
346
- col.column_name === 'updated_at');
347
- const existingIndexes = await this.getTableIndexes(this.targetPool, schema, table);
348
- const indexedColumns = new Set(existingIndexes.flatMap(idx => idx.column_names));
349
- for (const column of potentialIndexColumns) {
350
- if (!indexedColumns.has(column.column_name)) {
351
- const shouldBeUnique = ['email', 'username', 'slug', 'uuid'].includes(column.column_name);
352
- const indexInfo = {
353
- schema,
354
- table,
355
- index_name: `idx_${table}_${column.column_name}`,
356
- column_names: [column.column_name],
357
- is_unique: shouldBeUnique,
358
- is_primary: false,
359
- definition: ''
360
- };
361
- await this.createIndex(schema, table, indexInfo);
362
- }
363
- }
364
- }
365
- catch (error) {
366
- this.logger.error(`Error corrigiendo problemas comunes de índices en ${schema}.${table}: ${error.message}`);
367
- }
368
- }
369
- async getTableColumns(schema, table) {
370
- const query = `
371
- SELECT column_name, data_type, is_nullable
372
- FROM information_schema.columns
373
- WHERE table_schema = $1
374
- AND table_name = $2
375
- `;
376
- const result = await this.targetPool.query(query, [schema, table]);
377
- return result.rows;
378
- }
379
- async fixForeignKeyIndexes(schema, table) {
380
- try {
381
- const fkQuery = `
382
- SELECT
383
- kcu.column_name,
384
- ccu.table_schema AS foreign_table_schema,
385
- ccu.table_name AS foreign_table_name,
386
- ccu.column_name AS foreign_column_name
387
- FROM
388
- information_schema.table_constraints AS tc
389
- JOIN information_schema.key_column_usage AS kcu
390
- ON tc.constraint_name = kcu.constraint_name
391
- AND tc.table_schema = kcu.table_schema
392
- JOIN information_schema.constraint_column_usage AS ccu
393
- ON ccu.constraint_name = tc.constraint_name
394
- AND ccu.table_schema = tc.table_schema
395
- WHERE
396
- tc.constraint_type = 'FOREIGN KEY'
397
- AND tc.table_schema = $1
398
- AND tc.table_name = $2;
399
- `;
400
- const fkResult = await this.targetPool.query(fkQuery, [schema, table]);
401
- const existingIndexes = await this.getTableIndexes(this.targetPool, schema, table);
402
- const indexedColumns = new Set(existingIndexes.flatMap(idx => idx.column_names));
403
- for (const fk of fkResult.rows) {
404
- if (!indexedColumns.has(fk.column_name)) {
405
- const indexInfo = {
406
- schema,
407
- table,
408
- index_name: `idx_${table}_${fk.column_name}`,
409
- column_names: [fk.column_name],
410
- is_unique: false,
411
- is_primary: false,
412
- definition: ''
413
- };
414
- await this.createIndex(schema, table, indexInfo);
415
- }
416
- }
417
- }
418
- catch (error) {
419
- this.logger.error(`Error creando índices para claves foráneas en ${schema}.${table}: ${error.message}`);
420
- }
421
- }
422
- saveFixLog() {
423
- try {
424
- const logData = {
425
- timestamp: new Date().toISOString(),
426
- targetDatabase: this.targetUrl,
427
- fixCount: this.fixedIndexes.length,
428
- fixes: this.fixedIndexes
429
- };
430
- fs.writeFileSync(this.logPath, JSON.stringify(logData, null, 2), 'utf8');
431
- }
432
- catch (error) {
433
- this.logger.error(`Error guardando log de correcciones: ${error.message}`);
434
- }
435
- }
436
- async cleanup() {
437
- try {
438
- await this.targetPool.end();
439
- }
440
- catch (error) {
441
- this.logger.error(`Error durante la limpieza: ${error.message}`);
442
- }
443
- }
444
- }
445
- exports.TableIndexFixer = TableIndexFixer;
446
- if (require.main === module) {
447
- const run = async () => {
448
- try {
449
- const indexFixer = new TableIndexFixer();
450
- await indexFixer.fixIndexes();
451
- process.exit(0);
452
- }
453
- catch (error) {
454
- console.error("Error:", error.message);
455
- process.exit(1);
456
- }
457
- };
458
- run();
459
- }
460
- //# sourceMappingURL=fix-table-indexes.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"fix-table-indexes.js","sourceRoot":"","sources":["../../src/scripts/fix-table-indexes.ts"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- export {};
@@ -1,76 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const client_1 = require("@prisma/client");
4
- const child_process_1 = require("child_process");
5
- const util_1 = require("util");
6
- const dotenv = require("dotenv");
7
- dotenv.config();
8
- const execAsync = (0, util_1.promisify)(child_process_1.exec);
9
- async function migrateSchemaStructure() {
10
- const sourcePrisma = new client_1.PrismaClient({
11
- datasources: {
12
- db: {
13
- url: process.env.SOURCE_DATABASE_URL,
14
- },
15
- },
16
- });
17
- const targetPrisma = new client_1.PrismaClient({
18
- datasources: {
19
- db: {
20
- url: process.env.DATABASE_URL,
21
- },
22
- },
23
- });
24
- try {
25
- console.log("Fetching API keys and creating schemas...");
26
- const apiKeys = await sourcePrisma.api_keys.findMany({
27
- select: {
28
- api_key: true,
29
- providers: {
30
- select: {
31
- name: true,
32
- },
33
- },
34
- },
35
- });
36
- for (const apiKey of apiKeys) {
37
- const schemaName = apiKey.api_key;
38
- await targetPrisma.$executeRawUnsafe(`CREATE SCHEMA IF NOT EXISTS "${schemaName}"`);
39
- const dbUrl = `${process.env.DATABASE_URL}?schema=${schemaName}`;
40
- await execAsync(`DATABASE_URL="${dbUrl}" npx prisma db push --schema ./prisma/schema.prisma --skip-generate`);
41
- const schemaExists = await checkSchemaExists(schemaName);
42
- if (!schemaExists) {
43
- throw new Error(`Failed to create schema ${schemaName}`);
44
- }
45
- }
46
- console.log("Schema structure migration completed successfully");
47
- }
48
- catch (error) {
49
- console.error("Error in schema migration process:", error);
50
- throw error;
51
- }
52
- finally {
53
- await sourcePrisma.$disconnect();
54
- await targetPrisma.$disconnect();
55
- }
56
- }
57
- async function checkSchemaExists(schemaName) {
58
- const prisma = new client_1.PrismaClient();
59
- try {
60
- const result = await prisma.$queryRaw `
61
- SELECT schema_name
62
- FROM information_schema.schemata
63
- WHERE schema_name = ${schemaName}
64
- `;
65
- return Array.isArray(result) && result.length > 0;
66
- }
67
- catch (error) {
68
- console.error(`Error checking if schema exists: ${error}`);
69
- return false;
70
- }
71
- finally {
72
- await prisma.$disconnect();
73
- }
74
- }
75
- migrateSchemaStructure().catch(console.error);
76
- //# sourceMappingURL=migrate-schema-structure.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"migrate-schema-structure.js","sourceRoot":"","sources":["../../src/scripts/migrate-schema-structure.ts"],"names":[],"mappings":";;AAAA,2CAA8C;AAC9C,iDAAqC;AACrC,+BAAiC;AACjC,iCAAiC;AAEjC,MAAM,CAAC,MAAM,EAAE,CAAC;AAEhB,MAAM,SAAS,GAAG,IAAA,gBAAS,EAAC,oBAAI,CAAC,CAAC;AAElC,KAAK,UAAU,sBAAsB;IACnC,MAAM,YAAY,GAAG,IAAI,qBAAY,CAAC;QACpC,WAAW,EAAE;YACX,EAAE,EAAE;gBACF,GAAG,EAAE,OAAO,CAAC,GAAG,CAAC,mBAAmB;aACrC;SACF;KACF,CAAC,CAAC;IAEH,MAAM,YAAY,GAAG,IAAI,qBAAY,CAAC;QACpC,WAAW,EAAE;YACX,EAAE,EAAE;gBACF,GAAG,EAAE,OAAO,CAAC,GAAG,CAAC,YAAY;aAC9B;SACF;KACF,CAAC,CAAC;IAEH,IAAI,CAAC;QACH,OAAO,CAAC,GAAG,CAAC,2CAA2C,CAAC,CAAC;QAEzD,MAAM,OAAO,GAAG,MAAM,YAAY,CAAC,QAAQ,CAAC,QAAQ,CAAC;YACnD,MAAM,EAAE;gBACN,OAAO,EAAE,IAAI;gBACb,SAAS,EAAE;oBACT,MAAM,EAAE;wBACN,IAAI,EAAE,IAAI;qBACX;iBACF;aACF;SACF,CAAC,CAAC;QAEH,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;YAC7B,MAAM,UAAU,GAAG,MAAM,CAAC,OAAO,CAAC;YAGlC,MAAM,YAAY,CAAC,iBAAiB,CAClC,gCAAgC,UAAU,GAAG,CAC9C,CAAC;YAGF,MAAM,KAAK,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,YAAY,WAAW,UAAU,EAAE,CAAC;YACjE,MAAM,SAAS,CACb,iBAAiB,KAAK,sEAAsE,CAC7F,CAAC;YAGF,MAAM,YAAY,GAAG,MAAM,iBAAiB,CAAC,UAAU,CAAC,CAAC;YACzD,IAAI,CAAC,YAAY,EAAE,CAAC;gBAClB,MAAM,IAAI,KAAK,CAAC,2BAA2B,UAAU,EAAE,CAAC,CAAC;YAC3D,CAAC;QACH,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,mDAAmD,CAAC,CAAC;IACnE,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,oCAAoC,EAAE,KAAK,CAAC,CAAC;QAC3D,MAAM,KAAK,CAAC;IACd,CAAC;YAAS,CAAC;QACT,MAAM,YAAY,CAAC,WAAW,EAAE,CAAC;QACjC,MAAM,YAAY,CAAC,WAAW,EAAE,CAAC;IACnC,CAAC;AACH,CAAC;AAED,KAAK,UAAU,iBAAiB,CAAC,UAAkB;IACjD,MAAM,MAAM,GAAG,IAAI,qBAAY,EAAE,CAAC;IAClC,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,SAAS,CAAA;;;4BAGb,UAAU;KACjC,CAAC;QAEF,OAAO,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC;IACpD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,oCAAoC,KAAK,EAAE,CAAC,CAAC;QAC3D,OAAO,KAAK,CAAC;IACf,CAAC;YAAS,CAAC;QACT,MAAM,MAAM,CAAC,WAAW,EAAE,CAAC;IAC7B,CAAC;AACH,CAAC;AAED,sBAAsB,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC"}
@@ -1,2 +0,0 @@
1
- declare function migrateUuid(): Promise<void>;
2
- export { migrateUuid };
@@ -1,57 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.migrateUuid = migrateUuid;
4
- const client_1 = require("@prisma/client");
5
- const prisma = new client_1.PrismaClient();
6
- async function migrateUuid() {
7
- try {
8
- console.log("🚀 Iniciando migración de UUID...");
9
- console.log("\n📦 Habilitando extensión uuid-ossp...");
10
- await prisma.$executeRaw `CREATE EXTENSION IF NOT EXISTS "uuid-ossp";`;
11
- console.log("\n🔍 Verificando registros sin UUID...");
12
- const nullUuids = await prisma.$queryRaw `
13
- SELECT COUNT(*) as count
14
- FROM transactions
15
- WHERE uuid IS NULL;
16
- `;
17
- if (nullUuids[0].count > 0) {
18
- console.log(`\n📝 Actualizando ${nullUuids[0].count} registros sin UUID...`);
19
- await prisma.$executeRaw `
20
- UPDATE transactions
21
- SET uuid = uuid_generate_v4()
22
- WHERE uuid IS NULL;
23
- `;
24
- }
25
- console.log("\n🔍 Verificando registros después de la actualización...");
26
- const remainingNullUuids = await prisma.$queryRaw `
27
- SELECT COUNT(*) as count
28
- FROM transactions
29
- WHERE uuid IS NULL;
30
- `;
31
- if (remainingNullUuids[0].count > 0) {
32
- throw new Error(`Aún hay ${remainingNullUuids[0].count} registros sin UUID después de la actualización`);
33
- }
34
- console.log("\n📝 Haciendo UUID requerido y añadiendo valor por defecto...");
35
- await prisma.$executeRaw `
36
- ALTER TABLE transactions
37
- ALTER COLUMN uuid SET NOT NULL;
38
- `;
39
- await prisma.$executeRaw `
40
- ALTER TABLE transactions
41
- ALTER COLUMN uuid
42
- SET DEFAULT uuid_generate_v4();
43
- `;
44
- console.log("\n✅ Migración completada exitosamente");
45
- }
46
- catch (error) {
47
- console.error("\n❌ Error durante la migración:", error);
48
- process.exit(1);
49
- }
50
- finally {
51
- await prisma.$disconnect();
52
- }
53
- }
54
- if (require.main === module) {
55
- migrateUuid();
56
- }
57
- //# sourceMappingURL=migrate-uuid.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"migrate-uuid.js","sourceRoot":"","sources":["../../src/scripts/migrate-uuid.ts"],"names":[],"mappings":";;AA2ES,kCAAW;AA1EpB,2CAA8C;AAE9C,MAAM,MAAM,GAAG,IAAI,qBAAY,EAAE,CAAC;AAElC,KAAK,UAAU,WAAW;IACxB,IAAI,CAAC;QACH,OAAO,CAAC,GAAG,CAAC,mCAAmC,CAAC,CAAC;QAGjD,OAAO,CAAC,GAAG,CAAC,yCAAyC,CAAC,CAAC;QACvD,MAAM,MAAM,CAAC,WAAW,CAAA,6CAA6C,CAAC;QAGtE,OAAO,CAAC,GAAG,CAAC,wCAAwC,CAAC,CAAC;QACtD,MAAM,SAAS,GAAG,MAAM,MAAM,CAAC,SAAS,CAAA;;;;KAIvC,CAAC;QAEF,IAAI,SAAS,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,EAAE,CAAC;YAC3B,OAAO,CAAC,GAAG,CACT,qBAAqB,SAAS,CAAC,CAAC,CAAC,CAAC,KAAK,wBAAwB,CAChE,CAAC;YACF,MAAM,MAAM,CAAC,WAAW,CAAA;;;;OAIvB,CAAC;QACJ,CAAC;QAGD,OAAO,CAAC,GAAG,CAAC,2DAA2D,CAAC,CAAC;QACzE,MAAM,kBAAkB,GAAG,MAAM,MAAM,CAAC,SAAS,CAAA;;;;KAIhD,CAAC;QAEF,IAAI,kBAAkB,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,EAAE,CAAC;YACpC,MAAM,IAAI,KAAK,CACb,WAAW,kBAAkB,CAAC,CAAC,CAAC,CAAC,KAAK,iDAAiD,CACxF,CAAC;QACJ,CAAC;QAGD,OAAO,CAAC,GAAG,CACT,+DAA+D,CAChE,CAAC;QACF,MAAM,MAAM,CAAC,WAAW,CAAA;;;KAGvB,CAAC;QAEF,MAAM,MAAM,CAAC,WAAW,CAAA;;;;KAIvB,CAAC;QAEF,OAAO,CAAC,GAAG,CAAC,uCAAuC,CAAC,CAAC;IACvD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,iCAAiC,EAAE,KAAK,CAAC,CAAC;QACxD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;YAAS,CAAC;QACT,MAAM,MAAM,CAAC,WAAW,EAAE,CAAC;IAC7B,CAAC;AACH,CAAC;AAGD,IAAI,OAAO,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;IAC5B,WAAW,EAAE,CAAC;AAChB,CAAC"}