@javalabs/prisma-client 1.0.3 → 1.0.6

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 (61) hide show
  1. package/dist/scripts/data-migration/batch-migrator.d.ts +14 -19
  2. package/dist/scripts/data-migration/batch-migrator.js +98 -297
  3. package/dist/scripts/data-migration/batch-migrator.js.map +1 -1
  4. package/dist/scripts/data-migration/data-transformer.d.ts +16 -7
  5. package/dist/scripts/data-migration/data-transformer.js +169 -133
  6. package/dist/scripts/data-migration/data-transformer.js.map +1 -1
  7. package/dist/scripts/data-migration/db-connector.d.ts +6 -1
  8. package/dist/scripts/data-migration/db-connector.js +44 -8
  9. package/dist/scripts/data-migration/db-connector.js.map +1 -1
  10. package/dist/scripts/data-migration/dependency-resolver.d.ts +10 -10
  11. package/dist/scripts/data-migration/dependency-resolver.js +92 -211
  12. package/dist/scripts/data-migration/dependency-resolver.js.map +1 -1
  13. package/dist/scripts/data-migration/foreign-key-manager.d.ts +6 -5
  14. package/dist/scripts/data-migration/foreign-key-manager.js +108 -18
  15. package/dist/scripts/data-migration/foreign-key-manager.js.map +1 -1
  16. package/dist/scripts/data-migration/migration-config.json +63 -0
  17. package/dist/scripts/data-migration/migration-tool.d.ts +25 -6
  18. package/dist/scripts/data-migration/migration-tool.js +78 -38
  19. package/dist/scripts/data-migration/migration-tool.js.map +1 -1
  20. package/dist/scripts/data-migration/multi-source-migrator.d.ts +17 -0
  21. package/dist/scripts/data-migration/multi-source-migrator.js +130 -0
  22. package/dist/scripts/data-migration/multi-source-migrator.js.map +1 -0
  23. package/dist/scripts/data-migration/schema-utils.d.ts +3 -3
  24. package/dist/scripts/data-migration/schema-utils.js +62 -19
  25. package/dist/scripts/data-migration/schema-utils.js.map +1 -1
  26. package/dist/scripts/data-migration/tenant-migrator.js +9 -2
  27. package/dist/scripts/data-migration/tenant-migrator.js.map +1 -1
  28. package/dist/scripts/data-migration/typecast-manager.d.ts +7 -3
  29. package/dist/scripts/data-migration/typecast-manager.js +169 -25
  30. package/dist/scripts/data-migration/typecast-manager.js.map +1 -1
  31. package/dist/scripts/data-migration/types.d.ts +68 -2
  32. package/dist/scripts/fix-table-indexes.d.ts +26 -0
  33. package/dist/scripts/fix-table-indexes.js +460 -0
  34. package/dist/scripts/fix-table-indexes.js.map +1 -0
  35. package/dist/scripts/multi-db-migration.d.ts +1 -0
  36. package/dist/scripts/multi-db-migration.js +55 -0
  37. package/dist/scripts/multi-db-migration.js.map +1 -0
  38. package/dist/scripts/run-migration.js +41 -75
  39. package/dist/scripts/run-migration.js.map +1 -1
  40. package/dist/tsconfig.tsbuildinfo +1 -1
  41. package/migration-config.json +40 -72
  42. package/{migration-config-public.json → migration-config.json.bk} +14 -14
  43. package/package.json +6 -3
  44. package/prisma/migrations/20250422001248_add_bank_account_id/migration.sql +458 -0
  45. package/prisma/migrations/20250422001957_add_bank_account_id_relations/migration.sql +14 -0
  46. package/prisma/schema.prisma +13 -12
  47. package/src/scripts/data-migration/batch-migrator.ts +192 -513
  48. package/src/scripts/data-migration/data-transformer.ts +252 -203
  49. package/src/scripts/data-migration/db-connector.ts +66 -13
  50. package/src/scripts/data-migration/dependency-resolver.ts +121 -266
  51. package/src/scripts/data-migration/foreign-key-manager.ts +214 -32
  52. package/src/scripts/data-migration/migration-config.json +63 -0
  53. package/src/scripts/data-migration/migration-tool.ts +377 -225
  54. package/src/scripts/data-migration/schema-utils.ts +94 -32
  55. package/src/scripts/data-migration/tenant-migrator.ts +12 -5
  56. package/src/scripts/data-migration/typecast-manager.ts +186 -31
  57. package/src/scripts/data-migration/types.ts +78 -5
  58. package/src/scripts/dumps/source_dump_20250428_145606.sql +323 -0
  59. package/src/scripts/fix-table-indexes.ts +602 -0
  60. package/src/scripts/post-migration-validator.ts +206 -107
  61. package/src/scripts/run-migration.ts +87 -101
