@javalabs/prisma-client 1.0.26 → 1.0.29

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 (170) hide show
  1. package/.github/CODEOWNERS +1 -1
  2. package/README.md +269 -269
  3. package/migration-config.json +63 -63
  4. package/migration-config.json.bk +95 -95
  5. package/migrations/add_reserved_amount.sql +7 -7
  6. package/package.json +44 -44
  7. package/prisma/migrations/add_uuid_to_transactions.sql +13 -13
  8. package/prisma/schema.prisma +609 -607
  9. package/src/index.ts +23 -23
  10. package/src/prisma-factory.service.ts +40 -40
  11. package/src/prisma.module.ts +9 -9
  12. package/src/prisma.service.ts +16 -16
  13. package/src/scripts/add-uuid-to-table.ts +138 -138
  14. package/src/scripts/create-tenant-schemas.ts +145 -145
  15. package/src/scripts/data-migration/batch-migrator.ts +248 -248
  16. package/src/scripts/data-migration/data-transformer.ts +426 -426
  17. package/src/scripts/data-migration/db-connector.ts +120 -120
  18. package/src/scripts/data-migration/dependency-resolver.ts +174 -174
  19. package/src/scripts/data-migration/entity-discovery.ts +196 -196
  20. package/src/scripts/data-migration/foreign-key-manager.ts +277 -277
  21. package/src/scripts/data-migration/migration-config.json +63 -63
  22. package/src/scripts/data-migration/migration-tool.ts +509 -509
  23. package/src/scripts/data-migration/schema-utils.ts +248 -248
  24. package/src/scripts/data-migration/tenant-migrator.ts +201 -201
  25. package/src/scripts/data-migration/typecast-manager.ts +193 -193
  26. package/src/scripts/data-migration/types.ts +113 -113
  27. package/src/scripts/database-initializer.ts +49 -49
  28. package/src/scripts/drop-database.ts +104 -104
  29. package/src/scripts/dump-source-db.sh +61 -61
  30. package/src/scripts/encrypt-user-passwords.ts +36 -36
  31. package/src/scripts/error-handler.ts +117 -117
  32. package/src/scripts/fix-data-types.ts +241 -241
  33. package/src/scripts/fix-enum-values.ts +357 -357
  34. package/src/scripts/fix-schema-discrepancies.ts +317 -317
  35. package/src/scripts/fix-table-indexes.ts +601 -601
  36. package/src/scripts/migrate-schema-structure.ts +90 -90
  37. package/src/scripts/migrate-uuid.ts +76 -76
  38. package/src/scripts/post-migration-validator.ts +526 -526
  39. package/src/scripts/pre-migration-validator.ts +610 -610
  40. package/src/scripts/reset-database.ts +263 -263
  41. package/src/scripts/retry-failed-migrations.ts +416 -416
  42. package/src/scripts/run-migration.ts +707 -707
  43. package/src/scripts/schema-sync.ts +128 -128
  44. package/src/scripts/sequence-sync-cli.ts +416 -416
  45. package/src/scripts/sequence-synchronizer.ts +127 -127
  46. package/src/scripts/sync-enum-types.ts +170 -170
  47. package/src/scripts/sync-enum-values.ts +563 -563
  48. package/src/scripts/truncate-database.ts +123 -123
  49. package/src/scripts/verify-migration-setup.ts +135 -135
  50. package/tsconfig.json +17 -17
  51. package/dist/index.d.ts +0 -7
  52. package/dist/index.js +0 -34
  53. package/dist/index.js.map +0 -1
  54. package/dist/prisma-factory.service.d.ts +0 -9
  55. package/dist/prisma-factory.service.js +0 -47
  56. package/dist/prisma-factory.service.js.map +0 -1
  57. package/dist/prisma.module.d.ts +0 -2
  58. package/dist/prisma.module.js +0 -23
  59. package/dist/prisma.module.js.map +0 -1
  60. package/dist/prisma.service.d.ts +0 -6
  61. package/dist/prisma.service.js +0 -27
  62. package/dist/prisma.service.js.map +0 -1
  63. package/dist/scripts/add-uuid-to-table.d.ts +0 -8
  64. package/dist/scripts/add-uuid-to-table.js +0 -98
  65. package/dist/scripts/add-uuid-to-table.js.map +0 -1
  66. package/dist/scripts/create-tenant-schemas.d.ts +0 -1
  67. package/dist/scripts/create-tenant-schemas.js +0 -117
  68. package/dist/scripts/create-tenant-schemas.js.map +0 -1
  69. package/dist/scripts/data-migration/batch-migrator.d.ts +0 -20
  70. package/dist/scripts/data-migration/batch-migrator.js +0 -134
  71. package/dist/scripts/data-migration/batch-migrator.js.map +0 -1
  72. package/dist/scripts/data-migration/data-transformer.d.ts +0 -26
  73. package/dist/scripts/data-migration/data-transformer.js +0 -278
  74. package/dist/scripts/data-migration/data-transformer.js.map +0 -1
  75. package/dist/scripts/data-migration/db-connector.d.ts +0 -12
  76. package/dist/scripts/data-migration/db-connector.js +0 -94
  77. package/dist/scripts/data-migration/db-connector.js.map +0 -1
  78. package/dist/scripts/data-migration/dependency-resolver.d.ts +0 -18
  79. package/dist/scripts/data-migration/dependency-resolver.js +0 -132
  80. package/dist/scripts/data-migration/dependency-resolver.js.map +0 -1
  81. package/dist/scripts/data-migration/entity-discovery.d.ts +0 -11
  82. package/dist/scripts/data-migration/entity-discovery.js +0 -152
  83. package/dist/scripts/data-migration/entity-discovery.js.map +0 -1
  84. package/dist/scripts/data-migration/foreign-key-manager.d.ts +0 -18
  85. package/dist/scripts/data-migration/foreign-key-manager.js +0 -160
  86. package/dist/scripts/data-migration/foreign-key-manager.js.map +0 -1
  87. package/dist/scripts/data-migration/migration-tool.d.ts +0 -48
  88. package/dist/scripts/data-migration/migration-tool.js +0 -290
  89. package/dist/scripts/data-migration/migration-tool.js.map +0 -1
  90. package/dist/scripts/data-migration/schema-utils.d.ts +0 -18
  91. package/dist/scripts/data-migration/schema-utils.js +0 -207
  92. package/dist/scripts/data-migration/schema-utils.js.map +0 -1
  93. package/dist/scripts/data-migration/tenant-migrator.d.ts +0 -15
  94. package/dist/scripts/data-migration/tenant-migrator.js +0 -117
  95. package/dist/scripts/data-migration/tenant-migrator.js.map +0 -1
  96. package/dist/scripts/data-migration/typecast-manager.d.ts +0 -9
  97. package/dist/scripts/data-migration/typecast-manager.js +0 -179
  98. package/dist/scripts/data-migration/typecast-manager.js.map +0 -1
  99. package/dist/scripts/data-migration/types.d.ts +0 -100
  100. package/dist/scripts/data-migration/types.js +0 -3
  101. package/dist/scripts/data-migration/types.js.map +0 -1
  102. package/dist/scripts/database-initializer.d.ts +0 -5
  103. package/dist/scripts/database-initializer.js +0 -45
  104. package/dist/scripts/database-initializer.js.map +0 -1
  105. package/dist/scripts/drop-database.d.ts +0 -10
  106. package/dist/scripts/drop-database.js +0 -81
  107. package/dist/scripts/drop-database.js.map +0 -1
  108. package/dist/scripts/encrypt-user-passwords.d.ts +0 -1
  109. package/dist/scripts/encrypt-user-passwords.js +0 -33
  110. package/dist/scripts/encrypt-user-passwords.js.map +0 -1
  111. package/dist/scripts/error-handler.d.ts +0 -12
  112. package/dist/scripts/error-handler.js +0 -82
  113. package/dist/scripts/error-handler.js.map +0 -1
  114. package/dist/scripts/fix-data-types.d.ts +0 -10
  115. package/dist/scripts/fix-data-types.js +0 -185
  116. package/dist/scripts/fix-data-types.js.map +0 -1
  117. package/dist/scripts/fix-enum-values.d.ts +0 -17
  118. package/dist/scripts/fix-enum-values.js +0 -234
  119. package/dist/scripts/fix-enum-values.js.map +0 -1
  120. package/dist/scripts/fix-schema-discrepancies.d.ts +0 -21
  121. package/dist/scripts/fix-schema-discrepancies.js +0 -240
  122. package/dist/scripts/fix-schema-discrepancies.js.map +0 -1
  123. package/dist/scripts/fix-table-indexes.d.ts +0 -26
  124. package/dist/scripts/fix-table-indexes.js +0 -460
  125. package/dist/scripts/fix-table-indexes.js.map +0 -1
  126. package/dist/scripts/migrate-schema-structure.d.ts +0 -1
  127. package/dist/scripts/migrate-schema-structure.js +0 -76
  128. package/dist/scripts/migrate-schema-structure.js.map +0 -1
  129. package/dist/scripts/migrate-uuid.d.ts +0 -2
  130. package/dist/scripts/migrate-uuid.js +0 -57
  131. package/dist/scripts/migrate-uuid.js.map +0 -1
  132. package/dist/scripts/post-migration-validator.d.ts +0 -34
  133. package/dist/scripts/post-migration-validator.js +0 -363
  134. package/dist/scripts/post-migration-validator.js.map +0 -1
  135. package/dist/scripts/pre-migration-validator.d.ts +0 -25
  136. package/dist/scripts/pre-migration-validator.js +0 -491
  137. package/dist/scripts/pre-migration-validator.js.map +0 -1
  138. package/dist/scripts/reset-database.d.ts +0 -17
  139. package/dist/scripts/reset-database.js +0 -202
  140. package/dist/scripts/reset-database.js.map +0 -1
  141. package/dist/scripts/retry-failed-migrations.d.ts +0 -14
  142. package/dist/scripts/retry-failed-migrations.js +0 -301
  143. package/dist/scripts/retry-failed-migrations.js.map +0 -1
  144. package/dist/scripts/run-migration.d.ts +0 -1
  145. package/dist/scripts/run-migration.js +0 -512
  146. package/dist/scripts/run-migration.js.map +0 -1
  147. package/dist/scripts/schema-sync.d.ts +0 -1
  148. package/dist/scripts/schema-sync.js +0 -85
  149. package/dist/scripts/schema-sync.js.map +0 -1
  150. package/dist/scripts/sequence-sync-cli.d.ts +0 -2
  151. package/dist/scripts/sequence-sync-cli.js +0 -287
  152. package/dist/scripts/sequence-sync-cli.js.map +0 -1
  153. package/dist/scripts/sequence-synchronizer.d.ts +0 -8
  154. package/dist/scripts/sequence-synchronizer.js +0 -88
  155. package/dist/scripts/sequence-synchronizer.js.map +0 -1
  156. package/dist/scripts/sync-enum-types.d.ts +0 -13
  157. package/dist/scripts/sync-enum-types.js +0 -139
  158. package/dist/scripts/sync-enum-types.js.map +0 -1
  159. package/dist/scripts/sync-enum-values.d.ts +0 -20
  160. package/dist/scripts/sync-enum-values.js +0 -336
  161. package/dist/scripts/sync-enum-values.js.map +0 -1
  162. package/dist/scripts/truncate-database.d.ts +0 -10
  163. package/dist/scripts/truncate-database.js +0 -100
  164. package/dist/scripts/truncate-database.js.map +0 -1
  165. package/dist/scripts/verify-migration-setup.d.ts +0 -11
  166. package/dist/scripts/verify-migration-setup.js +0 -120
  167. package/dist/scripts/verify-migration-setup.js.map +0 -1
  168. package/dist/tsconfig.tsbuildinfo +0 -1
  169. package/prisma/migrations/add_athena_match_fields.sql +0 -18
  170. package/prisma/migrations/add_bank_receipt_number.sql +0 -9
