@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.
- package/.github/CODEOWNERS +1 -1
- package/README.md +269 -269
- package/migration-config.json +63 -63
- package/migration-config.json.bk +95 -95
- package/migrations/add_reserved_amount.sql +7 -7
- package/package.json +44 -44
- package/prisma/migrations/add_uuid_to_transactions.sql +13 -13
- package/prisma/schema.prisma +609 -607
- package/src/index.ts +23 -23
- package/src/prisma-factory.service.ts +40 -40
- package/src/prisma.module.ts +9 -9
- package/src/prisma.service.ts +16 -16
- package/src/scripts/add-uuid-to-table.ts +138 -138
- package/src/scripts/create-tenant-schemas.ts +145 -145
- package/src/scripts/data-migration/batch-migrator.ts +248 -248
- package/src/scripts/data-migration/data-transformer.ts +426 -426
- package/src/scripts/data-migration/db-connector.ts +120 -120
- package/src/scripts/data-migration/dependency-resolver.ts +174 -174
- package/src/scripts/data-migration/entity-discovery.ts +196 -196
- package/src/scripts/data-migration/foreign-key-manager.ts +277 -277
- package/src/scripts/data-migration/migration-config.json +63 -63
- package/src/scripts/data-migration/migration-tool.ts +509 -509
- package/src/scripts/data-migration/schema-utils.ts +248 -248
- package/src/scripts/data-migration/tenant-migrator.ts +201 -201
- package/src/scripts/data-migration/typecast-manager.ts +193 -193
- package/src/scripts/data-migration/types.ts +113 -113
- package/src/scripts/database-initializer.ts +49 -49
- package/src/scripts/drop-database.ts +104 -104
- package/src/scripts/dump-source-db.sh +61 -61
- package/src/scripts/encrypt-user-passwords.ts +36 -36
- package/src/scripts/error-handler.ts +117 -117
- package/src/scripts/fix-data-types.ts +241 -241
- package/src/scripts/fix-enum-values.ts +357 -357
- package/src/scripts/fix-schema-discrepancies.ts +317 -317
- package/src/scripts/fix-table-indexes.ts +601 -601
- package/src/scripts/migrate-schema-structure.ts +90 -90
- package/src/scripts/migrate-uuid.ts +76 -76
- package/src/scripts/post-migration-validator.ts +526 -526
- package/src/scripts/pre-migration-validator.ts +610 -610
- package/src/scripts/reset-database.ts +263 -263
- package/src/scripts/retry-failed-migrations.ts +416 -416
- package/src/scripts/run-migration.ts +707 -707
- package/src/scripts/schema-sync.ts +128 -128
- package/src/scripts/sequence-sync-cli.ts +416 -416
- package/src/scripts/sequence-synchronizer.ts +127 -127
- package/src/scripts/sync-enum-types.ts +170 -170
- package/src/scripts/sync-enum-values.ts +563 -563
- package/src/scripts/truncate-database.ts +123 -123
- package/src/scripts/verify-migration-setup.ts +135 -135
- package/tsconfig.json +17 -17
- package/dist/index.d.ts +0 -7
- package/dist/index.js +0 -34
- package/dist/index.js.map +0 -1
- package/dist/prisma-factory.service.d.ts +0 -9
- package/dist/prisma-factory.service.js +0 -47
- package/dist/prisma-factory.service.js.map +0 -1
- package/dist/prisma.module.d.ts +0 -2
- package/dist/prisma.module.js +0 -23
- package/dist/prisma.module.js.map +0 -1
- package/dist/prisma.service.d.ts +0 -6
- package/dist/prisma.service.js +0 -27
- package/dist/prisma.service.js.map +0 -1
- package/dist/scripts/add-uuid-to-table.d.ts +0 -8
- package/dist/scripts/add-uuid-to-table.js +0 -98
- package/dist/scripts/add-uuid-to-table.js.map +0 -1
- package/dist/scripts/create-tenant-schemas.d.ts +0 -1
- package/dist/scripts/create-tenant-schemas.js +0 -117
- package/dist/scripts/create-tenant-schemas.js.map +0 -1
- package/dist/scripts/data-migration/batch-migrator.d.ts +0 -20
- package/dist/scripts/data-migration/batch-migrator.js +0 -134
- package/dist/scripts/data-migration/batch-migrator.js.map +0 -1
- package/dist/scripts/data-migration/data-transformer.d.ts +0 -26
- package/dist/scripts/data-migration/data-transformer.js +0 -278
- package/dist/scripts/data-migration/data-transformer.js.map +0 -1
- package/dist/scripts/data-migration/db-connector.d.ts +0 -12
- package/dist/scripts/data-migration/db-connector.js +0 -94
- package/dist/scripts/data-migration/db-connector.js.map +0 -1
- package/dist/scripts/data-migration/dependency-resolver.d.ts +0 -18
- package/dist/scripts/data-migration/dependency-resolver.js +0 -132
- package/dist/scripts/data-migration/dependency-resolver.js.map +0 -1
- package/dist/scripts/data-migration/entity-discovery.d.ts +0 -11
- package/dist/scripts/data-migration/entity-discovery.js +0 -152
- package/dist/scripts/data-migration/entity-discovery.js.map +0 -1
- package/dist/scripts/data-migration/foreign-key-manager.d.ts +0 -18
- package/dist/scripts/data-migration/foreign-key-manager.js +0 -160
- package/dist/scripts/data-migration/foreign-key-manager.js.map +0 -1
- package/dist/scripts/data-migration/migration-tool.d.ts +0 -48
- package/dist/scripts/data-migration/migration-tool.js +0 -290
- package/dist/scripts/data-migration/migration-tool.js.map +0 -1
- package/dist/scripts/data-migration/schema-utils.d.ts +0 -18
- package/dist/scripts/data-migration/schema-utils.js +0 -207
- package/dist/scripts/data-migration/schema-utils.js.map +0 -1
- package/dist/scripts/data-migration/tenant-migrator.d.ts +0 -15
- package/dist/scripts/data-migration/tenant-migrator.js +0 -117
- package/dist/scripts/data-migration/tenant-migrator.js.map +0 -1
- package/dist/scripts/data-migration/typecast-manager.d.ts +0 -9
- package/dist/scripts/data-migration/typecast-manager.js +0 -179
- package/dist/scripts/data-migration/typecast-manager.js.map +0 -1
- package/dist/scripts/data-migration/types.d.ts +0 -100
- package/dist/scripts/data-migration/types.js +0 -3
- package/dist/scripts/data-migration/types.js.map +0 -1
- package/dist/scripts/database-initializer.d.ts +0 -5
- package/dist/scripts/database-initializer.js +0 -45
- package/dist/scripts/database-initializer.js.map +0 -1
- package/dist/scripts/drop-database.d.ts +0 -10
- package/dist/scripts/drop-database.js +0 -81
- package/dist/scripts/drop-database.js.map +0 -1
- package/dist/scripts/encrypt-user-passwords.d.ts +0 -1
- package/dist/scripts/encrypt-user-passwords.js +0 -33
- package/dist/scripts/encrypt-user-passwords.js.map +0 -1
- package/dist/scripts/error-handler.d.ts +0 -12
- package/dist/scripts/error-handler.js +0 -82
- package/dist/scripts/error-handler.js.map +0 -1
- package/dist/scripts/fix-data-types.d.ts +0 -10
- package/dist/scripts/fix-data-types.js +0 -185
- package/dist/scripts/fix-data-types.js.map +0 -1
- package/dist/scripts/fix-enum-values.d.ts +0 -17
- package/dist/scripts/fix-enum-values.js +0 -234
- package/dist/scripts/fix-enum-values.js.map +0 -1
- package/dist/scripts/fix-schema-discrepancies.d.ts +0 -21
- package/dist/scripts/fix-schema-discrepancies.js +0 -240
- package/dist/scripts/fix-schema-discrepancies.js.map +0 -1
- package/dist/scripts/fix-table-indexes.d.ts +0 -26
- package/dist/scripts/fix-table-indexes.js +0 -460
- package/dist/scripts/fix-table-indexes.js.map +0 -1
- package/dist/scripts/migrate-schema-structure.d.ts +0 -1
- package/dist/scripts/migrate-schema-structure.js +0 -76
- package/dist/scripts/migrate-schema-structure.js.map +0 -1
- package/dist/scripts/migrate-uuid.d.ts +0 -2
- package/dist/scripts/migrate-uuid.js +0 -57
- package/dist/scripts/migrate-uuid.js.map +0 -1
- package/dist/scripts/post-migration-validator.d.ts +0 -34
- package/dist/scripts/post-migration-validator.js +0 -363
- package/dist/scripts/post-migration-validator.js.map +0 -1
- package/dist/scripts/pre-migration-validator.d.ts +0 -25
- package/dist/scripts/pre-migration-validator.js +0 -491
- package/dist/scripts/pre-migration-validator.js.map +0 -1
- package/dist/scripts/reset-database.d.ts +0 -17
- package/dist/scripts/reset-database.js +0 -202
- package/dist/scripts/reset-database.js.map +0 -1
- package/dist/scripts/retry-failed-migrations.d.ts +0 -14
- package/dist/scripts/retry-failed-migrations.js +0 -301
- package/dist/scripts/retry-failed-migrations.js.map +0 -1
- package/dist/scripts/run-migration.d.ts +0 -1
- package/dist/scripts/run-migration.js +0 -512
- package/dist/scripts/run-migration.js.map +0 -1
- package/dist/scripts/schema-sync.d.ts +0 -1
- package/dist/scripts/schema-sync.js +0 -85
- package/dist/scripts/schema-sync.js.map +0 -1
- package/dist/scripts/sequence-sync-cli.d.ts +0 -2
- package/dist/scripts/sequence-sync-cli.js +0 -287
- package/dist/scripts/sequence-sync-cli.js.map +0 -1
- package/dist/scripts/sequence-synchronizer.d.ts +0 -8
- package/dist/scripts/sequence-synchronizer.js +0 -88
- package/dist/scripts/sequence-synchronizer.js.map +0 -1
- package/dist/scripts/sync-enum-types.d.ts +0 -13
- package/dist/scripts/sync-enum-types.js +0 -139
- package/dist/scripts/sync-enum-types.js.map +0 -1
- package/dist/scripts/sync-enum-values.d.ts +0 -20
- package/dist/scripts/sync-enum-values.js +0 -336
- package/dist/scripts/sync-enum-values.js.map +0 -1
- package/dist/scripts/truncate-database.d.ts +0 -10
- package/dist/scripts/truncate-database.js +0 -100
- package/dist/scripts/truncate-database.js.map +0 -1
- package/dist/scripts/verify-migration-setup.d.ts +0 -11
- package/dist/scripts/verify-migration-setup.js +0 -120
- package/dist/scripts/verify-migration-setup.js.map +0 -1
- package/dist/tsconfig.tsbuildinfo +0 -1
- package/prisma/migrations/add_athena_match_fields.sql +0 -18
- 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
|
-
}
|