@@ -0,0 +1,63 @@
1
+ {
2
+ "commonSchema": "public",
3
+ "tenantInfo": {
4
+ "sourceTable": "users",
5
+ "tenantIdColumn": "user_id",
6
+ "providerIdColumn": "provider_id"
7
+ },
8
+ "migrationPriorities": {
9
+ "high": ["countries", "providers", "users", "api_keys"],
10
+ "medium": ["transactions", "charges", "balances"],
11
+ "low": ["invoices", "api_request_logs"]
12
+ },
13
+ "tables": {
14
+ "countries": {
15
+ "type": "public",
16
+ "idField": "id"
17
+ },
18
+ "providers": {
19
+ "type": "public",
20
+ "idField": "provider_id",
21
+ "dependencies": ["countries"]
22
+ },
23
+ "users": {
24
+ "type": "public",
25
+ "idField": "user_id",
26
+ "dependencies": ["providers"]
27
+ },
28
+ "api_keys": {
29
+ "type": "public",
30
+ "idField": "id",
31
+ "dependencies": ["users"]
32
+ },
33
+ "transactions": {
34
+ "type": "public",
35
+ "idField": "id",
36
+ "filterColumn": "provider_id",
37
+ "dependencies": ["users", "providers"]
38
+ },
39
+ "charges": {
40
+ "type": "public",
41
+ "idField": "id",
42
+ "filterColumn": "provider_id",
43
+ "dependencies": ["transactions"]
44
+ },
45
+ "invoices": {
46
+ "type": "public",
47
+ "idField": "id",
48
+ "filterColumn": "provider_id",
49
+ "dependencies": ["transactions", "charges"]
50
+ },
51
+ "balances": {
52
+ "type": "public",
53
+ "idField": "id",
54
+ "filterColumn": "provider_id",
55
+ "dependencies": ["users"]
56
+ },
57
+ "api_request_logs": {
58
+ "type": "public",
59
+ "idField": "id",
60
+ "dependencies": ["api_keys"]
61
+ }
62
+ }
63
+ }
@@ -7,20 +7,39 @@ interface MigrationOptions {
7
7
  forceSingleTenant?: boolean;
8
8
  configPath?: string;
9
9
  }