@@ -1,82 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.MigrationErrorHandler = void 0;
4
- const fs = require("fs");
5
- const path = require("path");
6
- const common_1 = require("@nestjs/common");
7
- class MigrationErrorHandler {
8
- constructor(logDir = path.join(process.cwd(), 'migration-logs')) {
9
- this.logDir = logDir;
10
- this.logger = new common_1.Logger('MigrationErrorHandler');
11
- this.errorLog = {};
12
- if (!fs.existsSync(this.logDir)) {
13
- fs.mkdirSync(this.logDir, { recursive: true });
14
- }
15
- const timestamp = new Date().toISOString().replace(/:/g, '-').replace(/\..+/, '');
16
- this.errorLogPath = path.join(this.logDir, `migration-errors-${timestamp}.json`);
17
- this.saveErrorLog();
18
- }
19
- logError(tenantId, entityName, recordId, error, data) {
20
- if (!this.errorLog[tenantId]) {
21
- this.errorLog[tenantId] = [];
22
- }
23
- this.errorLog[tenantId].push({
24
- timestamp: new Date().toISOString(),
25
- entity: entityName,
26
- recordId,
27
- error: {
28
- message: error.message,
29
- stack: error.stack,
30
- },
31
- data: data || null,
32
- });
33
- this.saveErrorLog();
34
- }
35
- saveErrorLog() {
36
- try {
37
- fs.writeFileSync(this.errorLogPath, JSON.stringify(this.errorLog, null, 2), 'utf8');
38
- }
39
- catch (error) {
40
- this.logger.error(`Error saving error log: ${error.message}`);
41
- }
42
- }
43
- generateErrorReport() {
44
- let totalErrors = 0;
45
- let report = 'Migration Error Report\n';
46
- report += '=====================\n\n';
47
- for (const tenantId in this.errorLog) {
48
- const tenantErrors = this.errorLog[tenantId];
49
- if (tenantErrors.length === 0)
50
- continue;
51
- totalErrors += tenantErrors.length;
52
- report += `Tenant: ${tenantId}\n`;
53
- report += `Errors: ${tenantErrors.length}\n\n`;
54
- const entityErrors = {};
55
- for (const error of tenantErrors) {
56
- entityErrors[error.entity] = (entityErrors[error.entity] || 0) + 1;
57
- }
58
- report += 'Errors by entity:\n';
59
- for (const entity in entityErrors) {
60
- report += ` - ${entity}: ${entityErrors[entity]}\n`;
61
- }
62
- report += '\n';
63
- report += 'Sample errors:\n';
64
- for (let i = 0; i < Math.min(5, tenantErrors.length); i++) {
65
- const error = tenantErrors[i];
66
- report += ` - ${error.entity} (ID: ${error.recordId}): ${error.error.message}\n`;
67
- }
68
- report += '\n';
69
- }
70
- report += `Total errors: ${totalErrors}\n`;
71
- report += `Full error log saved to: ${this.errorLogPath}\n`;
72
- return report;
73
- }
74
- getErrorsForTenant(tenantId) {
75
- return this.errorLog[tenantId] || [];
76
- }
77
- getAllErrors() {
78
- return this.errorLog;
79
- }
80
- }
81
- exports.MigrationErrorHandler = MigrationErrorHandler;
82
- //# sourceMappingURL=error-handler.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"error-handler.js","sourceRoot":"","sources":["../../src/scripts/error-handler.ts"],"names":[],"mappings":"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"}
@@ -1,10 +0,0 @@
1
- export declare class DataTypeFixer {
2
- private readonly logger;
3
- private readonly sourcePool;
4
- private readonly targetPool;
5
- constructor();
6
- fixDataTypes(): Promise<void>;
7
- private fixNumericFieldsForSchema;
8
- private fixEnumFieldsForSchema;
9
- private cleanup;
10
- }
@@ -1,185 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.DataTypeFixer = void 0;
4
- const dotenv = require("dotenv");
5
- const common_1 = require("@nestjs/common");
6
- const pg = require("pg");
7
- dotenv.config();
8
- class DataTypeFixer {
9
- constructor() {
10
- this.logger = new common_1.Logger("DataTypeFixer");
11
- this.sourcePool = new pg.Pool({
12
- connectionString: process.env.SOURCE_DATABASE_URL,
13
- });
14
- this.targetPool = new pg.Pool({
15
- connectionString: process.env.DATABASE_URL,
16
- });
17
- }
18
- async fixDataTypes() {
19
- try {
20
- this.logger.log("Starting data type fixing process");
21
- const schemasQuery = `
22
- SELECT schema_name
23
- FROM information_schema.schemata
24
- WHERE schema_name NOT IN ('public', 'information_schema', 'pg_catalog', 'pg_toast')
25
- AND schema_name NOT LIKE 'pg_%';
26
- `;
27
- const schemasResult = await this.targetPool.query(schemasQuery);
28
- const schemas = schemasResult.rows.map(row => row.schema_name);
29
- this.logger.log(`Found ${schemas.length} schemas to process`);
30
- for (const schema of schemas) {
31
- await this.fixNumericFieldsForSchema(schema);
32
- await this.fixEnumFieldsForSchema(schema);
33
- }
34
- this.logger.log("Data type fixing completed successfully");
35
- }
36
- catch (error) {
37
- this.logger.error(`Error during data type fixing: ${error.message}`, error.stack);
38
- }
39
- finally {
40
- await this.cleanup();
41
- }
42
- }
43
- async fixNumericFieldsForSchema(schema) {
44
- this.logger.log(`Processing numeric fields for schema: ${schema}`);
45
- try {
46
- const numericColumnsQuery = `
47
- SELECT
48
- table_name,
49
- column_name
50
- FROM
51
- information_schema.columns
52
- WHERE
53
- table_schema = $1
54
- AND data_type = 'numeric'
55
- `;
56
- const numericColumnsResult = await this.targetPool.query(numericColumnsQuery, [schema]);
57
- for (const row of numericColumnsResult.rows) {
58
- const tableName = row.table_name;
59
- const columnName = row.column_name;
60
- this.logger.log(`Fixing numeric column ${columnName} in table ${schema}.${tableName}`);
61
- const updateQuery = `
62
- UPDATE "${schema}"."${tableName}"
63
- SET "${columnName}" = CASE
64
- WHEN "${columnName}" IS NULL THEN NULL
65
- WHEN "${columnName}" = '' THEN NULL
66
- ELSE CAST("${columnName}" AS NUMERIC)
67
- END
68
- WHERE "${columnName}" IS NOT NULL
69
- AND "${columnName}" != ''
70
- AND "${columnName}" ~ '^[0-9]+(\.[0-9]+)?$';
71
- `;
72
- try {
73
- await this.targetPool.query(updateQuery);
74
- this.logger.log(`Successfully fixed numeric column ${columnName} in table ${schema}.${tableName}`);
75
- }
76
- catch (updateError) {
77
- this.logger.error(`Error fixing numeric column ${columnName} in table ${schema}.${tableName}: ${updateError.message}`);
78
- }
79
- }
80
- this.logger.log(`Completed processing numeric fields for schema: ${schema}`);
81
- }
82
- catch (error) {
83
- this.logger.error(`Error processing numeric fields for schema ${schema}: ${error.message}`, error.stack);
84
- }
85
- }
86
- async fixEnumFieldsForSchema(schema) {
87
- this.logger.log(`Processing enum fields for schema: ${schema}`);
88
- try {
89
- const enumColumnsQuery = `
90
- SELECT
91
- c.table_name,
92
- c.column_name,
93
- c.udt_name
94
- FROM
95
- information_schema.columns c
96
- WHERE
97
- c.table_schema = $1
98
- AND c.data_type = 'USER-DEFINED'
99
- AND c.udt_name LIKE 'enum_%'
100
- `;
101
- const enumColumnsResult = await this.targetPool.query(enumColumnsQuery, [schema]);
102
- for (const row of enumColumnsResult.rows) {
103
- const tableName = row.table_name;
104
- const columnName = row.column_name;
105
- const enumTypeName = row.udt_name;
106
- this.logger.log(`Fixing enum column ${columnName} (${enumTypeName}) in table ${schema}.${tableName}`);
107
- const enumValuesQuery = `
108
- SELECT e.enumlabel
109
- FROM pg_enum e
110
- JOIN pg_type t ON e.enumtypid = t.oid
111
- WHERE t.typname = $1
112
- ORDER BY e.enumsortorder
113
- `;
114
- const enumValuesResult = await this.targetPool.query(enumValuesQuery, [enumTypeName]);
115
- const validEnumValues = enumValuesResult.rows.map(r => r.enumlabel);
116
- if (validEnumValues.length === 0) {
117
- this.logger.warn(`No enum values found for type ${enumTypeName}. Skipping.`);
118
- continue;
119
- }
120
- this.logger.log(`Valid values for ${enumTypeName}: ${validEnumValues.join(', ')}`);
121
- const currentValuesQuery = `
122
- SELECT DISTINCT "${columnName}"
123
- FROM "${schema}"."${tableName}"
124
- WHERE "${columnName}" IS NOT NULL
125
- `;
126
- const currentValuesResult = await this.targetPool.query(currentValuesQuery);
127
- const currentValues = currentValuesResult.rows.map(r => r[columnName]);
128
- const invalidValues = currentValues.filter(val => !validEnumValues.includes(val));
129
- if (invalidValues.length > 0) {
130
- this.logger.log(`Found invalid values for enum ${enumTypeName}: ${invalidValues.join(', ')}`);
131
- for (const invalidValue of invalidValues) {
132
- const matchingValidValue = validEnumValues.find(v => v.toLowerCase() === invalidValue.toLowerCase());
133
- let updateQuery;
134
- if (matchingValidValue) {
135
- updateQuery = `
136
- UPDATE "${schema}"."${tableName}"
137
- SET "${columnName}" = $1
138
- WHERE "${columnName}" = $2
139
- `;
140
- await this.targetPool.query(updateQuery, [matchingValidValue, invalidValue]);
141
- this.logger.log(`Updated invalid value "${invalidValue}" to "${matchingValidValue}"`);
142
- }
143
- else {
144
- updateQuery = `
145
- UPDATE "${schema}"."${tableName}"
146
- SET "${columnName}" = NULL
147
- WHERE "${columnName}" = $1
148
- `;
149
- await this.targetPool.query(updateQuery, [invalidValue]);
150
- this.logger.log(`Set invalid value "${invalidValue}" to NULL`);
151
- }
152
- }
153
- }
154
- else {
155
- this.logger.log(`No invalid enum values found for ${columnName} in ${schema}.${tableName}`);
156
- }
157
- }
158
- this.logger.log(`Completed processing enum fields for schema: ${schema}`);
159
- }
160
- catch (error) {
161
- this.logger.error(`Error processing enum fields for schema ${schema}: ${error.message}`, error.stack);
162
- }
163
- }
164
- async cleanup() {
165
- this.logger.log("Cleaning up database connections");
166
- await this.sourcePool.end();
167
- await this.targetPool.end();
168
- }
169
- }
170
- exports.DataTypeFixer = DataTypeFixer;
171
- if (require.main === module) {
172
- const run = async () => {
173
- try {
174
- const fixer = new DataTypeFixer();
175
- await fixer.fixDataTypes();
176
- process.exit(0);
177
- }
178
- catch (error) {
179
- console.error("Error:", error.message);
180
- process.exit(1);
181
- }
182
- };
183
- run();
184
- }
185
- //# sourceMappingURL=fix-data-types.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"fix-data-types.js","sourceRoot":"","sources":["../../src/scripts/fix-data-types.ts"],"names":[],"mappings":"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"}
@@ -1,17 +0,0 @@
1
- export declare class EnumFixer {
2
- private readonly databaseUrl;
3
- private readonly saveMapping;
4
- private readonly logger;
5
- private readonly pool;
6
- private enumValuesCache;
7
- private mappingsCache;
8
- private readonly mappingsFilePath;
9
- constructor(databaseUrl?: string, saveMapping?: boolean);
10
- fixEnumValues(): Promise<void>;
11
- private getSchemas;
12
- private fixEnumValuesForSchema;
13
- private fixEnumColumn;
14
- private getEnumValues;
15
- private saveMappings;
16
- private cleanup;
17
- }
@@ -1,234 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.EnumFixer = void 0;
4
- const pg = require("pg");
5
- const dotenv = require("dotenv");
6
- const common_1 = require("@nestjs/common");
7
- const fs = require("fs");
8
- const path = require("path");
9
- dotenv.config();
10
- class EnumFixer {
11
- constructor(databaseUrl = process.env.DATABASE_URL, saveMapping = true) {
12
- this.databaseUrl = databaseUrl;
13
- this.saveMapping = saveMapping;
14
- this.logger = new common_1.Logger("EnumFixer");
15
- this.enumValuesCache = {};
16
- this.mappingsCache = {};
17
- this.pool = new pg.Pool({
18
- connectionString: this.databaseUrl,
19
- });
20
- const mappingsDir = path.join(process.cwd(), "migration-logs");
21
- if (!fs.existsSync(mappingsDir)) {
22
- fs.mkdirSync(mappingsDir, { recursive: true });
23
- }
24
- const timestamp = new Date()
25
- .toISOString()
26
- .replace(/:/g, "-")
27
- .replace(/\..+/, "");
28
- this.mappingsFilePath = path.join(mappingsDir, `enum-mappings-${timestamp}.json`);
29
- if (this.saveMapping) {
30
- this.saveMappings();
31
- }
32
- }
33
- async fixEnumValues() {
34
- try {
35
- this.logger.log("Starting enum values fixing process");
36
- const schemas = await this.getSchemas();
37
- this.logger.log(`Found ${schemas.length} schemas to process`);
38
- for (const schema of schemas) {
39
- await this.fixEnumValuesForSchema(schema);
40
- }
41
- if (this.saveMapping) {
42
- this.saveMappings();
43
- this.logger.log(`Enum mappings saved to: ${this.mappingsFilePath}`);
44
- }
45
- this.logger.log("Enum values fixing completed successfully");
46
- }
47
- catch (error) {
48
- this.logger.error(`Error during enum values fixing: ${error.message}`, error.stack);
49
- }
50
- finally {
51
- await this.cleanup();
52
- }
53
- }
54
- async getSchemas() {
55
- const result = await this.pool.query(`
56
- SELECT schema_name
57
- FROM information_schema.schemata
58
- WHERE schema_name NOT IN ('information_schema', 'pg_catalog', 'pg_toast')
59
- AND schema_name NOT LIKE 'pg_%'
60
- `);
61
- return result.rows.map((row) => row.schema_name);
62
- }
63
- async fixEnumValuesForSchema(schema) {
64
- this.logger.log(`Processing enum fields for schema: ${schema}`);
65
- try {
66
- const enumColumnsQuery = `
67
- SELECT
68
- c.table_name,
69
- c.column_name,
70
- c.udt_name
71
- FROM
72
- information_schema.columns c
73
- WHERE
74
- c.table_schema = $1
75
- AND c.data_type = 'USER-DEFINED'
76
- AND c.udt_name LIKE 'enum_%'
77
- `;
78
- const enumColumnsResult = await this.pool.query(enumColumnsQuery, [
79
- schema,
80
- ]);
81
- if (enumColumnsResult.rows.length === 0) {
82
- this.logger.log(`No enum fields found in schema: ${schema}`);
83
- return;
84
- }
85
- this.logger.log(`Found ${enumColumnsResult.rows.length} enum fields in schema: ${schema}`);
86
- for (const row of enumColumnsResult.rows) {
87
- const tableName = row.table_name;
88
- const columnName = row.column_name;
89
- const enumTypeName = row.udt_name;
90
- await this.fixEnumColumn(schema, tableName, columnName, enumTypeName);
91
- }
92
- this.logger.log(`Completed processing enum fields for schema: ${schema}`);
93
- }
94
- catch (error) {
95
- this.logger.error(`Error processing enum fields for schema ${schema}: ${error.message}`, error.stack);
96
- }
97
- }
98
- async fixEnumColumn(schema, tableName, columnName, enumTypeName) {
99
- this.logger.log(`Fixing enum column ${columnName} (${enumTypeName}) in table ${schema}.${tableName}`);
100
- try {
101
- let validEnumValues;
102
- if (this.enumValuesCache[enumTypeName]) {
103
- validEnumValues = this.enumValuesCache[enumTypeName];
104
- }
105
- else {
106
- validEnumValues = await this.getEnumValues(enumTypeName);
107
- this.enumValuesCache[enumTypeName] = validEnumValues;
108
- }
109
- if (validEnumValues.length === 0) {
110
- this.logger.warn(`No enum values found for type ${enumTypeName}. Skipping.`);
111
- return;
112
- }
113
- this.logger.log(`Valid values for ${enumTypeName}: ${validEnumValues.join(", ")}`);
114
- const currentValuesQuery = `
115
- SELECT DISTINCT "${columnName}"
116
- FROM "${schema}"."${tableName}"
117
- WHERE "${columnName}" IS NOT NULL
118
- `;
119
- const currentValuesResult = await this.pool.query(currentValuesQuery);
120
- const currentValues = currentValuesResult.rows.map((r) => r[columnName]);
121
- const invalidValues = currentValues.filter((val) => !validEnumValues.includes(val));
122
- if (invalidValues.length === 0) {
123
- this.logger.log(`No invalid values found for enum column ${columnName} in table ${schema}.${tableName}`);
124
- return;
125
- }
126
- this.logger.log(`Found ${invalidValues.length} invalid values for enum ${enumTypeName} in ${schema}.${tableName}: ${invalidValues.join(", ")}`);
127
- for (const invalidValue of invalidValues) {
128
- const mappingKey = `${enumTypeName}:${invalidValue}`;
129
- let mappedValue = null;
130
- if (this.mappingsCache[mappingKey]) {
131
- mappedValue = this.mappingsCache[mappingKey];
132
- this.logger.log(`Using cached mapping for ${invalidValue} -> ${mappedValue}`);
133
- }
134
- else {
135
- const matchingValidValue = validEnumValues.find((v) => v.toLowerCase() === invalidValue.toLowerCase());
136
- if (matchingValidValue) {
137
- mappedValue = matchingValidValue;
138
- this.logger.log(`Found case-insensitive match for ${invalidValue} -> ${mappedValue}`);
139
- }
140
- else {
141
- const similarValues = validEnumValues.filter((v) => v.toLowerCase().includes(invalidValue.toLowerCase()) ||
142
- invalidValue.toLowerCase().includes(v.toLowerCase()));
143
- if (similarValues.length === 1) {
144
- mappedValue = similarValues[0];
145
- this.logger.log(`Found partial match for ${invalidValue} -> ${mappedValue}`);
146
- }
147
- else if (similarValues.length > 1) {
148
- mappedValue = similarValues.reduce((prev, curr) => Math.abs(curr.length - invalidValue.length) <
149
- Math.abs(prev.length - invalidValue.length)
150
- ? curr
151
- : prev);
152
- this.logger.log(`Found multiple partial matches for ${invalidValue}, using closest: ${mappedValue}`);
153
- }
154
- else {
155
- mappedValue = null;
156
- this.logger.log(`No match found for ${invalidValue}, will set to NULL`);
157
- }
158
- }
159
- this.mappingsCache[mappingKey] = mappedValue;
160
- if (this.saveMapping) {
161
- this.saveMappings();
162
- }
163
- }
164
- const updateQuery = mappedValue !== null
165
- ? `
166
- UPDATE "${schema}"."${tableName}"
167
- SET "${columnName}" = CAST($1 AS "${enumTypeName}")
168
- WHERE "${columnName}" = $2
169
- `
170
- : `
171
- UPDATE "${schema}"."${tableName}"
172
- SET "${columnName}" = NULL
173
- WHERE "${columnName}" = $1
174
- `;
175
- const updateParams = mappedValue !== null ? [mappedValue, invalidValue] : [invalidValue];
176
- const updateResult = await this.pool.query(updateQuery, updateParams);
177
- this.logger.log(`Updated ${updateResult.rowCount} rows in ${schema}.${tableName} with ${invalidValue} -> ${mappedValue || "NULL"} with explicit CAST`);
178
- }
179
- }
180
- catch (error) {
181
- this.logger.error(`Error fixing enum column ${columnName} in table ${schema}.${tableName}: ${error.message}`, error.stack);
182
- }
183
- }
184
- async getEnumValues(enumTypeName) {
185
- try {
186
- const enumQuery = `
187
- SELECT e.enumlabel
188
- FROM pg_enum e
189
- JOIN pg_type t ON e.enumtypid = t.oid
190
- WHERE t.typname = $1
191
- ORDER BY e.enumsortorder
192
- `;
193
- const result = await this.pool.query(enumQuery, [enumTypeName]);
194
- return result.rows.map((row) => row.enumlabel);
195
- }
196
- catch (error) {
197
- this.logger.error(`Error getting enum values for ${enumTypeName}: ${error.message}`);
198
- return [];
199
- }
200
- }
201
- saveMappings() {
202
- try {
203
- fs.writeFileSync(this.mappingsFilePath, JSON.stringify(this.mappingsCache, null, 2), "utf8");
204
- }
205
- catch (error) {
206
- this.logger.error(`Error saving enum mappings: ${error.message}`);
207
- }
208
- }
209
- async cleanup() {
210
- this.logger.log("Cleaning up database connections");
211
- await this.pool.end();
212
- }
213
- }
214
- exports.EnumFixer = EnumFixer;
215
- if (require.main === module) {
216
- const run = async () => {
217
- try {
218
- const databaseUrl = process.argv[2] || process.env.DATABASE_URL;
219
- if (!databaseUrl) {
220
- console.error("Error: No database URL provided. Please provide a database URL as an argument or set DATABASE_URL environment variable.");
221
- process.exit(1);
222
- }
223
- const enumFixer = new EnumFixer(databaseUrl);
224
- await enumFixer.fixEnumValues();
225
- process.exit(0);
226
- }
227
- catch (error) {
228
- console.error("Error:", error.message);
229
- process.exit(1);
230
- }
231
- };
232
- run();
233
- }
234
- //# sourceMappingURL=fix-enum-values.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"fix-enum-values.js","sourceRoot":"","sources":["../../src/scripts/fix-enum-values.ts"],"names":[],"mappings":"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"}
@@ -1,21 +0,0 @@
1
- export declare class SchemaDiscrepancyFixer {
2
- private readonly sourceUrl;
3
- private readonly targetUrl;
4
- private readonly reportPath?;
5
- private readonly logger;
6
- private readonly sourcePool;
7
- private readonly targetPool;
8
- private readonly columnTypeCache;
9
- constructor(sourceUrl?: string, targetUrl?: string, reportPath?: string);
10
- fixDiscrepancies(): Promise<void>;
11
- private findLatestReport;
12
- private groupByTable;
13
- private fixTableColumns;
14
- private getTargetSchemas;
15
- private cacheSourceColumnTypes;
16
- private checkTableExists;
17
- private checkColumnExists;
18
- private addColumn;
19
- private addUniqueConstraint;
20
- private cleanup;
21
- }