@javalabs/prisma-client 1.0.26 → 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 (122) hide show
  1. package/package.json +5 -5
  2. package/prisma/schema.prisma +0 -6
  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 -18
  122. package/prisma/migrations/add_bank_receipt_number.sql +0 -9
@@ -1,134 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.BatchMigrator = void 0;
4
- const common_1 = require("@nestjs/common");
5
- const typecast_manager_1 = require("./typecast-manager");
6
- const BATCH_SIZE = 100;
7
- const MAX_RETRIES = 3;
8
- const RETRY_BASE_DELAY = 1000;
9
- class BatchMigrator {
10
- constructor(schemaUtils, dataTransformer, connections, options, providerId) {
11
- this.schemaUtils = schemaUtils;
12
- this.dataTransformer = dataTransformer;
13
- this.connections = connections;
14
- this.options = options;
15
- this.providerId = providerId;
16
- this.logger = new common_1.Logger("BatchMigrator");
17
- this.typecastManager = new typecast_manager_1.TypecastManager();
18
- }
19
- async validateSchema(sourceColumns, targetColumns) {
20
- for (const targetColumn of targetColumns) {
21
- const sourceColumn = sourceColumns.find((col) => col.column_name === targetColumn.column_name);
22
- if (!sourceColumn) {
23
- if (targetColumn.is_nullable === "NO") {
24
- throw new Error(`Required column ${targetColumn.column_name} not found in source schema`);
25
- }
26
- this.logger.warn(`Column ${targetColumn.column_name} not found in source schema but is nullable`);
27
- continue;
28
- }
29
- if (!this.typecastManager.areTypesCompatible(sourceColumn.data_type, targetColumn.data_type)) {
30
- throw new Error(`Incompatible data types for column ${targetColumn.column_name}: ` +
31
- `source ${sourceColumn.data_type} -> target ${targetColumn.data_type}`);
32
- }
33
- }
34
- }
35
- async migrateEntityDataInBatches(sourceSchema, targetSchema, tableConfig, tenantId) {
36
- const sourceColumns = await this.schemaUtils.getTableColumns(sourceSchema, tableConfig.sourceTable);
37
- const targetColumns = await this.schemaUtils.getTableColumns(targetSchema, tableConfig.targetTable);
38
- await this.validateSchema(sourceColumns, targetColumns);
39
- let offset = 0;
40
- let hasMoreRecords = true;
41
- let retryCount = 0;
42
- while (hasMoreRecords) {
43
- try {
44
- const records = await this.fetchBatch(sourceSchema, tableConfig, offset, BATCH_SIZE);
45
- if (records.length === 0) {
46
- hasMoreRecords = false;
47
- continue;
48
- }
49
- await this.processBatchWithTransaction(records, targetSchema, tableConfig, sourceColumns, targetColumns, tenantId);
50
- offset += BATCH_SIZE;
51
- retryCount = 0;
52
- }
53
- catch (error) {
54
- if (retryCount < MAX_RETRIES) {
55
- retryCount++;
56
- const delay = RETRY_BASE_DELAY * Math.pow(2, retryCount - 1);
57
- this.logger.warn(`Error processing batch, retrying in ${delay}ms (attempt ${retryCount}/${MAX_RETRIES}): ${error.message}`);
58
- await new Promise((resolve) => setTimeout(resolve, delay));
59
- }
60
- else {
61
- throw new Error(`Failed to process batch after ${MAX_RETRIES} retries: ${error.message}`);
62
- }
63
- }
64
- }
65
- }
66
- async fetchBatch(sourceSchema, tableConfig, offset, limit) {
67
- const query = `
68
- SELECT *
69
- FROM "${sourceSchema}"."${tableConfig.sourceTable}"
70
- ${this.buildWhereClause(tableConfig)}
71
- ORDER BY "${tableConfig.idField}"
72
- LIMIT ${limit}
73
- OFFSET ${offset}
74
- `;
75
- const result = await this.connections.sourcePool.query(query);
76
- return result.rows;
77
- }
78
- buildWhereClause(tableConfig) {
79
- const conditions = [];
80
- if (this.providerId) {
81
- conditions.push(`"${tableConfig.providerLink}" = '${this.providerId}'`);
82
- }
83
- if (tableConfig.filterColumn) {
84
- conditions.push(`"${tableConfig.filterColumn}" IS NOT NULL`);
85
- }
86
- return conditions.length > 0 ? `WHERE ${conditions.join(" AND ")}` : "";
87
- }
88
- async processBatchWithTransaction(records, targetSchema, tableConfig, sourceColumns, targetColumns, tenantId) {
89
- const client = await this.connections.targetPool.connect();
90
- try {
91
- await client.query("BEGIN");
92
- for (const record of records) {
93
- const transformedRecord = await this.transformRecord(record, sourceColumns, targetColumns, tenantId);
94
- await this.insertRecord(client, targetSchema, tableConfig.targetTable, transformedRecord);
95
- }
96
- await client.query("COMMIT");
97
- }
98
- catch (error) {
99
- await client.query("ROLLBACK");
100
- throw error;
101
- }
102
- finally {
103
- client.release();
104
- }
105
- }
106
- async transformRecord(record, sourceColumns, targetColumns, tenantId) {
107
- const transformedRecord = {};
108
- for (const targetColumn of targetColumns) {
109
- const sourceColumn = sourceColumns.find((col) => col.column_name === targetColumn.column_name);
110
- if (!sourceColumn) {
111
- transformedRecord[targetColumn.column_name] = null;
112
- continue;
113
- }
114
- const value = record[targetColumn.column_name];
115
- transformedRecord[targetColumn.column_name] =
116
- await this.dataTransformer.transformColumnValue(value, targetColumn.column_name, Object.assign(Object.assign({}, targetColumn), { source_type: sourceColumn.data_type }), tenantId);
117
- }
118
- return transformedRecord;
119
- }
120
- async insertRecord(client, schema, table, record) {
121
- const columns = Object.keys(record);
122
- const values = Object.values(record);
123
- const placeholders = values.map((_, i) => `$${i + 1}`).join(", ");
124
- const query = `
125
- INSERT INTO "${schema}"."${table}"
126
- (${columns.map((col) => `"${col}"`).join(", ")})
127
- VALUES (${placeholders})
128
- ON CONFLICT DO NOTHING
129
- `;
130
- await client.query(query, values);
131
- }
132
- }
133
- exports.BatchMigrator = BatchMigrator;
134
- //# sourceMappingURL=batch-migrator.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"batch-migrator.js","sourceRoot":"","sources":["../../../src/scripts/data-migration/batch-migrator.ts"],"names":[],"mappings":"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"}
@@ -1,26 +0,0 @@
1
- import { ColumnSchema, EnumCastValue } from "./types";
2
- import { SchemaUtils } from "./schema-utils";
3
- import { DatabaseConnections } from "./types";
4
- export declare class DataTransformer {
5
- private readonly logger;
6
- private readonly schemaUtils;
7
- private readonly sourceConnection;
8
- private connections;
9
- private migrationConfig;
10
- private options;
11
- private foreignKeyManager;
12
- private readonly typecastManager;
13
- constructor(schemaUtils: SchemaUtils, sourceConnection: any, connections: DatabaseConnections);
14
- validateEnumValue(tableName: string, columnName: string, value: string | null, isNullable?: boolean): Promise<string | null>;
15
- private getEnumTypeName;
16
- transformToNumeric(value: any): number | null;
17
- private getDefaultEnumValue;
18
- prepareEnumValue(tenantId: string, enumType: string, value: string): Promise<EnumCastValue | null>;
19
- transformColumnValue(value: any, columnName: string, targetColumn: ColumnSchema & {
20
- source_type?: string;
21
- }, tenantId: string): Promise<any>;
22
- private getDefaultValue;
23
- private extractEnumValueFromObject;
24
- private handleEnumType;
25
- transformRecord(record: any, sourceSchema: ColumnSchema[], targetSchema: ColumnSchema[], tenantId: string): Promise<any>;
26
- }
@@ -1,278 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.DataTransformer = void 0;
4
- const common_1 = require("@nestjs/common");
5
- const typecast_manager_1 = require("./typecast-manager");
6
- class DataTransformer {
7
- constructor(schemaUtils, sourceConnection, connections) {
8
- this.logger = new common_1.Logger("DataTransformer");
9
- this.schemaUtils = schemaUtils;
10
- this.sourceConnection = sourceConnection;
11
- this.connections = connections;
12
- this.typecastManager = new typecast_manager_1.TypecastManager();
13
- }
14
- async validateEnumValue(tableName, columnName, value, isNullable = true) {
15
- try {
16
- if (value === null) {
17
- return isNullable
18
- ? null
19
- : await this.getDefaultEnumValue(tableName, columnName);
20
- }
21
- const enumTypeName = await this.getEnumTypeName(tableName, columnName);
22
- const normalizedValue = value.toString().trim().toLowerCase();
23
- const query = `SELECT unnest(enum_range(NULL::${enumTypeName})) as enum_value`;
24
- const validValues = await this.connections.sourcePool.query(query);
25
- if (!validValues || !validValues.rows) {
26
- this.logger.warn(`No se pudieron obtener valores válidos para el enum ${enumTypeName}`);
27
- return await this.getDefaultEnumValue(enumTypeName);
28
- }
29
- const enumValues = validValues.rows.map((row) => row.enum_value.toLowerCase());
30
- if (enumValues.includes(normalizedValue)) {
31
- return value.toString().trim();
32
- }
33
- const partialMatch = enumValues.find((enumValue) => enumValue.includes(normalizedValue) ||
34
- normalizedValue.includes(enumValue));
35
- if (partialMatch) {
36
- this.logger.debug(`Valor enum corregido: ${value} -> ${partialMatch} para ${tableName}.${columnName}`);
37
- return partialMatch;
38
- }
39
- const defaultValue = await this.getDefaultEnumValue(enumTypeName);
40
- if (defaultValue) {
41
- this.logger.warn(`Usando valor por defecto ${defaultValue} para ${tableName}.${columnName}`);
42
- return defaultValue;
43
- }
44
- if (!isNullable) {
45
- throw new Error(`No se pudo encontrar un valor válido para el enum ${enumTypeName}`);
46
- }
47
- return null;
48
- }
49
- catch (error) {
50
- this.logger.error(`Error validating enum value for ${tableName}.${columnName}: ${error.message}`);
51
- if (!isNullable) {
52
- return await this.getDefaultEnumValue(tableName, columnName);
53
- }
54
- return null;
55
- }
56
- }
57
- async getEnumTypeName(tableName, columnName) {
58
- const result = await this.connections.sourcePool.query(`
59
- SELECT udt_name
60
- FROM information_schema.columns
61
- WHERE table_name = $1
62
- AND column_name = $2
63
- AND table_schema = 'public'
64
- `, [tableName.replace(/^public\./, ""), columnName]);
65
- if (result.rows.length === 0) {
66
- throw new Error(`No se encontró el tipo de enum para ${tableName}.${columnName}`);
67
- }
68
- return result.rows[0].udt_name;
69
- }
70
- transformToNumeric(value) {
71
- if (value === null || value === "") {
72
- return null;
73
- }
74
- const numericValue = parseFloat(value);
75
- if (isNaN(numericValue)) {
76
- return null;
77
- }
78
- return numericValue;
79
- }
80
- async getDefaultEnumValue(enumType, tenantId = "public") {
81
- try {
82
- const enumDefaults = {
83
- enum_users_role: "user",
84
- enum_account_type: "savings",
85
- enum_transaction_type: "payin",
86
- enum_transaction_status: "pending",
87
- };
88
- if (enumDefaults[enumType]) {
89
- return enumDefaults[enumType];
90
- }
91
- const query = `
92
- SELECT e.enumlabel
93
- FROM pg_type t
94
- JOIN pg_enum e ON t.oid = e.enumtypid
95
- JOIN pg_namespace n ON n.oid = t.typnamespace
96
- WHERE t.typname = $1 AND n.nspname = $2
97
- ORDER BY e.enumsortorder
98
- LIMIT 1
99
- `;
100
- const result = await this.schemaUtils.queryTargetDb(query, [
101
- enumType,
102
- tenantId,
103
- ]);
104
- if (result.rows.length > 0) {
105
- return result.rows[0].enumlabel;
106
- }
107
- return null;
108
- }
109
- catch (error) {
110
- this.logger.error(`Error getting default enum value for ${enumType}: ${error.message}`);
111
- return null;
112
- }
113
- }
114
- async prepareEnumValue(tenantId, enumType, value) {
115
- if (value === null || value === undefined || value === "") {
116
- return null;
117
- }
118
- const validatedValue = await this.validateEnumValue(tenantId, enumType, value);
119
- if (validatedValue === null) {
120
- const defaultValue = await this.getDefaultEnumValue(enumType, tenantId);
121
- if (defaultValue) {
122
- this.logger.warn(`Using first enum value '${defaultValue}' as default for invalid value '${value}' of type ${enumType}`);
123
- return {
124
- needsEnumCast: true,
125
- value: defaultValue,
126
- enumType,
127
- };
128
- }
129
- return null;
130
- }
131
- return {
132
- needsEnumCast: true,
133
- value: validatedValue,
134
- enumType,
135
- };
136
- }
137
- async transformColumnValue(value, columnName, targetColumn, tenantId) {
138
- if (value === null || value === undefined) {
139
- return targetColumn.is_nullable === "YES"
140
- ? null
141
- : this.getDefaultValue(targetColumn);
142
- }
143
- try {
144
- if (targetColumn.source_type) {
145
- return this.typecastManager.castValue(value, targetColumn.source_type, targetColumn.data_type);
146
- }
147
- switch (targetColumn.data_type.toLowerCase()) {
148
- case "integer":
149
- case "bigint":
150
- case "smallint":
151
- return typeof value === "string" ? parseInt(value, 10) : value;
152
- case "numeric":
153
- case "decimal":
154
- case "real":
155
- case "double precision":
156
- return typeof value === "string" ? parseFloat(value) : value;
157
- case "boolean":
158
- if (typeof value === "string") {
159
- return value.toLowerCase() === "true" || value === "1";
160
- }
161
- return Boolean(value);
162
- case "json":
163
- case "jsonb":
164
- if (typeof value === "string") {
165
- try {
166
- return JSON.parse(value);
167
- }
168
- catch (_a) {
169
- return value;
170
- }
171
- }
172
- return value;
173
- case "timestamp":
174
- case "timestamptz":
175
- case "timestamp with time zone":
176
- case "timestamp without time zone":
177
- if (value instanceof Date) {
178
- return value.toISOString();
179
- }
180
- if (typeof value === "string" || typeof value === "number") {
181
- return new Date(value).toISOString();
182
- }
183
- return value;
184
- case "date":
185
- if (value instanceof Date) {
186
- return value.toISOString().split("T")[0];
187
- }
188
- if (typeof value === "string" || typeof value === "number") {
189
- return new Date(value).toISOString().split("T")[0];
190
- }
191
- return value;
192
- case "text":
193
- case "character varying":
194
- case "varchar":
195
- case "char":
196
- return String(value);
197
- default:
198
- return value;
199
- }
200
- }
201
- catch (error) {
202
- this.logger.warn(`Error transformando valor para columna ${columnName}: ${error.message}`);
203
- return targetColumn.is_nullable === "YES"
204
- ? null
205
- : this.getDefaultValue(targetColumn);
206
- }
207
- }
208
- getDefaultValue(column) {
209
- switch (column.data_type.toLowerCase()) {
210
- case "integer":
211
- case "bigint":
212
- case "smallint":
213
- return 0;
214
- case "numeric":
215
- case "decimal":
216
- case "real":
217
- case "double precision":
218
- return 0.0;
219
- case "boolean":
220
- return false;
221
- case "text":
222
- case "character varying":
223
- case "varchar":
224
- case "char":
225
- return "";
226
- case "json":
227
- case "jsonb":
228
- return "{}";
229
- case "timestamp":
230
- case "timestamptz":
231
- case "timestamp with time zone":
232
- case "timestamp without time zone":
233
- return new Date().toISOString();
234
- case "date":
235
- return new Date().toISOString().split("T")[0];
236
- default:
237
- return null;
238
- }
239
- }
240
- extractEnumValueFromObject(value) {
241
- if (typeof value === "object" && value !== null) {
242
- const possibleProperties = ["value", "type", "name", "code"];
243
- for (const prop of possibleProperties) {
244
- if (value[prop] && typeof value[prop] === "string") {
245
- return value[prop].trim();
246
- }
247
- }
248
- }
249
- return null;
250
- }
251
- async handleEnumType(value, columnName, targetColumn, tenantId) {
252
- if (value === null && targetColumn.is_nullable === "YES") {
253
- return null;
254
- }
255
- const enumType = targetColumn.udt_name;
256
- const validatedValue = await this.validateEnumValue(tenantId, columnName, value, targetColumn.is_nullable === "YES");
257
- return validatedValue;
258
- }
259
- async transformRecord(record, sourceSchema, targetSchema, tenantId) {
260
- const transformedData = {};
261
- for (const [key, value] of Object.entries(record)) {
262
- let targetColumn = targetSchema.find((col) => col.column_name === key);
263
- if (!targetColumn) {
264
- targetColumn = targetSchema.find((col) => col.column_name.toLowerCase() === key.toLowerCase());
265
- }
266
- if (!targetColumn) {
267
- this.logger.warn(`Column ${key} not found in target schema, skipping`);
268
- continue;
269
- }
270
- const columnName = targetColumn.column_name;
271
- const transformedValue = await this.transformColumnValue(value, columnName, targetColumn, tenantId);
272
- transformedData[columnName] = transformedValue;
273
- }
274
- return transformedData;
275
- }
276
- }
277
- exports.DataTransformer = DataTransformer;
278
- //# sourceMappingURL=data-transformer.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"data-transformer.js","sourceRoot":"","sources":["../../../src/scripts/data-migration/data-transformer.ts"],"names":[],"mappings":";;;AAAA,2CAAwC;AASxC,yDAAqD;AAErD,MAAa,eAAe;IAU1B,YACE,WAAwB,EACxB,gBAAqB,EACrB,WAAgC;QAZjB,WAAM,GAAG,IAAI,eAAM,CAAC,iBAAiB,CAAC,CAAC;QActD,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;QAC/B,IAAI,CAAC,gBAAgB,GAAG,gBAAgB,CAAC;QACzC,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;QAC/B,IAAI,CAAC,eAAe,GAAG,IAAI,kCAAe,EAAE,CAAC;IAC/C,CAAC;IAED,KAAK,CAAC,iBAAiB,CACrB,SAAiB,EACjB,UAAkB,EAClB,KAAoB,EACpB,aAAsB,IAAI;QAE1B,IAAI,CAAC;YACH,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;gBACnB,OAAO,UAAU;oBACf,CAAC,CAAC,IAAI;oBACN,CAAC,CAAC,MAAM,IAAI,CAAC,mBAAmB,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;YAC5D,CAAC;YAED,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;YACvE,MAAM,eAAe,GAAG,KAAK,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;YAG9D,MAAM,KAAK,GAAG,kCAAkC,YAAY,kBAAkB,CAAC;YAC/E,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YAEnE,IAAI,CAAC,WAAW,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC;gBACtC,IAAI,CAAC,MAAM,CAAC,IAAI,CACd,uDAAuD,YAAY,EAAE,CACtE,CAAC;gBACF,OAAO,MAAM,IAAI,CAAC,mBAAmB,CAAC,YAAY,CAAC,CAAC;YACtD,CAAC;YAED,MAAM,UAAU,GAAG,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAQ,EAAE,EAAE,CACnD,GAAG,CAAC,UAAU,CAAC,WAAW,EAAE,CAC7B,CAAC;YAGF,IAAI,UAAU,CAAC,QAAQ,CAAC,eAAe,CAAC,EAAE,CAAC;gBACzC,OAAO,KAAK,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,CAAC;YACjC,CAAC;YAGD,MAAM,YAAY,GAAG,UAAU,CAAC,IAAI,CAClC,CAAC,SAAS,EAAE,EAAE,CACZ,SAAS,CAAC,QAAQ,CAAC,eAAe,CAAC;gBACnC,eAAe,CAAC,QAAQ,CAAC,SAAS,CAAC,CACtC,CAAC;YAEF,IAAI,YAAY,EAAE,CAAC;gBACjB,IAAI,CAAC,MAAM,CAAC,KAAK,CACf,yBAAyB,KAAK,OAAO,YAAY,SAAS,SAAS,IAAI,UAAU,EAAE,CACpF,CAAC;gBACF,OAAO,YAAY,CAAC;YACtB,CAAC;YAGD,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,mBAAmB,CAAC,YAAY,CAAC,CAAC;YAClE,IAAI,YAAY,EAAE,CAAC;gBACjB,IAAI,CAAC,MAAM,CAAC,IAAI,CACd,4BAA4B,YAAY,SAAS,SAAS,IAAI,UAAU,EAAE,CAC3E,CAAC;gBACF,OAAO,YAAY,CAAC;YACtB,CAAC;YAED,IAAI,CAAC,UAAU,EAAE,CAAC;gBAChB,MAAM,IAAI,KAAK,CACb,qDAAqD,YAAY,EAAE,CACpE,CAAC;YACJ,CAAC;YAED,OAAO,IAAI,CAAC;QACd,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,MAAM,CAAC,KAAK,CACf,mCAAmC,SAAS,IAAI,UAAU,KAAK,KAAK,CAAC,OAAO,EAAE,CAC/E,CAAC;YACF,IAAI,CAAC,UAAU,EAAE,CAAC;gBAChB,OAAO,MAAM,IAAI,CAAC,mBAAmB,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;YAC/D,CAAC;YACD,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,eAAe,CAC3B,SAAiB,EACjB,UAAkB;QAElB,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,KAAK,CACpD;;;;;;KAMD,EACC,CAAC,SAAS,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC,EAAE,UAAU,CAAC,CACjD,CAAC;QAEF,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC7B,MAAM,IAAI,KAAK,CACb,uCAAuC,SAAS,IAAI,UAAU,EAAE,CACjE,CAAC;QACJ,CAAC;QAED,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;IACjC,CAAC;IAED,kBAAkB,CAAC,KAAU;QAC3B,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,EAAE,EAAE,CAAC;YACnC,OAAO,IAAI,CAAC;QACd,CAAC;QAED,MAAM,YAAY,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC;QACvC,IAAI,KAAK,CAAC,YAAY,CAAC,EAAE,CAAC;YACxB,OAAO,IAAI,CAAC;QACd,CAAC;QAED,OAAO,YAAY,CAAC;IACtB,CAAC;IAEO,KAAK,CAAC,mBAAmB,CAC/B,QAAgB,EAChB,WAAmB,QAAQ;QAE3B,IAAI,CAAC;YAEH,MAAM,YAAY,GAAG;gBACnB,eAAe,EAAE,MAAM;gBACvB,iBAAiB,EAAE,SAAS;gBAC5B,qBAAqB,EAAE,OAAO;gBAC9B,uBAAuB,EAAE,SAAS;aACnC,CAAC;YAEF,IAAI,YAAY,CAAC,QAAQ,CAAC,EAAE,CAAC;gBAC3B,OAAO,YAAY,CAAC,QAAQ,CAAC,CAAC;YAChC,CAAC;YAGD,MAAM,KAAK,GAAG;;;;;;;;OAQb,CAAC;YAEF,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,KAAK,EAAE;gBACzD,QAAQ;gBACR,QAAQ;aACT,CAAC,CAAC;YAEH,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC3B,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;YAClC,CAAC;YAED,OAAO,IAAI,CAAC;QACd,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,MAAM,CAAC,KAAK,CACf,wCAAwC,QAAQ,KAAK,KAAK,CAAC,OAAO,EAAE,CACrE,CAAC;YACF,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IAED,KAAK,CAAC,gBAAgB,CACpB,QAAgB,EAChB,QAAgB,EAChB,KAAa;QAEb,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,EAAE,EAAE,CAAC;YAC1D,OAAO,IAAI,CAAC;QACd,CAAC;QAED,MAAM,cAAc,GAAG,MAAM,IAAI,CAAC,iBAAiB,CACjD,QAAQ,EACR,QAAQ,EACR,KAAK,CACN,CAAC;QAEF,IAAI,cAAc,KAAK,IAAI,EAAE,CAAC;YAE5B,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,mBAAmB,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;YACxE,IAAI,YAAY,EAAE,CAAC;gBACjB,IAAI,CAAC,MAAM,CAAC,IAAI,CACd,2BAA2B,YAAY,mCAAmC,KAAK,aAAa,QAAQ,EAAE,CACvG,CAAC;gBACF,OAAO;oBACL,aAAa,EAAE,IAAI;oBACnB,KAAK,EAAE,YAAY;oBACnB,QAAQ;iBACT,CAAC;YACJ,CAAC;YACD,OAAO,IAAI,CAAC;QACd,CAAC;QAED,OAAO;YACL,aAAa,EAAE,IAAI;YACnB,KAAK,EAAE,cAAc;YACrB,QAAQ;SACT,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,oBAAoB,CACxB,KAAU,EACV,UAAkB,EAClB,YAAqD,EACrD,QAAgB;QAEhB,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YAC1C,OAAO,YAAY,CAAC,WAAW,KAAK,KAAK;gBACvC,CAAC,CAAC,IAAI;gBACN,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,YAAY,CAAC,CAAC;QACzC,CAAC;QAED,IAAI,CAAC;YAEH,IAAI,YAAY,CAAC,WAAW,EAAE,CAAC;gBAC7B,OAAO,IAAI,CAAC,eAAe,CAAC,SAAS,CACnC,KAAK,EACL,YAAY,CAAC,WAAW,EACxB,YAAY,CAAC,SAAS,CACvB,CAAC;YACJ,CAAC;YAGD,QAAQ,YAAY,CAAC,SAAS,CAAC,WAAW,EAAE,EAAE,CAAC;gBAC7C,KAAK,SAAS,CAAC;gBACf,KAAK,QAAQ,CAAC;gBACd,KAAK,UAAU;oBACb,OAAO,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;gBACjE,KAAK,SAAS,CAAC;gBACf,KAAK,SAAS,CAAC;gBACf,KAAK,MAAM,CAAC;gBACZ,KAAK,kBAAkB;oBACrB,OAAO,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;gBAC/D,KAAK,SAAS;oBACZ,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;wBAC9B,OAAO,KAAK,CAAC,WAAW,EAAE,KAAK,MAAM,IAAI,KAAK,KAAK,GAAG,CAAC;oBACzD,CAAC;oBACD,OAAO,OAAO,CAAC,KAAK,CAAC,CAAC;gBACxB,KAAK,MAAM,CAAC;gBACZ,KAAK,OAAO;oBACV,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;wBAC9B,IAAI,CAAC;4BACH,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;wBAC3B,CAAC;wBAAC,WAAM,CAAC;4BACP,OAAO,KAAK,CAAC;wBACf,CAAC;oBACH,CAAC;oBACD,OAAO,KAAK,CAAC;gBACf,KAAK,WAAW,CAAC;gBACjB,KAAK,aAAa,CAAC;gBACnB,KAAK,0BAA0B,CAAC;gBAChC,KAAK,6BAA6B;oBAChC,IAAI,KAAK,YAAY,IAAI,EAAE,CAAC;wBAC1B,OAAO,KAAK,CAAC,WAAW,EAAE,CAAC;oBAC7B,CAAC;oBACD,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;wBAC3D,OAAO,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,WAAW,EAAE,CAAC;oBACvC,CAAC;oBACD,OAAO,KAAK,CAAC;gBACf,KAAK,MAAM;oBACT,IAAI,KAAK,YAAY,IAAI,EAAE,CAAC;wBAC1B,OAAO,KAAK,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;oBAC3C,CAAC;oBACD,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;wBAC3D,OAAO,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;oBACrD,CAAC;oBACD,OAAO,KAAK,CAAC;gBACf,KAAK,MAAM,CAAC;gBACZ,KAAK,mBAAmB,CAAC;gBACzB,KAAK,SAAS,CAAC;gBACf,KAAK,MAAM;oBACT,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;gBACvB;oBACE,OAAO,KAAK,CAAC;YACjB,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,MAAM,CAAC,IAAI,CACd,0CAA0C,UAAU,KAAK,KAAK,CAAC,OAAO,EAAE,CACzE,CAAC;YACF,OAAO,YAAY,CAAC,WAAW,KAAK,KAAK;gBACvC,CAAC,CAAC,IAAI;gBACN,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,YAAY,CAAC,CAAC;QACzC,CAAC;IACH,CAAC;IAEO,eAAe,CAAC,MAAoB;QAC1C,QAAQ,MAAM,CAAC,SAAS,CAAC,WAAW,EAAE,EAAE,CAAC;YACvC,KAAK,SAAS,CAAC;YACf,KAAK,QAAQ,CAAC;YACd,KAAK,UAAU;gBACb,OAAO,CAAC,CAAC;YACX,KAAK,SAAS,CAAC;YACf,KAAK,SAAS,CAAC;YACf,KAAK,MAAM,CAAC;YACZ,KAAK,kBAAkB;gBACrB,OAAO,GAAG,CAAC;YACb,KAAK,SAAS;gBACZ,OAAO,KAAK,CAAC;YACf,KAAK,MAAM,CAAC;YACZ,KAAK,mBAAmB,CAAC;YACzB,KAAK,SAAS,CAAC;YACf,KAAK,MAAM;gBACT,OAAO,EAAE,CAAC;YACZ,KAAK,MAAM,CAAC;YACZ,KAAK,OAAO;gBACV,OAAO,IAAI,CAAC;YACd,KAAK,WAAW,CAAC;YACjB,KAAK,aAAa,CAAC;YACnB,KAAK,0BAA0B,CAAC;YAChC,KAAK,6BAA6B;gBAChC,OAAO,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;YAClC,KAAK,MAAM;gBACT,OAAO,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;YAChD;gBACE,OAAO,IAAI,CAAC;QAChB,CAAC;IACH,CAAC;IAEO,0BAA0B,CAAC,KAAU;QAC3C,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;YAEhD,MAAM,kBAAkB,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;YAC7D,KAAK,MAAM,IAAI,IAAI,kBAAkB,EAAE,CAAC;gBACtC,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,OAAO,KAAK,CAAC,IAAI,CAAC,KAAK,QAAQ,EAAE,CAAC;oBACnD,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC;gBAC5B,CAAC;YACH,CAAC;QACH,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAEO,KAAK,CAAC,cAAc,CAC1B,KAAU,EACV,UAAkB,EAClB,YAA0B,EAC1B,QAAgB;QAGhB,IAAI,KAAK,KAAK,IAAI,IAAI,YAAY,CAAC,WAAW,KAAK,KAAK,EAAE,CAAC;YACzD,OAAO,IAAI,CAAC;QACd,CAAC;QAGD,MAAM,QAAQ,GAAG,YAAY,CAAC,QAAQ,CAAC;QAGvC,MAAM,cAAc,GAAG,MAAM,IAAI,CAAC,iBAAiB,CACjD,QAAQ,EACR,UAAU,EACV,KAAK,EACL,YAAY,CAAC,WAAW,KAAK,KAAK,CACnC,CAAC;QAEF,OAAO,cAAc,CAAC;IACxB,CAAC;IAED,KAAK,CAAC,eAAe,CACnB,MAAW,EACX,YAA4B,EAC5B,YAA4B,EAC5B,QAAgB;QAEhB,MAAM,eAAe,GAAQ,EAAE,CAAC;QAEhC,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;YAElD,IAAI,YAAY,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,WAAW,KAAK,GAAG,CAAC,CAAC;YAGvE,IAAI,CAAC,YAAY,EAAE,CAAC;gBAClB,YAAY,GAAG,YAAY,CAAC,IAAI,CAC9B,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,WAAW,CAAC,WAAW,EAAE,KAAK,GAAG,CAAC,WAAW,EAAE,CAC7D,CAAC;YACJ,CAAC;YAED,IAAI,CAAC,YAAY,EAAE,CAAC;gBAClB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,GAAG,uCAAuC,CAAC,CAAC;gBACvE,SAAS;YACX,CAAC;YAGD,MAAM,UAAU,GAAG,YAAY,CAAC,WAAW,CAAC;YAE5C,MAAM,gBAAgB,GAAG,MAAM,IAAI,CAAC,oBAAoB,CACtD,KAAK,EACL,UAAU,EACV,YAAY,EACZ,QAAQ,CACT,CAAC;YAEF,eAAe,CAAC,UAAU,CAAC,GAAG,gBAAgB,CAAC;QACjD,CAAC;QAED,OAAO,eAAe,CAAC;IACzB,CAAC;CACF;AA9ZD,0CA8ZC"}
@@ -1,12 +0,0 @@
1
- import { PrismaClient } from "@prisma/client";
2
- import { DatabaseConnections } from "./types";
3
- export interface SourceDatabase {
4
- id: string;
5
- url: string;
6
- name: string;
7
- }
8
- export declare class DatabaseConnector {
9
- static createConnections(sourceDatabases?: SourceDatabase[]): DatabaseConnections;
10
- static createTenantPrismaClient(tenantId: string): PrismaClient;
11
- static cleanup(connections: DatabaseConnections): Promise<void>;
12
- }
@@ -1,94 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.DatabaseConnector = void 0;
4
- const client_1 = require("@prisma/client");
5
- const pg = require("pg");
6
- const dotenv = require("dotenv");
7
- dotenv.config();
8
- class DatabaseConnector {
9
- static createConnections(sourceDatabases) {
10
- const sourceConnections = (sourceDatabases || []).map((source) => {
11
- const pool = new pg.Pool({
12
- connectionString: source.url,
13
- });
14
- const prisma = new client_1.PrismaClient({
15
- datasources: {
16
- db: {
17
- url: source.url,
18
- },
19
- },
20
- });
21
- const connection = {
22
- pool,
23
- prisma,
24
- sourceId: source.id,
25
- async query(sql, params) {
26
- return pool.query(sql, params);
27
- },
28
- };
29
- return connection;
30
- });
31
- const sourcePool = new pg.Pool({
32
- connectionString: process.env.SOURCE_DATABASE_URL,
33
- max: 20,
34
- idleTimeoutMillis: 30000,
35
- });
36
- const sourcePrisma = new client_1.PrismaClient({
37
- datasources: {
38
- db: {
39
- url: process.env.SOURCE_DATABASE_URL,
40
- },
41
- },
42
- });
43
- const targetPool = new pg.Pool({
44
- connectionString: process.env.DATABASE_URL,
45
- max: 20,
46
- idleTimeoutMillis: 30000,
47
- });
48
- const targetPrisma = new client_1.PrismaClient({
49
- datasources: {
50
- db: {
51
- url: process.env.DATABASE_URL,
52
- },
53
- },
54
- });
55
- return {
56
- sourceConnections,
57
- targetPrisma,
58
- targetPool,
59
- sourcePool,
60
- sourcePrisma,
61
- };
62
- }
63
- static createTenantPrismaClient(tenantId) {
64
- return new client_1.PrismaClient({
65
- datasources: {
66
- db: {
67
- url: `${process.env.DATABASE_URL}?schema=${tenantId}`,
68
- },
69
- },
70
- transactionOptions: {
71
- maxWait: 120000,
72
- timeout: 120000,
73
- },
74
- });
75
- }
76
- static async cleanup(connections) {
77
- if (connections.sourceConnections) {
78
- for (const sourceConn of connections.sourceConnections) {
79
- if (sourceConn.pool)
80
- await sourceConn.pool.end();
81
- if (sourceConn.prisma)
82
- await sourceConn.prisma.$disconnect();
83
- }
84
- }
85
- await connections.targetPrisma.$disconnect();
86
- await connections.targetPool.end();
87
- if (connections.sourcePrisma)
88
- await connections.sourcePrisma.$disconnect();
89
- if (connections.sourcePool)
90
- await connections.sourcePool.end();
91
- }
92
- }
93
- exports.DatabaseConnector = DatabaseConnector;
94
- //# sourceMappingURL=db-connector.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"db-connector.js","sourceRoot":"","sources":["../../../src/scripts/data-migration/db-connector.ts"],"names":[],"mappings":"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"}
@@ -1,18 +0,0 @@
1
- import { Pool } from "pg";
2
- export declare class DependencyResolver {
3
- private readonly sourcePool;
4
- private readonly targetPool;
5
- private readonly logger;
6
- private readonly visitedTables;
7
- private readonly temporaryMark;
8
- private readonly tableOrder;
9
- private config;
10
- constructor(sourcePool: Pool, targetPool: Pool);
11
- setConfig(config: any): void;
12
- analyzeDependencies(): Promise<string[]>;
13
- private getPriorityOrder;
14
- private visit;
15
- private getAllTables;
16
- private getTableDependencies;
17
- validateDependencies(table: string, dependencies: string[]): Promise<boolean>;
18
- }