@javalabs/prisma-client 1.0.16 → 1.0.19

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 (106) hide show
  1. package/.dockerignore +14 -0
  2. package/Dockerfile +23 -0
  3. package/README.md +269 -269
  4. package/dist/index.d.ts +1 -1
  5. package/dist/prisma.service.d.ts +1 -1
  6. package/dist/scripts/add-uuid-to-table.js +32 -32
  7. package/dist/scripts/data-migration/batch-migrator.js +12 -12
  8. package/dist/scripts/data-migration/data-transformer.js +14 -14
  9. package/dist/scripts/data-migration/dependency-resolver.js +23 -23
  10. package/dist/scripts/data-migration/entity-discovery.js +68 -68
  11. package/dist/scripts/data-migration/foreign-key-manager.js +23 -23
  12. package/dist/scripts/data-migration/migration-tool.js +5 -5
  13. package/dist/scripts/data-migration/schema-utils.js +74 -74
  14. package/dist/scripts/data-migration/typecast-manager.js +4 -4
  15. package/dist/scripts/database-initializer.js +5 -5
  16. package/dist/scripts/drop-database.js +5 -5
  17. package/dist/scripts/fix-data-types.js +53 -53
  18. package/dist/scripts/fix-enum-values.js +34 -34
  19. package/dist/scripts/fix-schema-discrepancies.js +40 -40
  20. package/dist/scripts/fix-table-indexes.js +81 -81
  21. package/dist/scripts/migrate-schema-structure.js +4 -4
  22. package/dist/scripts/migrate-uuid.js +19 -19
  23. package/dist/scripts/post-migration-validator.js +49 -49
  24. package/dist/scripts/pre-migration-validator.js +107 -107
  25. package/dist/scripts/reset-database.js +21 -21
  26. package/dist/scripts/retry-failed-migrations.js +28 -28
  27. package/dist/scripts/run-migration.js +5 -5
  28. package/dist/scripts/schema-sync.js +18 -18
  29. package/dist/scripts/sequence-sync-cli.js +55 -55
  30. package/dist/scripts/sequence-synchronizer.js +20 -20
  31. package/dist/scripts/sync-enum-types.js +30 -30
  32. package/dist/scripts/sync-enum-values.js +52 -52
  33. package/dist/scripts/truncate-database.js +10 -10
  34. package/dist/scripts/verify-migration-setup.js +10 -10
  35. package/dist/tsconfig.tsbuildinfo +1 -1
  36. package/migration-config.json +63 -63
  37. package/migration-config.json.bk +95 -95
  38. package/package.json +44 -44
  39. package/prisma/migrations/add_accepts_partial_payments_to_users.sql +19 -0
  40. package/prisma/migrations/add_amount_received_to_manual_payments.sql +19 -0
  41. package/prisma/migrations/add_commission_fields.sql +33 -0
  42. package/prisma/migrations/add_uuid_to_transactions.sql +13 -13
  43. package/prisma/migrations/complete_partial_payments_migration.sql +53 -0
  44. package/prisma/migrations/create_settlements_table.sql +60 -0
  45. package/prisma/schema.prisma +56 -4
  46. package/src/index.ts +23 -23
  47. package/src/prisma-factory.service.ts +40 -40
  48. package/src/prisma.module.ts +9 -9
  49. package/src/prisma.service.ts +16 -16
  50. package/src/scripts/add-uuid-to-table.ts +138 -138
  51. package/src/scripts/create-tenant-schemas.ts +145 -145
  52. package/src/scripts/data-migration/batch-migrator.ts +248 -248
  53. package/src/scripts/data-migration/data-transformer.ts +426 -426
  54. package/src/scripts/data-migration/db-connector.ts +120 -120
  55. package/src/scripts/data-migration/dependency-resolver.ts +174 -174
  56. package/src/scripts/data-migration/entity-discovery.ts +196 -196
  57. package/src/scripts/data-migration/foreign-key-manager.ts +277 -277
  58. package/src/scripts/data-migration/migration-config.json +63 -63
  59. package/src/scripts/data-migration/migration-tool.ts +509 -509
  60. package/src/scripts/data-migration/schema-utils.ts +248 -248
  61. package/src/scripts/data-migration/tenant-migrator.ts +201 -201
  62. package/src/scripts/data-migration/typecast-manager.ts +193 -193
  63. package/src/scripts/data-migration/types.ts +113 -113
  64. package/src/scripts/database-initializer.ts +49 -49
  65. package/src/scripts/drop-database.ts +104 -104
  66. package/src/scripts/dump-source-db.sh +61 -61
  67. package/src/scripts/encrypt-user-passwords.ts +36 -36
  68. package/src/scripts/error-handler.ts +117 -117
  69. package/src/scripts/fix-data-types.ts +241 -241
  70. package/src/scripts/fix-enum-values.ts +357 -357
  71. package/src/scripts/fix-schema-discrepancies.ts +317 -317
  72. package/src/scripts/fix-table-indexes.ts +601 -601
  73. package/src/scripts/migrate-schema-structure.ts +90 -90
  74. package/src/scripts/migrate-uuid.ts +76 -76
  75. package/src/scripts/post-migration-validator.ts +526 -526
  76. package/src/scripts/pre-migration-validator.ts +610 -610
  77. package/src/scripts/reset-database.ts +263 -263
  78. package/src/scripts/retry-failed-migrations.ts +416 -416
  79. package/src/scripts/run-migration.ts +707 -707
  80. package/src/scripts/schema-sync.ts +128 -128
  81. package/src/scripts/sequence-sync-cli.ts +416 -416
  82. package/src/scripts/sequence-synchronizer.ts +127 -127
  83. package/src/scripts/sync-enum-types.ts +170 -170
  84. package/src/scripts/sync-enum-values.ts +563 -563
  85. package/src/scripts/truncate-database.ts +123 -123
  86. package/src/scripts/verify-migration-setup.ts +135 -135
  87. package/tsconfig.json +17 -17
  88. package/dist/scripts/data-migration/dependency-manager.d.ts +0 -9
  89. package/dist/scripts/data-migration/dependency-manager.js +0 -86
  90. package/dist/scripts/data-migration/dependency-manager.js.map +0 -1
  91. package/dist/scripts/data-migration/migration-config.json +0 -63
  92. package/dist/scripts/data-migration/migration-phases.d.ts +0 -5
  93. package/dist/scripts/data-migration/migration-phases.js +0 -55
  94. package/dist/scripts/data-migration/migration-phases.js.map +0 -1
  95. package/dist/scripts/data-migration/multi-source-migrator.d.ts +0 -17
  96. package/dist/scripts/data-migration/multi-source-migrator.js +0 -130
  97. package/dist/scripts/data-migration/multi-source-migrator.js.map +0 -1
  98. package/dist/scripts/data-migration/phase-generator.d.ts +0 -15
  99. package/dist/scripts/data-migration/phase-generator.js +0 -187
  100. package/dist/scripts/data-migration/phase-generator.js.map +0 -1
  101. package/dist/scripts/data-migration.d.ts +0 -22
  102. package/dist/scripts/data-migration.js +0 -593
  103. package/dist/scripts/data-migration.js.map +0 -1
  104. package/dist/scripts/multi-db-migration.d.ts +0 -1
  105. package/dist/scripts/multi-db-migration.js +0 -55
  106. package/dist/scripts/multi-db-migration.js.map +0 -1