10
+ interface TableConfig {
11
+ type: "public" | "filteredPublic" | "tenantInfo" | "tenant";
12
+ idField: string;
13
+ filterColumn?: string;
14
+ via?: string;
15
+ providerLink?: string;
16
+ tenantKey?: string;
17
+ dependencies?: string[];
18
+ sourceTable: string;
19
+ targetTable: string;
20
+ }
21
+ interface MigrationConfig {
22
+ commonSchema: string;
23
+ tenantInfo: {
24
+ sourceTable: string;
25
+ tenantIdColumn: string;
26
+ providerIdColumn: string;
27
+ };
28
+ tables: Record<string, TableConfig>;
29
+ }
10
30
  export declare class DataMigrationTool {
11
31
  private readonly connections;
32
+ private migrationConfig;
33
+ private readonly options;
12
34
  private readonly logger;
13
35
  private readonly schemaUtils;
14
36
  private readonly dataTransformer;
15
- private readonly foreignKeyManager;
16
37
  private readonly batchMigrator;
38
+ private readonly foreignKeyManager;
17
39
  private readonly dependencyResolver;
18
- private migrationConfig;
19
- private schemaCache;
20
- private targetSchemaCache;
21
- constructor(connections: DatabaseConnections);
40
+ constructor(connections: DatabaseConnections, migrationConfig: MigrationConfig, options?: MigrationOptions);
22
41
  private loadConfig;
23
- migrateData(options?: MigrationOptions): Promise<void>;
42
+ migrate(): Promise<void>;
24
43
  private migratePublicTablesOnly;
25
44
  private validateSourceData;
26
45
  private migrateMultiTenantWithConfig;
@@ -10,39 +10,42 @@ const batch_migrator_1 = require("./batch-migrator");
10
10
  const foreign_key_manager_1 = require("./foreign-key-manager");
11
11
  const dependency_resolver_1 = require("./dependency-resolver");
12
12
  class DataMigrationTool {
13
- constructor(connections) {
13
+ constructor(connections, migrationConfig, options = {}) {
14
14
  this.connections = connections;
15
+ this.migrationConfig = migrationConfig;
16
+ this.options = options;
15
17
  this.logger = new common_1.Logger("DataMigrationTool");
16
- this.schemaCache = {};
17
- this.targetSchemaCache = {};
18
- this.schemaUtils = new schema_utils_1.SchemaUtils(connections.sourcePool, connections.targetPool);
19
- this.dataTransformer = new data_transformer_1.DataTransformer(this.schemaUtils);
18
+ this.schemaUtils = new schema_utils_1.SchemaUtils(connections);
19
+ this.dataTransformer = new data_transformer_1.DataTransformer(this.schemaUtils, connections.sourcePool, connections);
20
20
  this.foreignKeyManager = new foreign_key_manager_1.ForeignKeyManager(connections);
21
+ this.batchMigrator = new batch_migrator_1.BatchMigrator(this.schemaUtils, this.dataTransformer, connections, this.options);
21
22
  this.dependencyResolver = new dependency_resolver_1.DependencyResolver(connections.sourcePool, connections.targetPool);
22
- this.batchMigrator = new batch_migrator_1.BatchMigrator(this.dataTransformer, this.schemaUtils, connections, this.dependencyResolver, this.schemaCache, this.targetSchemaCache);
23
23
  }
24
- loadConfig(configPath = 'migration-config.json') {
24
+ loadConfig(configPath = "migration-config.json") {
25
25
  const fullPath = path.resolve(process.cwd(), configPath);
26
26
  if (!fs.existsSync(fullPath)) {
27
27
  throw new Error(`Migration config file not found at: ${fullPath}`);
28
28
  }
29
29
  try {
30
- const fileContent = fs.readFileSync(fullPath, 'utf-8');
30
+ const fileContent = fs.readFileSync(fullPath, "utf-8");
31
31
  this.migrationConfig = JSON.parse(fileContent);
32
32
  this.logger.log(`Loaded migration config from: ${fullPath}`);
33
+ this.dependencyResolver.setConfig(this.migrationConfig);
33
34
  }
34
35
  catch (error) {
35
36
  throw new Error(`Error reading or parsing migration config file: ${error.message}`);
36
37
  }
37
- if (!this.migrationConfig.commonSchema || !this.migrationConfig.tables || !this.migrationConfig.tenantInfo) {
38
- throw new Error('Invalid migration config structure.');
38
+ if (!this.migrationConfig.commonSchema ||
39
+ !this.migrationConfig.tables ||
40
+ !this.migrationConfig.tenantInfo) {
41
+ throw new Error("Invalid migration config structure.");
39
42
  }
40
43
  }
41
- async migrateData(options = {}) {
44
+ async migrate() {
42
45
  try {
43
46
  this.logger.log("Starting data migration process");
44
- this.loadConfig(options.configPath);
45
- if (options.forceSingleTenant || options.publicOnly) {
47
+ this.loadConfig(this.options.configPath);
48
+ if (this.options.forceSingleTenant || this.options.publicOnly) {
46
49
  this.logger.log("Public-only migration requested. Migrating only 'public' type tables...");
47
50
  await this.migratePublicTablesOnly();
48
51
  }
@@ -60,7 +63,7 @@ class DataMigrationTool {
60
63
  async migratePublicTablesOnly() {
61
64
  const { commonSchema, tables: tablesConfig } = this.migrationConfig;
62
65
  const allTablesInOrder = await this.dependencyResolver.analyzeDependencies();
63
- const publicTablesToMigrate = allTablesInOrder.filter(t => { var _a; return ((_a = tablesConfig[t]) === null || _a === void 0 ? void 0 : _a.type) === 'public'; });
66
+ const publicTablesToMigrate = allTablesInOrder.filter((t) => { var _a; return ((_a = tablesConfig[t]) === null || _a === void 0 ? void 0 : _a.type) === "public"; });
64
67
  this.logger.log(`Migrating public tables to '${commonSchema}' schema: ${publicTablesToMigrate.join(", ")}`);
65
68
  if (publicTablesToMigrate.length === 0) {
66
69
  this.logger.warn("No tables configured as 'public'. Public-only migration will not process any tables.");
@@ -74,7 +77,12 @@ class DataMigrationTool {
74
77
  continue;
75
78
  }
76
79
  try {
77
- await this.batchMigrator.migrateEntityDataInBatches(this.connections.targetPrisma, { name: tableName, idField: config.idField }, null, commonSchema);
80
+ await this.batchMigrator.migrateEntityDataInBatches(this.migrationConfig.commonSchema, commonSchema, {
81
+ type: "public",
82
+ idField: config.idField,
83
+ sourceTable: tableName,
84
+ targetTable: tableName,
85
+ }, null);
78
86
  }
79
87
  catch (error) {
80
88
  this.logger.error(`Error migrating public table ${tableName}: ${error.message}`);
@@ -89,15 +97,18 @@ class DataMigrationTool {
89
97
  try {
90
98
  const { sourceTable, providerIdColumn } = this.migrationConfig.tenantInfo;
91
99
  const tablesConfig = this.migrationConfig.tables;
92
- let transactionTableKey = 'transactions';
93
- let providerTableKey = 'providers';
100
+ let transactionTableKey = "transactions";
101
+ let providerTableKey = "providers";
94
102
  let transactionProviderFk = providerIdColumn;
95
103
  for (const key in tablesConfig) {
96
- if (tablesConfig[key].type === 'filteredPublic' && tablesConfig[key].filterColumn === providerIdColumn && !tablesConfig[key].via) {
104
+ if (tablesConfig[key].type === "filteredPublic" &&
105
+ tablesConfig[key].filterColumn === providerIdColumn &&
106
+ !tablesConfig[key].via) {
97
107
  transactionTableKey = key;
98
108
  transactionProviderFk = tablesConfig[key].filterColumn;
99
109
  }
100
- if (tablesConfig[key].type === 'public' && tablesConfig[key].idField === providerIdColumn) {
110
+ if (tablesConfig[key].type === "public" &&
111
+ tablesConfig[key].idField === providerIdColumn) {
101
112
  providerTableKey = key;
102
113
  }
103
114
  }
@@ -127,22 +138,37 @@ class DataMigrationTool {
127
138
  async migrateMultiTenantWithConfig() {
128
139
  var _a, _b;
129
140
  await this.validateSourceData();
130
- const { commonSchema, tables: tablesConfig, tenantInfo } = this.migrationConfig;
141
+ const { commonSchema, tables: tablesConfig, tenantInfo, } = this.migrationConfig;
131
142
  const allTablesInOrder = await this.dependencyResolver.analyzeDependencies();
132
- this.logger.log(`Migrating public tables to '${commonSchema}' schema...`);
143
+ this.logger.log(`Orden de migración: ${allTablesInOrder.join(" -> ")}`);
144
+ for (const tableName of allTablesInOrder) {
145
+ const config = tablesConfig[tableName];
146
+ if (config === null || config === void 0 ? void 0 : config.dependencies) {
147
+ const valid = await this.dependencyResolver.validateDependencies(tableName, config.dependencies);
148
+ if (!valid) {
149
+ this.logger.warn(`Advertencia: Algunas dependencias para ${tableName} no están disponibles`);
150
+ }
151
+ }
152
+ }
153
+ this.logger.log(`Migrando tablas públicas al esquema '${commonSchema}'...`);
133
154
  await this.connections.targetPool.query(`SET session_replication_role = 'replica';`);
134
- const publicTables = allTablesInOrder.filter(t => { var _a; return ((_a = tablesConfig[t]) === null || _a === void 0 ? void 0 : _a.type) === 'public'; });
155
+ const publicTables = allTablesInOrder.filter((t) => { var _a; return ((_a = tablesConfig[t]) === null || _a === void 0 ? void 0 : _a.type) === "public"; });
135
156
  for (const tableName of publicTables) {
136
157
  const config = tablesConfig[tableName];
137
158
  if (!config) {
138
- this.logger.warn(`Skipping migration for table ${tableName}: Not found in config.`);
159
+ this.logger.warn(`Saltando migración de tabla ${tableName}: No encontrada en configuración`);
139
160
  continue;
140
161
  }
141
162
  try {
142
- await this.batchMigrator.migrateEntityDataInBatches(this.connections.targetPrisma, { name: tableName, idField: config.idField }, null, commonSchema);
163
+ await this.batchMigrator.migrateEntityDataInBatches(this.migrationConfig.commonSchema, commonSchema, {
164
+ type: "public",
165
+ idField: config.idField,
166
+ sourceTable: tableName,
167
+ targetTable: tableName,
168
+ }, null);
143
169
  }
144
170
  catch (error) {
145
- this.logger.error(`Error migrating public table ${tableName}: ${error.message}`);
171
+ this.logger.error(`Error migrando tabla pública ${tableName}: ${error.message}`);
146
172
  throw error;
147
173
  }
148
174
  }
@@ -153,18 +179,20 @@ class DataMigrationTool {
153
179
  select: {
154
180
  [tenantInfo.tenantIdColumn]: true,
155
181
  [tenantInfo.providerIdColumn]: true,
156
- }
182
+ },
157
183
  });
158
184
  this.logger.log(`Found ${tenants.length} potential tenants.`);
159
185
  const validTenants = new Map();
160
186
  this.logger.log("Ensuring tenant schemas exist (if strategy requires them)...");
161
- let requiresTenantSchemas = Object.values(tablesConfig).some(t => t.type === 'tenant');
187
+ let requiresTenantSchemas = Object.values(tablesConfig).some((t) => t.type === "tenant");
162
188
  if (requiresTenantSchemas) {
163
- this.logger.log('Tenant-specific schemas are required by config.');
189
+ this.logger.log("Tenant-specific schemas are required by config.");
164
190
  for (const tenant of tenants) {
165
191
  const tenantId = tenant[tenantInfo.tenantIdColumn];
166
192
  const providerId = (_a = tenant[tenantInfo.providerIdColumn]) !== null && _a !== void 0 ? _a : null;
167
- if (tenantId && typeof tenantId === 'string' && tenantId !== commonSchema) {
193
+ if (tenantId &&
194
+ typeof tenantId === "string" &&
195
+ tenantId !== commonSchema) {
168
196
  await this.schemaUtils.createSchema(tenantId);
169
197
  validTenants.set(tenantId, providerId);
170
198
  this.logger.log(`Ensured schema exists for tenant: ${tenantId}`);
@@ -179,16 +207,20 @@ class DataMigrationTool {
179
207
  for (const tenant of tenants) {
180
208
  const tenantId = tenant[tenantInfo.tenantIdColumn];
181
209
  const providerId = (_b = tenant[tenantInfo.providerIdColumn]) !== null && _b !== void 0 ? _b : null;
182
- if (tenantId && typeof tenantId === 'string') {
210
+ if (tenantId && typeof tenantId === "string") {
183
211
  validTenants.set(tenantId, providerId);
184
212
  }
185
213
  }
186
214
  }
187
215
  this.logger.log(`Prepared ${validTenants.size} valid tenants for migration.`);
188
- const tablesToMigratePerTenant = allTablesInOrder.filter(t => { var _a, _b; return ((_a = tablesConfig[t]) === null || _a === void 0 ? void 0 : _a.type) === 'filteredPublic' || ((_b = tablesConfig[t]) === null || _b === void 0 ? void 0 : _b.type) === 'tenant'; });
216
+ const tablesToMigratePerTenant = allTablesInOrder.filter((t) => {
217
+ var _a, _b;
218
+ return ((_a = tablesConfig[t]) === null || _a === void 0 ? void 0 : _a.type) === "filteredPublic" ||
219
+ ((_b = tablesConfig[t]) === null || _b === void 0 ? void 0 : _b.type) === "tenant";
220
+ });
189
221
  this.logger.log(`Migrating filtered/tenant tables: ${tablesToMigratePerTenant.join(", ")}`);
190
222
  for (const [tenantId, providerId] of validTenants.entries()) {
191
- this.logger.log(`Starting migration pass related to tenant: ${tenantId} (Filtering by Provider ID: ${providerId !== null && providerId !== void 0 ? providerId : 'N/A'})`);
223
+ this.logger.log(`Starting migration pass related to tenant: ${tenantId} (Filtering by Provider ID: ${providerId !== null && providerId !== void 0 ? providerId : "N/A"})`);
192
224
  await this.connections.targetPool.query(`SET session_replication_role = 'replica';`);
193
225
  for (const tableName of tablesToMigratePerTenant) {
194
226
  const config = tablesConfig[tableName];
@@ -196,15 +228,23 @@ class DataMigrationTool {
196
228
  this.logger.warn(`Skipping migration for table ${tableName} for tenant ${tenantId}: Not found in config.`);
197
229
  continue;
198
230
  }
199
- const targetSchemaForTable = config.type === 'tenant' ? tenantId : commonSchema;
231
+ const targetSchemaForTable = config.type === "tenant" ? tenantId : commonSchema;
200
232
  try {
201
233
  const entity = {
202
234
  name: tableName,
203
235
  idField: config.idField,
204
236
  filterColumn: config.filterColumn,
205
- filterVia: config.via
237
+ filterVia: config.via,
238
+ };
239
+ const tableConfig = {
240
+ type: entity.filterVia ? "filteredPublic" : "tenant",
241
+ idField: entity.idField,
242
+ filterColumn: entity.filterColumn,
243
+ via: entity.filterVia,
244
+ sourceTable: entity.name,
245
+ targetTable: entity.name,
206
246
  };
207
- await this.batchMigrator.migrateEntityDataInBatches(this.connections.targetPrisma, entity, providerId, targetSchemaForTable);
247
+ await this.batchMigrator.migrateEntityDataInBatches(this.migrationConfig.commonSchema, targetSchemaForTable, tableConfig, providerId === null || providerId === void 0 ? void 0 : providerId.toString());
208
248
  }
209
249
  catch (error) {
210
250
  this.logger.error(`Error migrating table ${tableName} into schema ${targetSchemaForTable} (related to tenant ${tenantId}): ${error.message}`);
@@ -220,12 +260,12 @@ class DataMigrationTool {
220
260
  try {
221
261
  const publicResult = await this.connections.targetPool.query(`SELECT tablename, n_live_tup FROM pg_stat_user_tables WHERE schemaname = $1`, [this.migrationConfig.commonSchema]);
222
262
  this.logger.log(`Verification for schema '${this.migrationConfig.commonSchema}':`);
223
- publicResult.rows.forEach(row => this.logger.log(` Table: ${row.tablename}, Rows: ${row.n_live_tup}`));
263
+ publicResult.rows.forEach((row) => this.logger.log(` Table: ${row.tablename}, Rows: ${row.n_live_tup}`));
224
264
  }
225
265
  catch (err) {
226
266
  this.logger.error(`Error verifying public schema: ${err.message}`);
227
267
  }
228
- let requiresTenantSchemas = Object.values(this.migrationConfig.tables).some(t => t.type === 'tenant');
268
+ let requiresTenantSchemas = Object.values(this.migrationConfig.tables).some((t) => t.type === "tenant");
229
269
  if (requiresTenantSchemas) {
230
270
  for (const tenantId of tenantIds) {
231
271
  try {
@@ -235,7 +275,7 @@ class DataMigrationTool {
235
275
  this.logger.warn(` Schema ${tenantId} has no tables (or pg_stat_user_tables is empty).`);
236
276
  }
237
277
  else {
238
- tenantResult.rows.forEach(row => this.logger.log(` Table: ${row.tablename}, Rows: ${row.n_live_tup}`));
278
+ tenantResult.rows.forEach((row) => this.logger.log(` Table: ${row.tablename}, Rows: ${row.n_live_tup}`));
239
279
  }
240
280
  }
241
281
  catch (err) {
@@ -1 +1 @@
1
- {"version":3,"file":"migration-tool.js","sourceRoot":"","sources":["../../../src/scripts/data-migration/migration-tool.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"migration-tool.js","sourceRoot":"","sources":["../../../src/scripts/data-migration/migration-tool.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ import { DatabaseConnections } from "./types";
2
+ export declare class MultiSourceMigrator {
3
+ private readonly connections;
4
+ private readonly logger;
5
+ private readonly schemaUtils;
6
+ private readonly dataTransformers;
7
+ private readonly dependencyResolvers;
8
+ private readonly batchMigrators;
9
+ constructor(connections: DatabaseConnections);
10
+ migrateAllSources(options?: {
11
+ includeTables?: string[];
12
+ excludeTables?: string[];
13
+ }): Promise<void>;
14
+ private migrateTable;
15
+ private getPrimaryKeyForTable;
16
+ private ensureSchemaExists;
17
+ }
@@ -0,0 +1,130 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.MultiSourceMigrator = void 0;
4
+ const common_1 = require("@nestjs/common");
5
+ const schema_utils_1 = require("./schema-utils");
6
+ const data_transformer_1 = require("./data-transformer");
7
+ const batch_migrator_1 = require("./batch-migrator");
8
+ const dependency_resolver_1 = require("./dependency-resolver");
9
+ class MultiSourceMigrator {
10
+ constructor(connections) {
11
+ this.connections = connections;
12
+ this.logger = new common_1.Logger("MultiSourceMigrator");
13
+ this.schemaUtils = new Map();
14
+ this.dataTransformers = new Map();
15
+ this.dependencyResolvers = new Map();
16
+ this.batchMigrators = new Map();
17
+ for (const sourceConn of connections.sourceConnections) {
18
+ const sourceId = sourceConn.sourceId;
19
+ const schemaUtil = new schema_utils_1.SchemaUtils(sourceConn.sourcePool, connections.targetPool);
20
+ this.schemaUtils.set(sourceId, schemaUtil);
21
+ const dataTransformer = new data_transformer_1.DataTransformer(schemaUtil);
22
+ this.dataTransformers.set(sourceId, dataTransformer);
23
+ const dependencyResolver = new dependency_resolver_1.DependencyResolver(sourceConn.sourcePool, connections.targetPool);
24
+ this.dependencyResolvers.set(sourceId, dependencyResolver);
25
+ const batchMigrator = new batch_migrator_1.BatchMigrator(schemaUtil, {
26
+ targetPool: connections.targetPool,
27
+ targetPrisma: connections.targetPrisma,
28
+ sourcePool: sourceConn.sourcePool,
29
+ sourcePrisma: sourceConn.sourcePrisma,
30
+ });
31
+ this.batchMigrators.set(sourceId, batchMigrator);
32
+ }
33
+ }
34
+ async migrateAllSources(options = {}) {
35
+ this.logger.log(`Iniciando migración desde ${this.connections.sourceConnections.length} fuentes de datos`);
36
+ for (const sourceConn of this.connections.sourceConnections) {
37
+ const sourceId = sourceConn.sourceId;
38
+ this.logger.log(`Procesando migración desde la fuente: ${sourceId}`);
39
+ try {
40
+ const dependencyResolver = this.dependencyResolvers.get(sourceId);
41
+ if (!dependencyResolver) {
42
+ throw new Error(`No se encontró DependencyResolver para la fuente ${sourceId}`);
43
+ }
44
+ const sortedTables = await dependencyResolver.analyzeDependencies();
45
+ let tablesToMigrate = sortedTables;
46
+ if (options.includeTables && options.includeTables.length > 0) {
47
+ tablesToMigrate = tablesToMigrate.filter((table) => options.includeTables.includes(table));
48
+ }
49
+ if (options.excludeTables && options.excludeTables.length > 0) {
50
+ tablesToMigrate = tablesToMigrate.filter((table) => !options.excludeTables.includes(table));
51
+ }
52
+ this.logger.log(`Migrando ${tablesToMigrate.length} tablas para la fuente ${sourceId}`);
53
+ for (const tableName of tablesToMigrate) {
54
+ await this.migrateTable(sourceId, tableName, 'public');
55
+ }
56
+ this.logger.log(`Migración completada para la fuente: ${sourceId}`);
57
+ }
58
+ catch (error) {
59
+ this.logger.error(`Error en la migración de la fuente ${sourceId}: ${error.message}`);
60
+ }
61
+ }
62
+ this.logger.log("Migración multi-origen completada");
63
+ }
64
+ async migrateTable(sourceId, tableName, targetSchema) {
65
+ try {
66
+ this.logger.log(`Migrando tabla ${tableName} desde la fuente ${sourceId} al schema ${targetSchema}`);
67
+ const batchMigrator = this.batchMigrators.get(sourceId);
68
+ if (!batchMigrator) {
69
+ throw new Error(`No se encontró BatchMigrator para la fuente ${sourceId}`);
70
+ }
71
+ const entity = {
72
+ name: tableName,
73
+ idField: await this.getPrimaryKeyForTable(sourceId, tableName),
74
+ };
75
+ const prisma = this.connections.targetPrisma;
76
+ await batchMigrator.migrateEntityDataInBatches(prisma, entity, null, 'public');
77
+ this.logger.log(`Migración de tabla ${tableName} completada`);
78
+ }
79
+ catch (error) {
80
+ this.logger.error(`Error migrando tabla ${tableName} desde ${sourceId}: ${error.message}`);
81
+ throw error;
82
+ }
83
+ }
84
+ async getPrimaryKeyForTable(sourceId, tableName) {
85
+ var _a;
86
+ const schemaUtil = this.schemaUtils.get(sourceId);
87
+ if (!schemaUtil) {
88
+ throw new Error(`No se encontró SchemaUtils para la fuente ${sourceId}`);
89
+ }
90
+ const query = `
91
+ SELECT a.attname
92
+ FROM pg_index i
93
+ JOIN pg_attribute a ON a.attrelid = i.indrelid AND a.attnum = ANY(i.indkey)
94
+ WHERE i.indrelid = '${tableName}'::regclass AND i.indisprimary;
95
+ `;
96
+ try {
97
+ const result = await ((_a = this.connections.sourceConnections
98
+ .find((conn) => conn.sourceId === sourceId)) === null || _a === void 0 ? void 0 : _a.sourcePool.query(query));
99
+ if (!result || result.rows.length === 0) {
100
+ throw new Error(`No se encontró clave primaria para la tabla ${tableName}`);
101
+ }
102
+ return result.rows[0].attname;
103
+ }
104
+ catch (error) {
105
+ this.logger.error(`Error obteniendo clave primaria para ${tableName}: ${error.message}`);
106
+ return "id";
107
+ }
108
+ }
109
+ async ensureSchemaExists(schemaName) {
110
+ try {
111
+ const checkQuery = `
112
+ SELECT schema_name FROM information_schema.schemata
113
+ WHERE schema_name = $1
114
+ `;
115
+ const result = await this.connections.targetPool.query(checkQuery, [
116
+ schemaName,
117
+ ]);
118
+ if (result.rows.length === 0) {
119
+ this.logger.log(`Creando esquema ${schemaName} en la base de datos destino`);
120
+ await this.connections.targetPool.query(`CREATE SCHEMA IF NOT EXISTS "${schemaName}"`);
121
+ }
122
+ }
123
+ catch (error) {
124
+ this.logger.error(`Error al verificar/crear esquema ${schemaName}: ${error.message}`);
125
+ throw error;
126
+ }
127
+ }
128
+ }
129
+ exports.MultiSourceMigrator = MultiSourceMigrator;
130
+ //# sourceMappingURL=multi-source-migrator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"multi-source-migrator.js","sourceRoot":"","sources":["../../../src/scripts/data-migration/multi-source-migrator.ts"],"names":[],"mappings":"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"}
@@ -1,9 +1,8 @@
1
1
  import { ColumnSchema } from "./types";
2
2
  export declare class SchemaUtils {
3
- private readonly sourcePool;
4
- private readonly targetPool;
3
+ private readonly connections;
5
4
  private readonly logger;
6
- constructor(sourcePool: any, targetPool: any);
5
+ constructor(connections: any);
7
6
  getTableSchema(tableName: string, dbType: "source" | "target", schema?: string): Promise<ColumnSchema[]>;
8
7
  checkSchemaExists(schemaName: string): Promise<boolean>;
9
8
  getTargetTables(schemaName: string): Promise<string[]>;
@@ -15,4 +14,5 @@ export declare class SchemaUtils {
15
14
  createMissingColumns(tableName: string, schema: string, columns: ColumnSchema[]): Promise<void>;
16
15
  createSchema(schemaName: string): Promise<void>;
17
16
  private getPublicTables;
17
+ getTableColumns(schema: string, table: string): Promise<ColumnSchema[]>;
18
18
  }