@javalabs/prisma-client 1.0.0

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 (150) hide show
  1. package/README.md +220 -0
  2. package/dist/index.d.ts +7 -0
  3. package/dist/index.js +34 -0
  4. package/dist/index.js.map +1 -0
  5. package/dist/prisma-factory.service.d.ts +9 -0
  6. package/dist/prisma-factory.service.js +47 -0
  7. package/dist/prisma-factory.service.js.map +1 -0
  8. package/dist/prisma.module.d.ts +2 -0
  9. package/dist/prisma.module.js +23 -0
  10. package/dist/prisma.module.js.map +1 -0
  11. package/dist/prisma.service.d.ts +6 -0
  12. package/dist/prisma.service.js +27 -0
  13. package/dist/prisma.service.js.map +1 -0
  14. package/dist/scripts/create-tenant-schemas.d.ts +1 -0
  15. package/dist/scripts/create-tenant-schemas.js +117 -0
  16. package/dist/scripts/create-tenant-schemas.js.map +1 -0
  17. package/dist/scripts/data-migration/batch-migrator.d.ts +25 -0
  18. package/dist/scripts/data-migration/batch-migrator.js +333 -0
  19. package/dist/scripts/data-migration/batch-migrator.js.map +1 -0
  20. package/dist/scripts/data-migration/data-transformer.d.ts +17 -0
  21. package/dist/scripts/data-migration/data-transformer.js +242 -0
  22. package/dist/scripts/data-migration/data-transformer.js.map +1 -0
  23. package/dist/scripts/data-migration/db-connector.d.ts +7 -0
  24. package/dist/scripts/data-migration/db-connector.js +58 -0
  25. package/dist/scripts/data-migration/db-connector.js.map +1 -0
  26. package/dist/scripts/data-migration/dependency-manager.d.ts +9 -0
  27. package/dist/scripts/data-migration/dependency-manager.js +86 -0
  28. package/dist/scripts/data-migration/dependency-manager.js.map +1 -0
  29. package/dist/scripts/data-migration/dependency-resolver.d.ts +18 -0
  30. package/dist/scripts/data-migration/dependency-resolver.js +251 -0
  31. package/dist/scripts/data-migration/dependency-resolver.js.map +1 -0
  32. package/dist/scripts/data-migration/entity-discovery.d.ts +11 -0
  33. package/dist/scripts/data-migration/entity-discovery.js +152 -0
  34. package/dist/scripts/data-migration/entity-discovery.js.map +1 -0
  35. package/dist/scripts/data-migration/foreign-key-manager.d.ts +17 -0
  36. package/dist/scripts/data-migration/foreign-key-manager.js +70 -0
  37. package/dist/scripts/data-migration/foreign-key-manager.js.map +1 -0
  38. package/dist/scripts/data-migration/migration-phases.d.ts +5 -0
  39. package/dist/scripts/data-migration/migration-phases.js +55 -0
  40. package/dist/scripts/data-migration/migration-phases.js.map +1 -0
  41. package/dist/scripts/data-migration/migration-tool.d.ts +29 -0
  42. package/dist/scripts/data-migration/migration-tool.js +250 -0
  43. package/dist/scripts/data-migration/migration-tool.js.map +1 -0
  44. package/dist/scripts/data-migration/phase-generator.d.ts +15 -0
  45. package/dist/scripts/data-migration/phase-generator.js +187 -0
  46. package/dist/scripts/data-migration/phase-generator.js.map +1 -0
  47. package/dist/scripts/data-migration/schema-utils.d.ts +18 -0
  48. package/dist/scripts/data-migration/schema-utils.js +164 -0
  49. package/dist/scripts/data-migration/schema-utils.js.map +1 -0
  50. package/dist/scripts/data-migration/tenant-migrator.d.ts +15 -0
  51. package/dist/scripts/data-migration/tenant-migrator.js +110 -0
  52. package/dist/scripts/data-migration/tenant-migrator.js.map +1 -0
  53. package/dist/scripts/data-migration/typecast-manager.d.ts +5 -0
  54. package/dist/scripts/data-migration/typecast-manager.js +35 -0
  55. package/dist/scripts/data-migration/typecast-manager.js.map +1 -0
  56. package/dist/scripts/data-migration/types.d.ts +34 -0
  57. package/dist/scripts/data-migration/types.js +3 -0
  58. package/dist/scripts/data-migration/types.js.map +1 -0
  59. package/dist/scripts/data-migration.d.ts +22 -0
  60. package/dist/scripts/data-migration.js +593 -0
  61. package/dist/scripts/data-migration.js.map +1 -0
  62. package/dist/scripts/drop-database.d.ts +10 -0
  63. package/dist/scripts/drop-database.js +81 -0
  64. package/dist/scripts/drop-database.js.map +1 -0
  65. package/dist/scripts/error-handler.d.ts +12 -0
  66. package/dist/scripts/error-handler.js +82 -0
  67. package/dist/scripts/error-handler.js.map +1 -0
  68. package/dist/scripts/fix-data-types.d.ts +10 -0
  69. package/dist/scripts/fix-data-types.js +185 -0
  70. package/dist/scripts/fix-data-types.js.map +1 -0
  71. package/dist/scripts/fix-enum-values.d.ts +17 -0
  72. package/dist/scripts/fix-enum-values.js +234 -0
  73. package/dist/scripts/fix-enum-values.js.map +1 -0
  74. package/dist/scripts/fix-schema-discrepancies.d.ts +21 -0
  75. package/dist/scripts/fix-schema-discrepancies.js +240 -0
  76. package/dist/scripts/fix-schema-discrepancies.js.map +1 -0
  77. package/dist/scripts/migrate-schema-structure.d.ts +1 -0
  78. package/dist/scripts/migrate-schema-structure.js +76 -0
  79. package/dist/scripts/migrate-schema-structure.js.map +1 -0
  80. package/dist/scripts/post-migration-validator.d.ts +21 -0
  81. package/dist/scripts/post-migration-validator.js +341 -0
  82. package/dist/scripts/post-migration-validator.js.map +1 -0
  83. package/dist/scripts/pre-migration-validator.d.ts +25 -0
  84. package/dist/scripts/pre-migration-validator.js +491 -0
  85. package/dist/scripts/pre-migration-validator.js.map +1 -0
  86. package/dist/scripts/reset-database.d.ts +17 -0
  87. package/dist/scripts/reset-database.js +202 -0
  88. package/dist/scripts/reset-database.js.map +1 -0
  89. package/dist/scripts/retry-failed-migrations.d.ts +14 -0
  90. package/dist/scripts/retry-failed-migrations.js +301 -0
  91. package/dist/scripts/retry-failed-migrations.js.map +1 -0
  92. package/dist/scripts/run-migration.d.ts +1 -0
  93. package/dist/scripts/run-migration.js +525 -0
  94. package/dist/scripts/run-migration.js.map +1 -0
  95. package/dist/scripts/schema-sync.d.ts +1 -0
  96. package/dist/scripts/schema-sync.js +85 -0
  97. package/dist/scripts/schema-sync.js.map +1 -0
  98. package/dist/scripts/sync-enum-types.d.ts +13 -0
  99. package/dist/scripts/sync-enum-types.js +139 -0
  100. package/dist/scripts/sync-enum-types.js.map +1 -0
  101. package/dist/scripts/sync-enum-values.d.ts +20 -0
  102. package/dist/scripts/sync-enum-values.js +336 -0
  103. package/dist/scripts/sync-enum-values.js.map +1 -0
  104. package/dist/scripts/truncate-database.d.ts +10 -0
  105. package/dist/scripts/truncate-database.js +100 -0
  106. package/dist/scripts/truncate-database.js.map +1 -0
  107. package/dist/scripts/verify-migration-setup.d.ts +11 -0
  108. package/dist/scripts/verify-migration-setup.js +120 -0
  109. package/dist/scripts/verify-migration-setup.js.map +1 -0
  110. package/dist/tsconfig.tsbuildinfo +1 -0
  111. package/migration-config-public.json +95 -0
  112. package/migration-config.json +95 -0
  113. package/package.json +33 -0
  114. package/prisma/migrations/migration_lock.toml +3 -0
  115. package/prisma/schema.prisma +360 -0
  116. package/src/index.ts +23 -0
  117. package/src/prisma-factory.service.ts +41 -0
  118. package/src/prisma.module.ts +10 -0
  119. package/src/prisma.service.ts +17 -0
  120. package/src/scripts/create-tenant-schemas.ts +146 -0
  121. package/src/scripts/data-migration/batch-migrator.ts +569 -0
  122. package/src/scripts/data-migration/data-transformer.ts +377 -0
  123. package/src/scripts/data-migration/db-connector.ts +67 -0
  124. package/src/scripts/data-migration/dependency-resolver.ts +319 -0
  125. package/src/scripts/data-migration/entity-discovery.ts +197 -0
  126. package/src/scripts/data-migration/foreign-key-manager.ts +95 -0
  127. package/src/scripts/data-migration/migration-tool.ts +357 -0
  128. package/src/scripts/data-migration/schema-utils.ts +186 -0
  129. package/src/scripts/data-migration/tenant-migrator.ts +194 -0
  130. package/src/scripts/data-migration/typecast-manager.ts +38 -0
  131. package/src/scripts/data-migration/types.ts +40 -0
  132. package/src/scripts/drop-database.ts +105 -0
  133. package/src/scripts/dump-source-db.sh +62 -0
  134. package/src/scripts/dumps/source_dump_20250413_112626.sql +1527 -0
  135. package/src/scripts/error-handler.ts +118 -0
  136. package/src/scripts/fix-data-types.ts +242 -0
  137. package/src/scripts/fix-enum-values.ts +357 -0
  138. package/src/scripts/fix-schema-discrepancies.ts +318 -0
  139. package/src/scripts/migrate-schema-structure.ts +90 -0
  140. package/src/scripts/post-migration-validator.ts +427 -0
  141. package/src/scripts/pre-migration-validator.ts +611 -0
  142. package/src/scripts/reset-database.ts +264 -0
  143. package/src/scripts/retry-failed-migrations.ts +416 -0
  144. package/src/scripts/run-migration.ts +691 -0
  145. package/src/scripts/schema-sync.ts +129 -0
  146. package/src/scripts/sync-enum-types.ts +171 -0
  147. package/src/scripts/sync-enum-values.ts +563 -0
  148. package/src/scripts/truncate-database.ts +124 -0
  149. package/src/scripts/verify-migration-setup.ts +136 -0
  150. package/tsconfig.json +18 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"phase-generator.js","sourceRoot":"","sources":["../../../src/scripts/data-migration/phase-generator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ import { ColumnSchema } from "./types";
2
+ export declare class SchemaUtils {
3
+ private readonly sourcePool;
4
+ private readonly targetPool;
5
+ private readonly logger;
6
+ constructor(sourcePool: any, targetPool: any);
7
+ getTableSchema(tableName: string, dbType: "source" | "target", schema?: string): Promise<ColumnSchema[]>;
8
+ checkSchemaExists(schemaName: string): Promise<boolean>;
9
+ getTargetTables(schemaName: string): Promise<string[]>;
10
+ getEnumValues(schemaName: string, enumName: string): Promise<string[]>;
11
+ executeQuery(query: string, params?: any[]): Promise<any>;
12
+ queryTargetDb(query: string, params: any[]): Promise<{
13
+ rows: any[];
14
+ }>;
15
+ createMissingColumns(tableName: string, schema: string, columns: ColumnSchema[]): Promise<void>;
16
+ createSchema(schemaName: string): Promise<void>;
17
+ private getPublicTables;
18
+ }
@@ -0,0 +1,164 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SchemaUtils = void 0;
4
+ const common_1 = require("@nestjs/common");
5
+ class SchemaUtils {
6
+ constructor(sourcePool, targetPool) {
7
+ this.sourcePool = sourcePool;
8
+ this.targetPool = targetPool;
9
+ this.logger = new common_1.Logger("SchemaUtils");
10
+ }
11
+ async getTableSchema(tableName, dbType, schema = "public") {
12
+ const pool = dbType === "source" ? this.sourcePool : this.targetPool;
13
+ const query = `
14
+ SELECT
15
+ c.table_name,
16
+ c.column_name,
17
+ c.data_type,
18
+ c.udt_name,
19
+ c.character_maximum_length,
20
+ c.is_nullable,
21
+ c.column_default,
22
+ tc.constraint_type
23
+ FROM
24
+ information_schema.columns c
25
+ LEFT JOIN information_schema.constraint_column_usage ccu
26
+ ON c.column_name = ccu.column_name
27
+ AND c.table_name = ccu.table_name
28
+ LEFT JOIN information_schema.table_constraints tc
29
+ ON ccu.constraint_name = tc.constraint_name
30
+ WHERE
31
+ c.table_schema = $1
32
+ AND c.table_name = $2
33
+ ORDER BY
34
+ c.ordinal_position
35
+ `;
36
+ try {
37
+ const result = await pool.query(query, [schema, tableName]);
38
+ return result.rows;
39
+ }
40
+ catch (error) {
41
+ this.logger.error(`Error getting schema for ${schema}.${tableName}: ${error.message}`);
42
+ return [];
43
+ }
44
+ }
45
+ async checkSchemaExists(schemaName) {
46
+ try {
47
+ const query = `
48
+ SELECT schema_name
49
+ FROM information_schema.schemata
50
+ WHERE schema_name = $1
51
+ `;
52
+ const result = await this.targetPool.query(query, [schemaName]);
53
+ return result.rows.length > 0;
54
+ }
55
+ catch (error) {
56
+ this.logger.error(`Error checking if schema exists: ${error.message}`);
57
+ return false;
58
+ }
59
+ }
60
+ async getTargetTables(schemaName) {
61
+ try {
62
+ const query = `
63
+ SELECT table_name
64
+ FROM information_schema.tables
65
+ WHERE table_schema = $1
66
+ AND table_type = 'BASE TABLE'
67
+ `;
68
+ const result = await this.targetPool.query(query, [schemaName]);
69
+ this.logger.log(`Found ${result.rows.length} tables in schema ${schemaName}`);
70
+ result.rows.forEach(row => {
71
+ this.logger.log(`Table in schema ${schemaName}: ${row.table_name}`);
72
+ });
73
+ return result.rows.map((row) => row.table_name);
74
+ }
75
+ catch (error) {
76
+ this.logger.error(`Error getting target tables: ${error.message}`);
77
+ return [];
78
+ }
79
+ }
80
+ async getEnumValues(schemaName, enumName) {
81
+ try {
82
+ const query = `
83
+ SELECT e.enumlabel
84
+ FROM pg_type t
85
+ JOIN pg_enum e ON t.oid = e.enumtypid
86
+ JOIN pg_catalog.pg_namespace n ON n.oid = t.typnamespace
87
+ WHERE t.typname = $1
88
+ AND n.nspname = $2
89
+ `;
90
+ const result = await this.targetPool.query(query, [enumName, schemaName]);
91
+ return result.rows.map((row) => row.enumlabel);
92
+ }
93
+ catch (error) {
94
+ this.logger.error(`Error getting enum values for ${enumName}: ${error.message}`);
95
+ return [];
96
+ }
97
+ }
98
+ async executeQuery(query, params = []) {
99
+ return this.targetPool.query(query, params);
100
+ }
101
+ async queryTargetDb(query, params) {
102
+ return this.targetPool.query(query, params);
103
+ }
104
+ async createMissingColumns(tableName, schema, columns) {
105
+ for (const column of columns) {
106
+ try {
107
+ const query = `
108
+ ALTER TABLE "${schema}"."${tableName}"
109
+ ADD COLUMN IF NOT EXISTS "${column.column_name}" ${column.data_type}
110
+ ${column.is_nullable === 'NO' ? 'NOT NULL' : ''}
111
+ ${column.column_default ? `DEFAULT ${column.column_default}` : ''}
112
+ `;
113
+ await this.targetPool.query(query);
114
+ if (column.constraint_type === 'UNIQUE') {
115
+ const constraintName = `${tableName}_${column.column_name}_unique`;
116
+ const uniqueQuery = `
117
+ DO $$
118
+ BEGIN
119
+ IF NOT EXISTS (
120
+ SELECT 1 FROM pg_constraint WHERE conname = '${constraintName}'
121
+ ) THEN
122
+ ALTER TABLE "${schema}"."${tableName}"
123
+ ADD CONSTRAINT "${constraintName}" UNIQUE ("${column.column_name}");
124
+ END IF;
125
+ END $$;
126
+ `;
127
+ await this.targetPool.query(uniqueQuery);
128
+ }
129
+ }
130
+ catch (error) {
131
+ this.logger.error(`Error creating column ${column.column_name}: ${error.message}`);
132
+ throw error;
133
+ }
134
+ }
135
+ }
136
+ async createSchema(schemaName) {
137
+ try {
138
+ await this.targetPool.query(`CREATE SCHEMA IF NOT EXISTS "${schemaName}"`);
139
+ const tables = await this.getPublicTables();
140
+ for (const table of tables) {
141
+ await this.targetPool.query(`
142
+ CREATE TABLE IF NOT EXISTS "${schemaName}"."${table}" (
143
+ LIKE public."${table}" INCLUDING ALL
144
+ );
145
+ `);
146
+ }
147
+ this.logger.log(`Created schema ${schemaName} with all tables`);
148
+ }
149
+ catch (error) {
150
+ this.logger.error(`Error creating schema ${schemaName}: ${error.message}`);
151
+ throw error;
152
+ }
153
+ }
154
+ async getPublicTables() {
155
+ const result = await this.targetPool.query(`
156
+ SELECT tablename
157
+ FROM pg_tables
158
+ WHERE schemaname = 'public'
159
+ `);
160
+ return result.rows.map(row => row.tablename);
161
+ }
162
+ }
163
+ exports.SchemaUtils = SchemaUtils;
164
+ //# sourceMappingURL=schema-utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema-utils.js","sourceRoot":"","sources":["../../../src/scripts/data-migration/schema-utils.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ import { SchemaUtils } from "./schema-utils";
2
+ import { EntityDiscovery } from "./entity-discovery";
3
+ import { BatchMigrator } from "./batch-migrator";
4
+ import { DatabaseConnections } from "./types";
5
+ export declare class TenantMigrator {
6
+ private readonly schemaUtils;
7
+ private readonly entityDiscovery;
8
+ private readonly batchMigrator;
9
+ private readonly connections;
10
+ private readonly logger;
11
+ private readonly dependencyResolver;
12
+ constructor(schemaUtils: SchemaUtils, entityDiscovery: EntityDiscovery, batchMigrator: BatchMigrator, connections: DatabaseConnections);
13
+ verifyPhaseDependencies(tenantId: string, tables: string[]): Promise<boolean>;
14
+ migrateDataForTenant(tenantId: string, providerId: number, includeTables?: string[] | null, excludeTables?: string[] | null): Promise<void>;
15
+ }
@@ -0,0 +1,110 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.TenantMigrator = void 0;
4
+ const common_1 = require("@nestjs/common");
5
+ const client_1 = require("@prisma/client");
6
+ const dependency_resolver_1 = require("./dependency-resolver");
7
+ class TenantMigrator {
8
+ constructor(schemaUtils, entityDiscovery, batchMigrator, connections) {
9
+ this.schemaUtils = schemaUtils;
10
+ this.entityDiscovery = entityDiscovery;
11
+ this.batchMigrator = batchMigrator;
12
+ this.connections = connections;
13
+ this.logger = new common_1.Logger("TenantMigrator");
14
+ this.dependencyResolver = new dependency_resolver_1.DependencyResolver(connections.sourcePool, connections.targetPool);
15
+ }
16
+ async verifyPhaseDependencies(tenantId, tables) {
17
+ try {
18
+ for (const table of tables) {
19
+ const count = await this.connections.targetPrisma.$queryRawUnsafe(`SELECT COUNT(*) FROM "${tenantId}"."${table}"`);
20
+ if (!count || count[0].count === "0") {
21
+ this.logger.warn(`No data found in required table ${table} for tenant ${tenantId}`);
22
+ return false;
23
+ }
24
+ }
25
+ return true;
26
+ }
27
+ catch (error) {
28
+ this.logger.error(`Error verifying phase dependencies: ${error.message}`);
29
+ return false;
30
+ }
31
+ }
32
+ async migrateDataForTenant(tenantId, providerId, includeTables, excludeTables) {
33
+ this.logger.log(`Migrating data for tenant: ${tenantId} (Provider ID: ${providerId || "N/A"})`);
34
+ try {
35
+ let tenantExists = false;
36
+ try {
37
+ const result = await this.connections.sourcePrisma.api_keys.findFirst({
38
+ where: {
39
+ api_key: tenantId,
40
+ OR: [{ provider_id: providerId }, { provider_id: null }],
41
+ },
42
+ });
43
+ tenantExists = !!result;
44
+ }
45
+ catch (error) {
46
+ this.logger.warn(`Error checking tenant existence, will assume using public schema: ${error.message}`);
47
+ tenantExists = true;
48
+ }
49
+ if (!tenantExists) {
50
+ this.logger.warn(`Tenant ${tenantId} does not exist or does not belong to provider ${providerId || "N/A"}. Using public schema as source.`);
51
+ }
52
+ this.logger.log(`Proceeding with migration for tenant ${tenantId}`);
53
+ }
54
+ catch (error) {
55
+ this.logger.error(`Error verifying tenant ${tenantId} for provider ${providerId || "N/A"}: ${error.message}`);
56
+ this.logger.error(`Error details: ${JSON.stringify(error)}`);
57
+ }
58
+ const tenantPrisma = new client_1.PrismaClient({
59
+ datasources: {
60
+ db: {
61
+ url: `${process.env.DATABASE_URL}?schema=${tenantId}`,
62
+ },
63
+ },
64
+ transactionOptions: {
65
+ maxWait: 300000,
66
+ timeout: 300000,
67
+ },
68
+ log: ["query", "error", "warn"],
69
+ });
70
+ try {
71
+ const schemaExists = await this.schemaUtils.checkSchemaExists(tenantId);
72
+ if (!schemaExists) {
73
+ this.logger.error(`Schema ${tenantId} does not exist in target database. Skipping migration.`);
74
+ return;
75
+ }
76
+ const targetTables = await this.schemaUtils.getTargetTables(tenantId);
77
+ let entityTypes = await this.entityDiscovery.discoverEntityTypes(tenantId, targetTables);
78
+ if (includeTables) {
79
+ entityTypes = entityTypes.filter((entity) => includeTables.includes(entity.name));
80
+ this.logger.log(`Filtered to include only: ${includeTables.join(", ")}`);
81
+ }
82
+ if (excludeTables) {
83
+ entityTypes = entityTypes.filter((entity) => !excludeTables.includes(entity.name));
84
+ this.logger.log(`Filtered to exclude: ${excludeTables.join(", ")}`);
85
+ }
86
+ const sortedTables = await this.dependencyResolver.analyzeDependencies();
87
+ const orderedEntities = entityTypes
88
+ .sort((a, b) => {
89
+ const aIndex = sortedTables.indexOf(a.name);
90
+ const bIndex = sortedTables.indexOf(b.name);
91
+ return aIndex - bIndex;
92
+ })
93
+ .filter(entity => sortedTables.includes(entity.name));
94
+ this.logger.log(`Migration order: ${orderedEntities.map((e) => e.name).join(" -> ")}`);
95
+ this.logger.log(`Discovered ${entityTypes.length} entity types for migration`);
96
+ for (const entity of orderedEntities) {
97
+ await this.batchMigrator.migrateEntityDataInBatches(tenantPrisma, entity, providerId, tenantId);
98
+ }
99
+ this.logger.log(`Completed migration for tenant ${tenantId}`);
100
+ }
101
+ catch (error) {
102
+ this.logger.error(`Error migrating data for tenant ${tenantId}: ${error.message}`);
103
+ }
104
+ finally {
105
+ await tenantPrisma.$disconnect();
106
+ }
107
+ }
108
+ }
109
+ exports.TenantMigrator = TenantMigrator;
110
+ //# sourceMappingURL=tenant-migrator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tenant-migrator.js","sourceRoot":"","sources":["../../../src/scripts/data-migration/tenant-migrator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import { ColumnSchema } from "./types";
2
+ export declare class TypecastManager {
3
+ getTypecastForColumn(column: ColumnSchema): string;
4
+ getEnumCastExpression(schemaName: string, enumType: string, paramIndex: number): string;
5
+ }
@@ -0,0 +1,35 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.TypecastManager = void 0;
4
+ class TypecastManager {
5
+ getTypecastForColumn(column) {
6
+ var _a;
7
+ switch (column.data_type.toLowerCase()) {
8
+ case "numeric":
9
+ case "decimal":
10
+ return "::numeric";
11
+ case "integer":
12
+ return "::integer";
13
+ case "bigint":
14
+ return "::bigint";
15
+ case "boolean":
16
+ return "::boolean";
17
+ case "timestamp":
18
+ return "::timestamp";
19
+ case "timestamptz":
20
+ return "::timestamptz";
21
+ case "user-defined":
22
+ if ((_a = column.udt_name) === null || _a === void 0 ? void 0 : _a.startsWith("enum_")) {
23
+ return `::${column.udt_name}`;
24
+ }
25
+ return "";
26
+ default:
27
+ return "";
28
+ }
29
+ }
30
+ getEnumCastExpression(schemaName, enumType, paramIndex) {
31
+ return `CAST($${paramIndex} AS "${schemaName}".${enumType})`;
32
+ }
33
+ }
34
+ exports.TypecastManager = TypecastManager;
35
+ //# sourceMappingURL=typecast-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"typecast-manager.js","sourceRoot":"","sources":["../../../src/scripts/data-migration/typecast-manager.ts"],"names":[],"mappings":";;;AAEA,MAAa,eAAe;IAC1B,oBAAoB,CAAC,MAAoB;;QACvC,QAAQ,MAAM,CAAC,SAAS,CAAC,WAAW,EAAE,EAAE,CAAC;YACvC,KAAK,SAAS,CAAC;YACf,KAAK,SAAS;gBACZ,OAAO,WAAW,CAAC;YACrB,KAAK,SAAS;gBACZ,OAAO,WAAW,CAAC;YACrB,KAAK,QAAQ;gBACX,OAAO,UAAU,CAAC;YACpB,KAAK,SAAS;gBACZ,OAAO,WAAW,CAAC;YACrB,KAAK,WAAW;gBACd,OAAO,aAAa,CAAC;YACvB,KAAK,aAAa;gBAChB,OAAO,eAAe,CAAC;YACzB,KAAK,cAAc;gBAEjB,IAAI,MAAA,MAAM,CAAC,QAAQ,0CAAE,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;oBACzC,OAAO,KAAK,MAAM,CAAC,QAAQ,EAAE,CAAC;gBAChC,CAAC;gBACD,OAAO,EAAE,CAAC;YACZ;gBACE,OAAO,EAAE,CAAC;QACd,CAAC;IACH,CAAC;IAGD,qBAAqB,CACnB,UAAkB,EAClB,QAAgB,EAChB,UAAkB;QAElB,OAAO,SAAS,UAAU,QAAQ,UAAU,KAAK,QAAQ,GAAG,CAAC;IAC/D,CAAC;CACF;AAnCD,0CAmCC"}
@@ -0,0 +1,34 @@
1
+ import { Pool } from "pg";
2
+ import { PrismaClient } from "@prisma/client";
3
+ export interface DatabaseConnections {
4
+ sourcePool: Pool;
5
+ targetPool: Pool;
6
+ sourcePrisma: PrismaClient;
7
+ targetPrisma: PrismaClient;
8
+ }
9
+ export interface ColumnSchema {
10
+ table_name: string;
11
+ column_name: string;
12
+ data_type: string;
13
+ udt_name: string;
14
+ character_maximum_length?: number;
15
+ is_nullable: string;
16
+ column_default?: string;
17
+ constraint_type?: string;
18
+ }
19
+ export interface EntityType {
20
+ name: string;
21
+ idField: string;
22
+ filterColumn?: string;
23
+ filterVia?: string;
24
+ foreignKey?: string;
25
+ joinTable?: string;
26
+ joinField?: string;
27
+ joinForeignKey?: string;
28
+ directQuery?: string;
29
+ }
30
+ export interface EnumCastValue {
31
+ needsEnumCast: boolean;
32
+ value: any;
33
+ enumType: string;
34
+ }
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/scripts/data-migration/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,22 @@
1
+ export declare class DataMigrationTool {
2
+ private readonly logger;
3
+ private readonly sourcePrisma;
4
+ private readonly targetPrisma;
5
+ private readonly sourcePool;
6
+ private readonly targetPool;
7
+ private schemaCache;
8
+ private targetSchemaCache;
9
+ private errorHandler;
10
+ constructor();
11
+ migrateData(): Promise<void>;
12
+ private migrateDataForTenant;
13
+ private getEnumValues;
14
+ private migrateEntityDataInBatches;
15
+ private discoverEntityTypes;
16
+ private checkSchemaExists;
17
+ private getTargetTables;
18
+ private upsertEntity;
19
+ private getTableSchema;
20
+ private cleanup;
21
+ private validateEnumValue;
22
+ }