@@ -1,593 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.DataMigrationTool = void 0;
4
- const client_1 = require("@prisma/client");
5
- const dotenv = require("dotenv");
6
- const common_1 = require("@nestjs/common");
7
- const pg = require("pg");
8
- dotenv.config();
9
- const error_handler_1 = require("./error-handler");
10
- class DataMigrationTool {
11
- constructor() {
12
- this.logger = new common_1.Logger("DataMigrationTool");
13
- this.schemaCache = {};
14
- this.targetSchemaCache = {};
15
- this.errorHandler = new error_handler_1.MigrationErrorHandler();
16
- this.sourcePool = new pg.Pool({
17
- connectionString: process.env.SOURCE_DATABASE_URL,
18
- });
19
- this.targetPool = new pg.Pool({
20
- connectionString: process.env.DATABASE_URL,
21
- });
22
- this.sourcePrisma = new client_1.PrismaClient({
23
- datasources: {
24
- db: {
25
- url: process.env.SOURCE_DATABASE_URL,
26
- },
27
- },
28
- });
29
- this.targetPrisma = new client_1.PrismaClient({
30
- datasources: {
31
- db: {
32
- url: process.env.DATABASE_URL,
33
- },
34
- },
35
- });
36
- }
37
- async migrateData() {
38
- try {
39
- this.logger.log("Starting data migration process");
40
- const apiKeys = await this.sourcePrisma.api_keys.findMany({
41
- select: {
42
- api_key: true,
43
- provider_id: true,
44
- },
45
- });
46
- this.logger.log(`Found ${apiKeys.length} API keys to migrate data for`);
47
- for (const apiKey of apiKeys) {
48
- await this.migrateDataForTenant(apiKey.api_key, apiKey.provider_id);
49
- }
50
- this.logger.log("Data migration completed successfully");
51
- const errorReport = this.errorHandler.generateErrorReport();
52
- this.logger.log("Error Report:\n" + errorReport);
53
- }
54
- catch (error) {
55
- this.logger.error(`Error during data migration: ${error.message}`, error.stack);
56
- }
57
- finally {
58
- await this.cleanup();
59
- }
60
- }
61
- async migrateDataForTenant(tenantId, providerId) {
62
- this.logger.log(`Migrating data for tenant: ${tenantId} (Provider ID: ${providerId})`);
63
- const tenantPrisma = new client_1.PrismaClient({
64
- datasources: {
65
- db: {
66
- url: `${process.env.DATABASE_URL}?schema=${tenantId}`,
67
- },
68
- },
69
- transactionOptions: {
70
- maxWait: 120000,
71
- timeout: 120000,
72
- },
73
- });
74
- try {
75
- const schemaExists = await this.checkSchemaExists(tenantId);
76
- if (!schemaExists) {
77
- this.logger.error(`Schema ${tenantId} does not exist in target database. Skipping migration.`);
78
- return;
79
- }
80
- const targetTables = await this.getTargetTables(tenantId);
81
- const entityTypes = await this.discoverEntityTypes(tenantId, targetTables);
82
- this.logger.log(`Discovered ${entityTypes.length} entity types for migration`);
83
- for (const entity of entityTypes) {
84
- await this.migrateEntityDataInBatches(tenantPrisma, entity, providerId, tenantId);
85
- }
86
- this.logger.log(`Successfully migrated data for tenant: ${tenantId}`);
87
- }
88
- catch (error) {
89
- this.logger.error(`Error migrating data for tenant ${tenantId}: ${error.message}`, error.stack);
90
- }
91
- finally {
92
- await tenantPrisma.$disconnect();
93
- }
94
- }
95
- async getEnumValues(schemaName, enumName) {
96
- try {
97
- const query = `
98
- SELECT e.enumlabel
99
- FROM pg_type t
100
- JOIN pg_enum e ON t.oid = e.enumtypid
101
- JOIN pg_catalog.pg_namespace n ON n.oid = t.typnamespace
102
- WHERE t.typname = $1
103
- AND n.nspname = $2
104
- `;
105
- const result = await this.targetPool.query(query, [enumName, schemaName]);
106
- return result.rows.map((row) => row.enumlabel);
107
- }
108
- catch (error) {
109
- this.logger.error(`Error getting enum values for ${enumName}: ${error.message}`);
110
- return [];
111
- }
112
- }
113
- async migrateEntityDataInBatches(prisma, entity, providerId, tenantId) {
114
- const { name, idField, foreignKey, joinTable, joinField, joinForeignKey, directQuery, } = entity;
115
- const BATCH_SIZE = 10;
116
- this.logger.log(`Migrating ${name} for provider ID: ${providerId} in batches`);
117
- try {
118
- if (!this.schemaCache[name]) {
119
- this.schemaCache[name] = await this.getTableSchema(name, "source");
120
- }
121
- if (!this.targetSchemaCache[`${tenantId}.${name}`]) {
122
- this.targetSchemaCache[`${tenantId}.${name}`] =
123
- await this.getTableSchema(name, "target", tenantId);
124
- }
125
- const sourceTableSchema = this.schemaCache[name];
126
- const targetTableSchema = this.targetSchemaCache[`${tenantId}.${name}`];
127
- if (!sourceTableSchema.length) {
128
- this.logger.warn(`Source table ${name} schema not found. Skipping.`);
129
- return;
130
- }
131
- if (!targetTableSchema.length) {
132
- this.logger.warn(`Target table ${name} schema not found in schema ${tenantId}. Skipping.`);
133
- return;
134
- }
135
- let query = "";
136
- let queryParams = [];
137
- if (directQuery) {
138
- query = directQuery;
139
- }
140
- else if (joinTable) {
141
- query = `
142
- SELECT e.* FROM ${name} e
143
- JOIN ${joinTable} j ON e.${joinField} = j.${idField}
144
- WHERE j.${joinForeignKey} = $1
145
- `;
146
- queryParams = [providerId];
147
- }
148
- else if (foreignKey) {
149
- query = `
150
- SELECT * FROM ${name} WHERE ${foreignKey} = $1
151
- `;
152
- queryParams = [providerId];
153
- }
154
- else {
155
- query = `SELECT * FROM ${name} LIMIT 1000`;
156
- }
157
- const sourceData = await this.sourcePool.query(query, queryParams);
158
- const totalRecords = sourceData.rows.length;
159
- this.logger.log(`Found ${totalRecords} ${name} to migrate in ${Math.ceil(totalRecords / BATCH_SIZE)} batches`);
160
- let processedCount = 0;
161
- let successCount = 0;
162
- let errorCount = 0;
163
- for (const row of sourceData.rows) {
164
- try {
165
- let retryCount = 0;
166
- const maxRetries = 3;
167
- let success = false;
168
- while (!success && retryCount < maxRetries) {
169
- try {
170
- await prisma.$transaction(async (tx) => {
171
- const findQuery = `SELECT "${idField}" FROM "${tenantId}"."${name}" WHERE "${idField}" = $1 LIMIT 1`;
172
- const existingRecords = await tx.$queryRawUnsafe(findQuery, row[idField]);
173
- const existingRecord = Array.isArray(existingRecords) && existingRecords.length > 0
174
- ? existingRecords[0]
175
- : null;
176
- const createData = {};
177
- const updateData = {};
178
- const targetColumnNames = targetTableSchema.map((col) => col.column_name);
179
- const columnNames = [];
180
- const placeholders = [];
181
- const values = [];
182
- let placeholderIndex = 1;
183
- for (const column of sourceTableSchema) {
184
- const columnName = column.column_name;
185
- if (!Object.prototype.hasOwnProperty.call(row, columnName) ||
186
- !targetColumnNames.includes(columnName)) {
187
- continue;
188
- }
189
- columnNames.push(`"${columnName}"`);
190
- const targetColumn = targetTableSchema.find((tc) => tc.column_name === columnName);
191
- if (targetColumn &&
192
- targetColumn.data_type === "USER-DEFINED" &&
193
- targetColumn.udt_name &&
194
- targetColumn.udt_name.startsWith("enum_")) {
195
- if (row[columnName] === null || row[columnName] === "") {
196
- createData[columnName] = null;
197
- updateData[columnName] = null;
198
- placeholders.push(`NULL`);
199
- }
200
- else {
201
- const validatedValue = await this.validateEnumValue(tenantId, targetColumn.udt_name, row[columnName]);
202
- if (validatedValue !== null) {
203
- createData[columnName] = {
204
- needsEnumCast: true,
205
- value: validatedValue,
206
- enumType: targetColumn.udt_name,
207
- };
208
- updateData[columnName] = {
209
- needsEnumCast: true,
210
- value: validatedValue,
211
- enumType: targetColumn.udt_name,
212
- };
213
- placeholders.push(`$${placeholderIndex}::${tenantId}.${targetColumn.udt_name}`);
214
- values.push(validatedValue);
215
- }
216
- else {
217
- this.logger.warn(`Skipping invalid enum value "${row[columnName]}" for field ${columnName} in ${name} with ID ${row[idField]}`);
218
- columnNames.pop();
219
- continue;
220
- }
221
- }
222
- }
223
- else if (targetColumn &&
224
- targetColumn.data_type === "numeric" &&
225
- row[columnName] !== null) {
226
- const numericValue = parseFloat(row[columnName]);
227
- if (!isNaN(numericValue)) {
228
- createData[columnName] = numericValue;
229
- updateData[columnName] = numericValue;
230
- placeholders.push(`$${placeholderIndex}::numeric`);
231
- values.push(numericValue);
232
- }
233
- else if (row[columnName] === "" ||
234
- row[columnName] === null) {
235
- createData[columnName] = null;
236
- updateData[columnName] = null;
237
- placeholders.push(`NULL`);
238
- }
239
- else {
240
- this.logger.warn(`Skipping non-numeric value "${row[columnName]}" for numeric field ${columnName} in ${name} with ID ${row[idField]}`);
241
- columnNames.pop();
242
- continue;
243
- }
244
- }
245
- else {
246
- createData[columnName] = row[columnName];
247
- updateData[columnName] = row[columnName];
248
- placeholders.push(`$${placeholderIndex}`);
249
- values.push(row[columnName]);
250
- }
251
- placeholderIndex++;
252
- }
253
- if (targetColumnNames.includes(idField)) {
254
- createData[idField] = row[idField];
255
- }
256
- if (Object.keys(createData).length === 0) {
257
- this.logger.warn(`No valid fields to migrate for ${name} with ID ${row[idField]}`);
258
- return;
259
- }
260
- if (existingRecord) {
261
- const setClauses = [];
262
- const updateValues = [row[idField]];
263
- let paramIndex = 2;
264
- for (const [key, value] of Object.entries(updateData)) {
265
- if (value &&
266
- typeof value === "object" &&
267
- "needsEnumCast" in value) {
268
- setClauses.push(`"${key}" = CAST($${paramIndex} AS "${tenantId}".${value.enumType})`);
269
- updateValues.push(value.value);
270
- }
271
- else {
272
- const targetColumn = targetTableSchema.find((tc) => tc.column_name === key);
273
- if (targetColumn &&
274
- targetColumn.data_type === "numeric" &&
275
- value !== null) {
276
- setClauses.push(`"${key}" = CAST($${paramIndex} AS NUMERIC)`);
277
- }
278
- else {
279
- setClauses.push(`"${key}" = $${paramIndex}`);
280
- }
281
- updateValues.push(value);
282
- }
283
- paramIndex++;
284
- }
285
- const setClause = setClauses.join(", ");
286
- const updateQuery = `UPDATE "${tenantId}"."${name}" SET ${setClause} WHERE "${idField}" = $1`;
287
- await tx.$executeRawUnsafe(updateQuery, ...updateValues);
288
- }
289
- else {
290
- const columns = Object.keys(createData)
291
- .map((key) => `"${key}"`)
292
- .join(", ");
293
- const insertPlaceholders = [];
294
- const insertValues = [];
295
- for (let i = 0; i < Object.keys(createData).length; i++) {
296
- const key = Object.keys(createData)[i];
297
- const value = Object.values(createData)[i];
298
- if (value &&
299
- typeof value === "object" &&
300
- "needsEnumCast" in value) {
301
- insertPlaceholders.push(`CAST($${i + 1} AS "${tenantId}".${value.enumType})`);
302
- insertValues.push(value.value);
303
- }
304
- else {
305
- const targetColumn = targetTableSchema.find((tc) => tc.column_name === key);
306
- if (targetColumn &&
307
- targetColumn.data_type === "numeric" &&
308
- value !== null) {
309
- insertPlaceholders.push(`CAST($${i + 1} AS NUMERIC)`);
310
- }
311
- else {
312
- insertPlaceholders.push(`$${i + 1}`);
313
- }
314
- insertValues.push(value);
315
- }
316
- }
317
- const insertQuery = `INSERT INTO "${tenantId}"."${name}" (${columns}) VALUES (${insertPlaceholders.join(", ")})`;
318
- await tx.$executeRawUnsafe(insertQuery, ...insertValues);
319
- }
320
- }, {
321
- timeout: 15000,
322
- maxWait: 5000,
323
- });
324
- success = true;
325
- successCount++;
326
- }
327
- catch (txError) {
328
- retryCount++;
329
- if (retryCount < maxRetries) {
330
- this.logger.warn(`Error processing ${name} record with ID ${row[idField]}, retry ${retryCount}/${maxRetries}: ${txError.message}`);
331
- await new Promise((resolve) => setTimeout(resolve, 1000 * retryCount));
332
- }
333
- else {
334
- this.logger.error(`Failed to process ${name} record with ID ${row[idField]} after ${maxRetries} attempts: ${txError.message}`);
335
- this.errorHandler.logError(tenantId, name, row[idField], txError, row);
336
- errorCount++;
337
- }
338
- }
339
- }
340
- }
341
- catch (rowError) {
342
- if (this.errorHandler) {
343
- this.errorHandler.logError(tenantId, name, row[idField], rowError, row);
344
- }
345
- else {
346
- this.logger.error(`Error handler not initialized. Error processing ${name} record with ID ${row[idField]}: ${rowError.message}`);
347
- }
348
- errorCount++;
349
- }
350
- processedCount++;
351
- if (processedCount % 10 === 0 || processedCount === totalRecords) {
352
- this.logger.log(`Progress: ${processedCount}/${totalRecords} ${name} processed (${successCount} success, ${errorCount} errors)`);
353
- }
354
- }
355
- this.logger.log(`Completed migration of ${name}: ${successCount} records migrated successfully, ${errorCount} errors`);
356
- }
357
- catch (error) {
358
- this.logger.error(`Error migrating ${name}: ${error.message}`, error.stack);
359
- if (this.errorHandler) {
360
- this.errorHandler.logError(tenantId, name, "batch", error);
361
- }
362
- }
363
- }
364
- async discoverEntityTypes(schemaName, tables) {
365
- const entityTypes = [];
366
- try {
367
- const foreignKeyQuery = `
368
- SELECT
369
- tc.table_name,
370
- kcu.column_name,
371
- ccu.table_name AS foreign_table_name,
372
- ccu.column_name AS foreign_column_name
373
- FROM
374
- information_schema.table_constraints AS tc
375
- JOIN information_schema.key_column_usage AS kcu
376
- ON tc.constraint_name = kcu.constraint_name
377
- AND tc.table_schema = kcu.table_schema
378
- JOIN information_schema.constraint_column_usage AS ccu
379
- ON ccu.constraint_name = tc.constraint_name
380
- AND ccu.table_schema = tc.table_schema
381
- WHERE
382
- tc.constraint_type = 'FOREIGN KEY'
383
- AND tc.table_schema = $1;
384
- `;
385
- const foreignKeyResult = await this.targetPool.query(foreignKeyQuery, [
386
- schemaName,
387
- ]);
388
- const primaryKeyQuery = `
389
- SELECT
390
- tc.table_name,
391
- kcu.column_name
392
- FROM
393
- information_schema.table_constraints tc
394
- JOIN information_schema.key_column_usage kcu
395
- ON tc.constraint_name = kcu.constraint_name
396
- AND tc.table_schema = kcu.table_schema
397
- WHERE
398
- tc.constraint_type = 'PRIMARY KEY'
399
- AND tc.table_schema = $1;
400
- `;
401
- const primaryKeyResult = await this.targetPool.query(primaryKeyQuery, [
402
- schemaName,
403
- ]);
404
- const primaryKeys = {};
405
- for (const row of primaryKeyResult.rows) {
406
- primaryKeys[row.table_name] = row.column_name;
407
- }
408
- for (const tableName of tables) {
409
- if (tableName.startsWith("_") || tableName.startsWith("pg_")) {
410
- continue;
411
- }
412
- const idField = primaryKeys[tableName] || "id";
413
- const hasProviderIdFK = foreignKeyResult.rows.some((row) => row.table_name === tableName && row.column_name === "provider_id");
414
- if (hasProviderIdFK) {
415
- entityTypes.push({
416
- name: tableName,
417
- idField,
418
- foreignKey: "provider_id",
419
- });
420
- }
421
- else {
422
- const relatedTables = foreignKeyResult.rows.filter((row) => row.foreign_table_name === tableName);
423
- for (const relatedTable of relatedTables) {
424
- const relatedTableHasProviderId = foreignKeyResult.rows.some((row) => row.table_name === relatedTable.table_name &&
425
- row.column_name === "provider_id");
426
- if (relatedTableHasProviderId) {
427
- entityTypes.push({
428
- name: tableName,
429
- idField,
430
- joinTable: relatedTable.table_name,
431
- joinField: relatedTable.column_name,
432
- joinForeignKey: "provider_id",
433
- });
434
- break;
435
- }
436
- }
437
- }
438
- }
439
- for (const tableName of tables) {
440
- if (!entityTypes.some((entity) => entity.name === tableName)) {
441
- this.logger.warn(`Could not determine relationship for table ${tableName}. Adding with default configuration.`);
442
- entityTypes.push({
443
- name: tableName,
444
- idField: primaryKeys[tableName] || "id",
445
- directQuery: `SELECT * FROM ${tableName} LIMIT 1000`,
446
- });
447
- }
448
- }
449
- return entityTypes;
450
- }
451
- catch (error) {
452
- this.logger.error(`Error discovering entity types: ${error.message}`, error.stack);
453
- return [];
454
- }
455
- }
456
- async checkSchemaExists(schemaName) {
457
- try {
458
- const query = `
459
- SELECT schema_name
460
- FROM information_schema.schemata
461
- WHERE schema_name = $1
462
- `;
463
- const result = await this.targetPool.query(query, [schemaName]);
464
- return result.rows.length > 0;
465
- }
466
- catch (error) {
467
- this.logger.error(`Error checking if schema exists: ${error.message}`);
468
- return false;
469
- }
470
- }
471
- async getTargetTables(schemaName) {
472
- try {
473
- const query = `
474
- SELECT table_name
475
- FROM information_schema.tables
476
- WHERE table_schema = $1
477
- `;
478
- const result = await this.targetPool.query(query, [schemaName]);
479
- return result.rows.map((row) => row.table_name);
480
- }
481
- catch (error) {
482
- this.logger.error(`Error getting target tables: ${error.message}`);
483
- return [];
484
- }
485
- }
486
- async upsertEntity(tx, tableName, idField, sourceData, sourceSchema, targetSchema) {
487
- try {
488
- const createData = {};
489
- const updateData = {};
490
- const targetColumnNames = targetSchema.map((col) => col.column_name);
491
- for (const column of sourceSchema) {
492
- const columnName = column.column_name;
493
- if (!Object.prototype.hasOwnProperty.call(sourceData, columnName) ||
494
- !targetColumnNames.includes(columnName)) {
495
- continue;
496
- }
497
- const targetColumn = targetSchema.find((tc) => tc.column_name === columnName);
498
- if (targetColumn &&
499
- targetColumn.data_type === "numeric" &&
500
- sourceData[columnName] !== null) {
501
- const numericValue = parseFloat(sourceData[columnName]);
502
- if (!isNaN(numericValue)) {
503
- createData[columnName] = numericValue;
504
- updateData[columnName] = numericValue;
505
- }
506
- else if (sourceData[columnName] === "" ||
507
- sourceData[columnName] === null) {
508
- createData[columnName] = null;
509
- updateData[columnName] = null;
510
- }
511
- else {
512
- this.logger.warn(`Skipping non-numeric value "${sourceData[columnName]}" for numeric field ${columnName} in ${tableName} with ID ${sourceData[idField]}`);
513
- continue;
514
- }
515
- }
516
- else if (targetColumn &&
517
- targetColumn.data_type === "USER-DEFINED" &&
518
- targetColumn.udt_name &&
519
- targetColumn.udt_name.startsWith("enum_")) {
520
- if (sourceData[columnName] === null ||
521
- sourceData[columnName] === "") {
522
- createData[columnName] = null;
523
- updateData[columnName] = null;
524
- }
525
- else {
526
- createData[columnName] = sourceData[columnName];
527
- updateData[columnName] = sourceData[columnName];
528
- }
529
- }
530
- else {
531
- createData[columnName] = sourceData[columnName];
532
- updateData[columnName] = sourceData[columnName];
533
- }
534
- }
535
- if (targetColumnNames.includes(idField)) {
536
- createData[idField] = sourceData[idField];
537
- }
538
- if (Object.keys(createData).length === 0) {
539
- this.logger.warn(`No valid fields to migrate for ${tableName} with ID ${sourceData[idField]}`);
540
- return;
541
- }
542
- await tx[tableName].upsert({
543
- where: { [idField]: sourceData[idField] },
544
- update: updateData,
545
- create: createData,
546
- });
547
- }
548
- catch (error) {
549
- this.logger.error(`Error upserting ${tableName} with ID ${sourceData[idField]}: ${error.message}`);
550
- }
551
- }
552
- async getTableSchema(tableName, dbType, schemaName = "public") {
553
- try {
554
- const schemaQuery = `
555
- SELECT column_name, data_type, column_default, is_nullable
556
- FROM information_schema.columns
557
- WHERE table_name = $1
558
- AND table_schema = $2
559
- ORDER BY ordinal_position
560
- `;
561
- const pool = dbType === "source" ? this.sourcePool : this.targetPool;
562
- const result = await pool.query(schemaQuery, [tableName, schemaName]);
563
- return result.rows;
564
- }
565
- catch (error) {
566
- this.logger.error(`Error getting schema for table ${tableName} in ${dbType} database: ${error.message}`);
567
- return [];
568
- }
569
- }
570
- async cleanup() {
571
- this.logger.log("Cleaning up database connections");
572
- await this.sourcePrisma.$disconnect();
573
- await this.targetPrisma.$disconnect();
574
- await this.sourcePool.end();
575
- await this.targetPool.end();
576
- }
577
- async validateEnumValue(schemaName, enumName, value) {
578
- const allowedValues = await this.getEnumValues(schemaName, enumName);
579
- if (allowedValues.includes(value)) {
580
- return value;
581
- }
582
- const normalizedValue = value.toUpperCase();
583
- if (allowedValues.includes(normalizedValue)) {
584
- this.logger.log(`Mapped enum value '${value}' to '${normalizedValue}'`);
585
- return normalizedValue;
586
- }
587
- this.logger.warn(`Invalid enum value '${value}' for enum ${enumName}. ` +
588
- `Allowed values are: ${allowedValues.join(", ")}`);
589
- return null;
590
- }
591
- }
592
- exports.DataMigrationTool = DataMigrationTool;
593
- //# sourceMappingURL=data-migration.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"data-migration.js","sourceRoot":"","sources":["../../src/scripts/data-migration.ts"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- export {};