@javalabs/prisma-client 1.0.4 → 1.0.8
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.
- package/dist/scripts/data-migration/batch-migrator.d.ts +14 -19
- package/dist/scripts/data-migration/batch-migrator.js +98 -297
- package/dist/scripts/data-migration/batch-migrator.js.map +1 -1
- package/dist/scripts/data-migration/data-transformer.d.ts +16 -7
- package/dist/scripts/data-migration/data-transformer.js +169 -133
- package/dist/scripts/data-migration/data-transformer.js.map +1 -1
- package/dist/scripts/data-migration/db-connector.d.ts +6 -1
- package/dist/scripts/data-migration/db-connector.js +44 -8
- package/dist/scripts/data-migration/db-connector.js.map +1 -1
- package/dist/scripts/data-migration/dependency-resolver.d.ts +10 -10
- package/dist/scripts/data-migration/dependency-resolver.js +92 -211
- package/dist/scripts/data-migration/dependency-resolver.js.map +1 -1
- package/dist/scripts/data-migration/foreign-key-manager.d.ts +6 -5
- package/dist/scripts/data-migration/foreign-key-manager.js +108 -18
- package/dist/scripts/data-migration/foreign-key-manager.js.map +1 -1
- package/dist/scripts/data-migration/migration-config.json +63 -0
- package/dist/scripts/data-migration/migration-tool.d.ts +25 -6
- package/dist/scripts/data-migration/migration-tool.js +78 -38
- package/dist/scripts/data-migration/migration-tool.js.map +1 -1
- package/dist/scripts/data-migration/multi-source-migrator.d.ts +17 -0
- package/dist/scripts/data-migration/multi-source-migrator.js +130 -0
- package/dist/scripts/data-migration/multi-source-migrator.js.map +1 -0
- package/dist/scripts/data-migration/schema-utils.d.ts +3 -3
- package/dist/scripts/data-migration/schema-utils.js +62 -19
- package/dist/scripts/data-migration/schema-utils.js.map +1 -1
- package/dist/scripts/data-migration/tenant-migrator.js +9 -2
- package/dist/scripts/data-migration/tenant-migrator.js.map +1 -1
- package/dist/scripts/data-migration/typecast-manager.d.ts +7 -3
- package/dist/scripts/data-migration/typecast-manager.js +169 -25
- package/dist/scripts/data-migration/typecast-manager.js.map +1 -1
- package/dist/scripts/data-migration/types.d.ts +68 -2
- package/dist/scripts/database-initializer.d.ts +5 -0
- package/dist/scripts/database-initializer.js +45 -0
- package/dist/scripts/database-initializer.js.map +1 -0
- package/dist/scripts/fix-table-indexes.d.ts +26 -0
- package/dist/scripts/fix-table-indexes.js +460 -0
- package/dist/scripts/fix-table-indexes.js.map +1 -0
- package/dist/scripts/multi-db-migration.d.ts +1 -0
- package/dist/scripts/multi-db-migration.js +55 -0
- package/dist/scripts/multi-db-migration.js.map +1 -0
- package/dist/scripts/post-migration-validator.d.ts +18 -5
- package/dist/scripts/post-migration-validator.js +61 -39
- package/dist/scripts/post-migration-validator.js.map +1 -1
- package/dist/scripts/run-migration.js +83 -96
- package/dist/scripts/run-migration.js.map +1 -1
- package/dist/scripts/sequence-synchronizer.d.ts +8 -0
- package/dist/scripts/sequence-synchronizer.js +88 -0
- package/dist/scripts/sequence-synchronizer.js.map +1 -0
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/migration-config.json +40 -72
- package/{migration-config-public.json → migration-config.json.bk} +14 -14
- package/package.json +10 -3
- package/prisma/migrations/{20250422001248_add_bank_account_id → 0_init}/migration.sql +269 -47
- package/prisma/migrations/20250505171324_add_bank_owner_name_in_manual_transfer/migration.sql +2 -0
- package/prisma/migrations/20250505173850_add_method_name_in_manual_transfer/migration.sql +2 -0
- package/prisma/migrations/migration_lock.toml +2 -2
- package/prisma/schema.prisma +214 -77
- package/src/scripts/data-migration/batch-migrator.ts +192 -513
- package/src/scripts/data-migration/data-transformer.ts +252 -203
- package/src/scripts/data-migration/db-connector.ts +66 -13
- package/src/scripts/data-migration/dependency-resolver.ts +121 -266
- package/src/scripts/data-migration/foreign-key-manager.ts +214 -32
- package/src/scripts/data-migration/migration-config.json +63 -0
- package/src/scripts/data-migration/migration-tool.ts +377 -225
- package/src/scripts/data-migration/schema-utils.ts +94 -32
- package/src/scripts/data-migration/tenant-migrator.ts +12 -5
- package/src/scripts/data-migration/typecast-manager.ts +186 -31
- package/src/scripts/data-migration/types.ts +78 -5
- package/src/scripts/database-initializer.ts +49 -0
- package/src/scripts/fix-table-indexes.ts +602 -0
- package/src/scripts/post-migration-validator.ts +206 -107
- package/src/scripts/run-migration.ts +140 -124
- package/src/scripts/sequence-synchronizer.ts +127 -0
- package/prisma/migrations/20250422001957_add_bank_account_id_relations/migration.sql +0 -14
- package/src/scripts/dumps/source_dump_20250413_112626.sql +0 -1527
|
@@ -2,61 +2,71 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.DataTransformer = void 0;
|
|
4
4
|
const common_1 = require("@nestjs/common");
|
|
5
|
+
const typecast_manager_1 = require("./typecast-manager");
|
|
5
6
|
class DataTransformer {
|
|
6
|
-
constructor(schemaUtils) {
|
|
7
|
-
this.schemaUtils = schemaUtils;
|
|
7
|
+
constructor(schemaUtils, sourceConnection, connections) {
|
|
8
8
|
this.logger = new common_1.Logger("DataTransformer");
|
|
9
|
-
this.
|
|
10
|
-
this.
|
|
9
|
+
this.schemaUtils = schemaUtils;
|
|
10
|
+
this.sourceConnection = sourceConnection;
|
|
11
|
+
this.connections = connections;
|
|
12
|
+
this.typecastManager = new typecast_manager_1.TypecastManager();
|
|
11
13
|
}
|
|
12
|
-
async validateEnumValue(
|
|
14
|
+
async validateEnumValue(tableName, columnName, value, isNullable = true) {
|
|
13
15
|
try {
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
FROM pg_type t
|
|
19
|
-
JOIN pg_enum e ON t.oid = e.enumtypid
|
|
20
|
-
JOIN pg_namespace n ON n.oid = t.typnamespace
|
|
21
|
-
WHERE t.typname = $1 AND n.nspname = $2
|
|
22
|
-
`;
|
|
23
|
-
const result = await this.schemaUtils.queryTargetDb(query, [
|
|
24
|
-
enumType,
|
|
25
|
-
schemaName,
|
|
26
|
-
]);
|
|
27
|
-
const uniqueValues = new Set(result.rows.map((row) => String(row.enumlabel)));
|
|
28
|
-
const normalizedMap = new Map();
|
|
29
|
-
result.rows.forEach((row) => {
|
|
30
|
-
const original = String(row.enumlabel);
|
|
31
|
-
const normalized = original.toLowerCase().trim();
|
|
32
|
-
normalizedMap.set(normalized, original);
|
|
33
|
-
});
|
|
34
|
-
this.enumValuesCache.set(cacheKey, uniqueValues);
|
|
35
|
-
this.enumValuesCache.set(`${cacheKey}_normalized`, normalizedMap);
|
|
36
|
-
this.logger.log(`Valid values for ${enumType}: ${[...uniqueValues].join(", ")}`);
|
|
16
|
+
if (value === null) {
|
|
17
|
+
return isNullable
|
|
18
|
+
? null
|
|
19
|
+
: await this.getDefaultEnumValue(tableName, columnName);
|
|
37
20
|
}
|
|
38
|
-
const
|
|
39
|
-
const
|
|
40
|
-
|
|
41
|
-
|
|
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);
|
|
42
28
|
}
|
|
43
|
-
|
|
44
|
-
|
|
29
|
+
const enumValues = validValues.rows.map((row) => row.enum_value.toLowerCase());
|
|
30
|
+
if (enumValues.includes(normalizedValue)) {
|
|
31
|
+
return value.toString().trim();
|
|
45
32
|
}
|
|
46
|
-
const
|
|
47
|
-
|
|
48
|
-
|
|
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}`);
|
|
49
46
|
}
|
|
50
|
-
this.logger.warn(`Invalid enum value "${value}" for type ${enumType}. Valid values are: ${[
|
|
51
|
-
...validValues,
|
|
52
|
-
].join(", ")}`);
|
|
53
47
|
return null;
|
|
54
48
|
}
|
|
55
49
|
catch (error) {
|
|
56
|
-
this.logger.error(`Error validating enum value
|
|
50
|
+
this.logger.error(`Error validating enum value for ${tableName}.${columnName}: ${error.message}`);
|
|
51
|
+
if (!isNullable) {
|
|
52
|
+
return await this.getDefaultEnumValue(tableName, columnName);
|
|
53
|
+
}
|
|
57
54
|
return null;
|
|
58
55
|
}
|
|
59
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
|
+
}
|
|
60
70
|
transformToNumeric(value) {
|
|
61
71
|
if (value === null || value === "") {
|
|
62
72
|
return null;
|
|
@@ -69,15 +79,24 @@ class DataTransformer {
|
|
|
69
79
|
}
|
|
70
80
|
async getDefaultEnumValue(enumType, tenantId = "public") {
|
|
71
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
|
+
}
|
|
72
91
|
const query = `
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
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
|
+
`;
|
|
81
100
|
const result = await this.schemaUtils.queryTargetDb(query, [
|
|
82
101
|
enumType,
|
|
83
102
|
tenantId,
|
|
@@ -116,110 +135,127 @@ class DataTransformer {
|
|
|
116
135
|
};
|
|
117
136
|
}
|
|
118
137
|
async transformColumnValue(value, columnName, targetColumn, tenantId) {
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
138
|
+
if (value === null || value === undefined) {
|
|
139
|
+
return targetColumn.is_nullable === "YES"
|
|
140
|
+
? null
|
|
141
|
+
: this.getDefaultValue(targetColumn);
|
|
122
142
|
}
|
|
123
143
|
try {
|
|
124
|
-
if (targetColumn.
|
|
125
|
-
|
|
126
|
-
const stringValue = this.extractEnumValueFromObject(value);
|
|
127
|
-
if (stringValue) {
|
|
128
|
-
return await this.prepareEnumValue(tenantId, targetColumn.udt_name, stringValue);
|
|
129
|
-
}
|
|
130
|
-
}
|
|
131
|
-
if (typeof value === "string") {
|
|
132
|
-
return await this.prepareEnumValue(tenantId, targetColumn.udt_name, value);
|
|
133
|
-
}
|
|
134
|
-
const defaultValue = await this.getDefaultEnumValue(targetColumn.udt_name, tenantId);
|
|
135
|
-
if (defaultValue) {
|
|
136
|
-
this.logger.warn(`Using default enum value '${defaultValue}' for column ${columnName}`);
|
|
137
|
-
return {
|
|
138
|
-
needsEnumCast: true,
|
|
139
|
-
value: defaultValue,
|
|
140
|
-
enumType: targetColumn.udt_name,
|
|
141
|
-
};
|
|
142
|
-
}
|
|
144
|
+
if (targetColumn.source_type) {
|
|
145
|
+
return this.typecastManager.castValue(value, targetColumn.source_type, targetColumn.data_type);
|
|
143
146
|
}
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
return
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
return Boolean(value);
|
|
158
|
-
}
|
|
159
|
-
if (targetColumn.data_type.includes("timestamp") ||
|
|
160
|
-
targetColumn.data_type.includes("date")) {
|
|
161
|
-
if (!value)
|
|
162
|
-
return null;
|
|
163
|
-
const date = new Date(value);
|
|
164
|
-
return isNaN(date.getTime()) ? null : date.toISOString();
|
|
165
|
-
}
|
|
166
|
-
if (targetColumn.data_type === "json" ||
|
|
167
|
-
targetColumn.data_type === "jsonb") {
|
|
168
|
-
if (typeof value === "string") {
|
|
169
|
-
try {
|
|
170
|
-
return JSON.parse(value);
|
|
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";
|
|
171
160
|
}
|
|
172
|
-
|
|
173
|
-
|
|
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
|
+
}
|
|
174
171
|
}
|
|
175
|
-
|
|
176
|
-
|
|
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;
|
|
177
199
|
}
|
|
178
|
-
return value;
|
|
179
200
|
}
|
|
180
201
|
catch (error) {
|
|
181
|
-
this.logger.
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
return this.getDefaultValueForType(targetColumn.udt_name);
|
|
202
|
+
this.logger.warn(`Error transformando valor para columna ${columnName}: ${error.message}`);
|
|
203
|
+
return targetColumn.is_nullable === "YES"
|
|
204
|
+
? null
|
|
205
|
+
: this.getDefaultValue(targetColumn);
|
|
186
206
|
}
|
|
187
207
|
}
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
}
|
|
194
|
-
}
|
|
195
|
-
for (const val of Object.values(value)) {
|
|
196
|
-
if (typeof val === "string") {
|
|
197
|
-
return val;
|
|
198
|
-
}
|
|
199
|
-
}
|
|
200
|
-
return null;
|
|
201
|
-
}
|
|
202
|
-
getDefaultValueForType(udtName) {
|
|
203
|
-
switch (udtName) {
|
|
204
|
-
case "int4":
|
|
205
|
-
case "int8":
|
|
206
|
-
case "numeric":
|
|
208
|
+
getDefaultValue(column) {
|
|
209
|
+
switch (column.data_type.toLowerCase()) {
|
|
210
|
+
case "integer":
|
|
211
|
+
case "bigint":
|
|
212
|
+
case "smallint":
|
|
207
213
|
return 0;
|
|
208
|
-
case "
|
|
214
|
+
case "numeric":
|
|
215
|
+
case "decimal":
|
|
216
|
+
case "real":
|
|
217
|
+
case "double precision":
|
|
218
|
+
return 0.0;
|
|
219
|
+
case "boolean":
|
|
209
220
|
return false;
|
|
210
221
|
case "text":
|
|
222
|
+
case "character varying":
|
|
211
223
|
case "varchar":
|
|
224
|
+
case "char":
|
|
212
225
|
return "";
|
|
213
|
-
case "jsonb":
|
|
214
226
|
case "json":
|
|
215
|
-
|
|
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];
|
|
216
236
|
default:
|
|
217
|
-
if (udtName.startsWith("enum_")) {
|
|
218
|
-
return null;
|
|
219
|
-
}
|
|
220
237
|
return null;
|
|
221
238
|
}
|
|
222
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
|
+
}
|
|
223
259
|
async transformRecord(record, sourceSchema, targetSchema, tenantId) {
|
|
224
260
|
const transformedData = {};
|
|
225
261
|
for (const [key, value] of Object.entries(record)) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"data-transformer.js","sourceRoot":"","sources":["../../../src/scripts/data-migration/data-transformer.ts"],"names":[],"mappings":";;;AAAA,2CAAwC;
|
|
1
|
+
{"version":3,"file":"data-transformer.js","sourceRoot":"","sources":["../../../src/scripts/data-migration/data-transformer.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,12 @@
|
|
|
1
1
|
import { PrismaClient } from "@prisma/client";
|
|
2
2
|
import { DatabaseConnections } from "./types";
|
|
3
|
+
export interface SourceDatabase {
|
|
4
|
+
id: string;
|
|
5
|
+
url: string;
|
|
6
|
+
name: string;
|
|
7
|
+
}
|
|
3
8
|
export declare class DatabaseConnector {
|
|
4
|
-
static createConnections(): DatabaseConnections;
|
|
9
|
+
static createConnections(sourceDatabases?: SourceDatabase[]): DatabaseConnections;
|
|
5
10
|
static createTenantPrismaClient(tenantId: string): PrismaClient;
|
|
6
11
|
static cleanup(connections: DatabaseConnections): Promise<void>;
|
|
7
12
|
}
|
|
@@ -6,12 +6,32 @@ const pg = require("pg");
|
|
|
6
6
|
const dotenv = require("dotenv");
|
|
7
7
|
dotenv.config();
|
|
8
8
|
class DatabaseConnector {
|
|
9
|
-
static createConnections() {
|
|
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
|
+
});
|
|
10
31
|
const sourcePool = new pg.Pool({
|
|
11
32
|
connectionString: process.env.SOURCE_DATABASE_URL,
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
connectionString: process.env.DATABASE_URL,
|
|
33
|
+
max: 20,
|
|
34
|
+
idleTimeoutMillis: 30000,
|
|
15
35
|
});
|
|
16
36
|
const sourcePrisma = new client_1.PrismaClient({
|
|
17
37
|
datasources: {
|
|
@@ -20,6 +40,11 @@ class DatabaseConnector {
|
|
|
20
40
|
},
|
|
21
41
|
},
|
|
22
42
|
});
|
|
43
|
+
const targetPool = new pg.Pool({
|
|
44
|
+
connectionString: process.env.DATABASE_URL,
|
|
45
|
+
max: 20,
|
|
46
|
+
idleTimeoutMillis: 30000,
|
|
47
|
+
});
|
|
23
48
|
const targetPrisma = new client_1.PrismaClient({
|
|
24
49
|
datasources: {
|
|
25
50
|
db: {
|
|
@@ -28,10 +53,11 @@ class DatabaseConnector {
|
|
|
28
53
|
},
|
|
29
54
|
});
|
|
30
55
|
return {
|
|
31
|
-
|
|
56
|
+
sourceConnections,
|
|
32
57
|
targetPrisma,
|
|
33
|
-
sourcePool,
|
|
34
58
|
targetPool,
|
|
59
|
+
sourcePool,
|
|
60
|
+
sourcePrisma,
|
|
35
61
|
};
|
|
36
62
|
}
|
|
37
63
|
static createTenantPrismaClient(tenantId) {
|
|
@@ -48,10 +74,20 @@ class DatabaseConnector {
|
|
|
48
74
|
});
|
|
49
75
|
}
|
|
50
76
|
static async cleanup(connections) {
|
|
51
|
-
|
|
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
|
+
}
|
|
52
85
|
await connections.targetPrisma.$disconnect();
|
|
53
|
-
await connections.sourcePool.end();
|
|
54
86
|
await connections.targetPool.end();
|
|
87
|
+
if (connections.sourcePrisma)
|
|
88
|
+
await connections.sourcePrisma.$disconnect();
|
|
89
|
+
if (connections.sourcePool)
|
|
90
|
+
await connections.sourcePool.end();
|
|
55
91
|
}
|
|
56
92
|
}
|
|
57
93
|
exports.DatabaseConnector = DatabaseConnector;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"db-connector.js","sourceRoot":"","sources":["../../../src/scripts/data-migration/db-connector.ts"],"names":[],"mappings":";;;AAAA,2CAA8C;AAC9C,yBAAyB;AACzB,iCAAiC;AAGjC,MAAM,CAAC,MAAM,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"db-connector.js","sourceRoot":"","sources":["../../../src/scripts/data-migration/db-connector.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,16 +3,16 @@ export declare class DependencyResolver {
|
|
|
3
3
|
private readonly sourcePool;
|
|
4
4
|
private readonly targetPool;
|
|
5
5
|
private readonly logger;
|
|
6
|
-
private
|
|
6
|
+
private readonly visitedTables;
|
|
7
|
+
private readonly temporaryMark;
|
|
8
|
+
private readonly tableOrder;
|
|
9
|
+
private config;
|
|
7
10
|
constructor(sourcePool: Pool, targetPool: Pool);
|
|
11
|
+
setConfig(config: any): void;
|
|
8
12
|
analyzeDependencies(): Promise<string[]>;
|
|
9
|
-
private
|
|
10
|
-
private
|
|
11
|
-
private
|
|
12
|
-
private
|
|
13
|
-
|
|
14
|
-
private extractJsonReferences;
|
|
15
|
-
private inferTableNameFromColumn;
|
|
16
|
-
private parseTableComment;
|
|
17
|
-
private assignLevels;
|
|
13
|
+
private getPriorityOrder;
|
|
14
|
+
private visit;
|
|
15
|
+
private getAllTables;
|
|
16
|
+
private getTableDependencies;
|
|
17
|
+
validateDependencies(table: string, dependencies: string[]): Promise<boolean>;
|
|
18
18
|
}
|