@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.
- package/README.md +220 -0
- package/dist/index.d.ts +7 -0
- package/dist/index.js +34 -0
- package/dist/index.js.map +1 -0
- package/dist/prisma-factory.service.d.ts +9 -0
- package/dist/prisma-factory.service.js +47 -0
- package/dist/prisma-factory.service.js.map +1 -0
- package/dist/prisma.module.d.ts +2 -0
- package/dist/prisma.module.js +23 -0
- package/dist/prisma.module.js.map +1 -0
- package/dist/prisma.service.d.ts +6 -0
- package/dist/prisma.service.js +27 -0
- package/dist/prisma.service.js.map +1 -0
- package/dist/scripts/create-tenant-schemas.d.ts +1 -0
- package/dist/scripts/create-tenant-schemas.js +117 -0
- package/dist/scripts/create-tenant-schemas.js.map +1 -0
- package/dist/scripts/data-migration/batch-migrator.d.ts +25 -0
- package/dist/scripts/data-migration/batch-migrator.js +333 -0
- package/dist/scripts/data-migration/batch-migrator.js.map +1 -0
- package/dist/scripts/data-migration/data-transformer.d.ts +17 -0
- package/dist/scripts/data-migration/data-transformer.js +242 -0
- package/dist/scripts/data-migration/data-transformer.js.map +1 -0
- package/dist/scripts/data-migration/db-connector.d.ts +7 -0
- package/dist/scripts/data-migration/db-connector.js +58 -0
- package/dist/scripts/data-migration/db-connector.js.map +1 -0
- package/dist/scripts/data-migration/dependency-manager.d.ts +9 -0
- package/dist/scripts/data-migration/dependency-manager.js +86 -0
- package/dist/scripts/data-migration/dependency-manager.js.map +1 -0
- package/dist/scripts/data-migration/dependency-resolver.d.ts +18 -0
- package/dist/scripts/data-migration/dependency-resolver.js +251 -0
- package/dist/scripts/data-migration/dependency-resolver.js.map +1 -0
- package/dist/scripts/data-migration/entity-discovery.d.ts +11 -0
- package/dist/scripts/data-migration/entity-discovery.js +152 -0
- package/dist/scripts/data-migration/entity-discovery.js.map +1 -0
- package/dist/scripts/data-migration/foreign-key-manager.d.ts +17 -0
- package/dist/scripts/data-migration/foreign-key-manager.js +70 -0
- package/dist/scripts/data-migration/foreign-key-manager.js.map +1 -0
- package/dist/scripts/data-migration/migration-phases.d.ts +5 -0
- package/dist/scripts/data-migration/migration-phases.js +55 -0
- package/dist/scripts/data-migration/migration-phases.js.map +1 -0
- package/dist/scripts/data-migration/migration-tool.d.ts +29 -0
- package/dist/scripts/data-migration/migration-tool.js +250 -0
- package/dist/scripts/data-migration/migration-tool.js.map +1 -0
- package/dist/scripts/data-migration/phase-generator.d.ts +15 -0
- package/dist/scripts/data-migration/phase-generator.js +187 -0
- package/dist/scripts/data-migration/phase-generator.js.map +1 -0
- package/dist/scripts/data-migration/schema-utils.d.ts +18 -0
- package/dist/scripts/data-migration/schema-utils.js +164 -0
- package/dist/scripts/data-migration/schema-utils.js.map +1 -0
- package/dist/scripts/data-migration/tenant-migrator.d.ts +15 -0
- package/dist/scripts/data-migration/tenant-migrator.js +110 -0
- package/dist/scripts/data-migration/tenant-migrator.js.map +1 -0
- package/dist/scripts/data-migration/typecast-manager.d.ts +5 -0
- package/dist/scripts/data-migration/typecast-manager.js +35 -0
- package/dist/scripts/data-migration/typecast-manager.js.map +1 -0
- package/dist/scripts/data-migration/types.d.ts +34 -0
- package/dist/scripts/data-migration/types.js +3 -0
- package/dist/scripts/data-migration/types.js.map +1 -0
- package/dist/scripts/data-migration.d.ts +22 -0
- package/dist/scripts/data-migration.js +593 -0
- package/dist/scripts/data-migration.js.map +1 -0
- package/dist/scripts/drop-database.d.ts +10 -0
- package/dist/scripts/drop-database.js +81 -0
- package/dist/scripts/drop-database.js.map +1 -0
- package/dist/scripts/error-handler.d.ts +12 -0
- package/dist/scripts/error-handler.js +82 -0
- package/dist/scripts/error-handler.js.map +1 -0
- package/dist/scripts/fix-data-types.d.ts +10 -0
- package/dist/scripts/fix-data-types.js +185 -0
- package/dist/scripts/fix-data-types.js.map +1 -0
- package/dist/scripts/fix-enum-values.d.ts +17 -0
- package/dist/scripts/fix-enum-values.js +234 -0
- package/dist/scripts/fix-enum-values.js.map +1 -0
- package/dist/scripts/fix-schema-discrepancies.d.ts +21 -0
- package/dist/scripts/fix-schema-discrepancies.js +240 -0
- package/dist/scripts/fix-schema-discrepancies.js.map +1 -0
- package/dist/scripts/migrate-schema-structure.d.ts +1 -0
- package/dist/scripts/migrate-schema-structure.js +76 -0
- package/dist/scripts/migrate-schema-structure.js.map +1 -0
- package/dist/scripts/post-migration-validator.d.ts +21 -0
- package/dist/scripts/post-migration-validator.js +341 -0
- package/dist/scripts/post-migration-validator.js.map +1 -0
- package/dist/scripts/pre-migration-validator.d.ts +25 -0
- package/dist/scripts/pre-migration-validator.js +491 -0
- package/dist/scripts/pre-migration-validator.js.map +1 -0
- package/dist/scripts/reset-database.d.ts +17 -0
- package/dist/scripts/reset-database.js +202 -0
- package/dist/scripts/reset-database.js.map +1 -0
- package/dist/scripts/retry-failed-migrations.d.ts +14 -0
- package/dist/scripts/retry-failed-migrations.js +301 -0
- package/dist/scripts/retry-failed-migrations.js.map +1 -0
- package/dist/scripts/run-migration.d.ts +1 -0
- package/dist/scripts/run-migration.js +525 -0
- package/dist/scripts/run-migration.js.map +1 -0
- package/dist/scripts/schema-sync.d.ts +1 -0
- package/dist/scripts/schema-sync.js +85 -0
- package/dist/scripts/schema-sync.js.map +1 -0
- package/dist/scripts/sync-enum-types.d.ts +13 -0
- package/dist/scripts/sync-enum-types.js +139 -0
- package/dist/scripts/sync-enum-types.js.map +1 -0
- package/dist/scripts/sync-enum-values.d.ts +20 -0
- package/dist/scripts/sync-enum-values.js +336 -0
- package/dist/scripts/sync-enum-values.js.map +1 -0
- package/dist/scripts/truncate-database.d.ts +10 -0
- package/dist/scripts/truncate-database.js +100 -0
- package/dist/scripts/truncate-database.js.map +1 -0
- package/dist/scripts/verify-migration-setup.d.ts +11 -0
- package/dist/scripts/verify-migration-setup.js +120 -0
- package/dist/scripts/verify-migration-setup.js.map +1 -0
- package/dist/tsconfig.tsbuildinfo +1 -0
- package/migration-config-public.json +95 -0
- package/migration-config.json +95 -0
- package/package.json +33 -0
- package/prisma/migrations/migration_lock.toml +3 -0
- package/prisma/schema.prisma +360 -0
- package/src/index.ts +23 -0
- package/src/prisma-factory.service.ts +41 -0
- package/src/prisma.module.ts +10 -0
- package/src/prisma.service.ts +17 -0
- package/src/scripts/create-tenant-schemas.ts +146 -0
- package/src/scripts/data-migration/batch-migrator.ts +569 -0
- package/src/scripts/data-migration/data-transformer.ts +377 -0
- package/src/scripts/data-migration/db-connector.ts +67 -0
- package/src/scripts/data-migration/dependency-resolver.ts +319 -0
- package/src/scripts/data-migration/entity-discovery.ts +197 -0
- package/src/scripts/data-migration/foreign-key-manager.ts +95 -0
- package/src/scripts/data-migration/migration-tool.ts +357 -0
- package/src/scripts/data-migration/schema-utils.ts +186 -0
- package/src/scripts/data-migration/tenant-migrator.ts +194 -0
- package/src/scripts/data-migration/typecast-manager.ts +38 -0
- package/src/scripts/data-migration/types.ts +40 -0
- package/src/scripts/drop-database.ts +105 -0
- package/src/scripts/dump-source-db.sh +62 -0
- package/src/scripts/dumps/source_dump_20250413_112626.sql +1527 -0
- package/src/scripts/error-handler.ts +118 -0
- package/src/scripts/fix-data-types.ts +242 -0
- package/src/scripts/fix-enum-values.ts +357 -0
- package/src/scripts/fix-schema-discrepancies.ts +318 -0
- package/src/scripts/migrate-schema-structure.ts +90 -0
- package/src/scripts/post-migration-validator.ts +427 -0
- package/src/scripts/pre-migration-validator.ts +611 -0
- package/src/scripts/reset-database.ts +264 -0
- package/src/scripts/retry-failed-migrations.ts +416 -0
- package/src/scripts/run-migration.ts +691 -0
- package/src/scripts/schema-sync.ts +129 -0
- package/src/scripts/sync-enum-types.ts +171 -0
- package/src/scripts/sync-enum-values.ts +563 -0
- package/src/scripts/truncate-database.ts +124 -0
- package/src/scripts/verify-migration-setup.ts +136 -0
- package/tsconfig.json +18 -0
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export declare class EnumSynchronizer {
|
|
2
|
+
private readonly sourceUrl;
|
|
3
|
+
private readonly targetUrl;
|
|
4
|
+
private readonly logger;
|
|
5
|
+
private readonly sourcePool;
|
|
6
|
+
private readonly targetPool;
|
|
7
|
+
constructor(sourceUrl?: string, targetUrl?: string);
|
|
8
|
+
synchronizeEnums(): Promise<void>;
|
|
9
|
+
private synchronizeEnumType;
|
|
10
|
+
private createEnumType;
|
|
11
|
+
private updateEnumValues;
|
|
12
|
+
private cleanup;
|
|
13
|
+
}
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.EnumSynchronizer = void 0;
|
|
4
|
+
const pg = require("pg");
|
|
5
|
+
const dotenv = require("dotenv");
|
|
6
|
+
const common_1 = require("@nestjs/common");
|
|
7
|
+
dotenv.config();
|
|
8
|
+
class EnumSynchronizer {
|
|
9
|
+
constructor(sourceUrl = process.env.SOURCE_DATABASE_URL, targetUrl = process.env.DATABASE_URL) {
|
|
10
|
+
this.sourceUrl = sourceUrl;
|
|
11
|
+
this.targetUrl = targetUrl;
|
|
12
|
+
this.logger = new common_1.Logger('EnumSynchronizer');
|
|
13
|
+
this.sourcePool = new pg.Pool({
|
|
14
|
+
connectionString: this.sourceUrl,
|
|
15
|
+
});
|
|
16
|
+
this.targetPool = new pg.Pool({
|
|
17
|
+
connectionString: this.targetUrl,
|
|
18
|
+
});
|
|
19
|
+
}
|
|
20
|
+
async synchronizeEnums() {
|
|
21
|
+
try {
|
|
22
|
+
this.logger.log('Starting enum synchronization');
|
|
23
|
+
const sourceEnumsResult = await this.sourcePool.query(`
|
|
24
|
+
SELECT t.typname AS enum_name
|
|
25
|
+
FROM pg_type t
|
|
26
|
+
JOIN pg_catalog.pg_namespace n ON n.oid = t.typnamespace
|
|
27
|
+
WHERE t.typtype = 'e'
|
|
28
|
+
AND n.nspname = 'public'
|
|
29
|
+
`);
|
|
30
|
+
this.logger.log(`Found ${sourceEnumsResult.rows.length} enum types in source database`);
|
|
31
|
+
for (const enumRow of sourceEnumsResult.rows) {
|
|
32
|
+
const enumName = enumRow.enum_name;
|
|
33
|
+
await this.synchronizeEnumType(enumName);
|
|
34
|
+
}
|
|
35
|
+
this.logger.log('Enum synchronization completed successfully');
|
|
36
|
+
}
|
|
37
|
+
catch (error) {
|
|
38
|
+
this.logger.error(`Error during enum synchronization: ${error.message}`, error.stack);
|
|
39
|
+
}
|
|
40
|
+
finally {
|
|
41
|
+
await this.cleanup();
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
async synchronizeEnumType(enumName) {
|
|
45
|
+
this.logger.log(`Synchronizing enum type: ${enumName}`);
|
|
46
|
+
try {
|
|
47
|
+
const sourceEnumValuesResult = await this.sourcePool.query(`
|
|
48
|
+
SELECT e.enumlabel
|
|
49
|
+
FROM pg_enum e
|
|
50
|
+
JOIN pg_type t ON e.enumtypid = t.oid
|
|
51
|
+
WHERE t.typname = $1
|
|
52
|
+
ORDER BY e.enumsortorder
|
|
53
|
+
`, [enumName]);
|
|
54
|
+
const sourceEnumValues = sourceEnumValuesResult.rows.map(row => row.enumlabel);
|
|
55
|
+
this.logger.log(`Source enum ${enumName} has values: ${sourceEnumValues.join(', ')}`);
|
|
56
|
+
const targetEnumExistsResult = await this.targetPool.query(`
|
|
57
|
+
SELECT 1
|
|
58
|
+
FROM pg_type t
|
|
59
|
+
JOIN pg_catalog.pg_namespace n ON n.oid = t.typnamespace
|
|
60
|
+
WHERE t.typtype = 'e'
|
|
61
|
+
AND t.typname = $1
|
|
62
|
+
AND n.nspname = 'public'
|
|
63
|
+
LIMIT 1
|
|
64
|
+
`, [enumName]);
|
|
65
|
+
if (targetEnumExistsResult.rows.length === 0) {
|
|
66
|
+
await this.createEnumType(enumName, sourceEnumValues);
|
|
67
|
+
}
|
|
68
|
+
else {
|
|
69
|
+
await this.updateEnumValues(enumName, sourceEnumValues);
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
catch (error) {
|
|
73
|
+
this.logger.error(`Error synchronizing enum type ${enumName}: ${error.message}`);
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
async createEnumType(enumName, values) {
|
|
77
|
+
this.logger.log(`Creating enum type ${enumName} in target database`);
|
|
78
|
+
try {
|
|
79
|
+
const escapedValues = values.map(value => `'${value.replace(/'/g, "''")}'`).join(', ');
|
|
80
|
+
await this.targetPool.query(`
|
|
81
|
+
CREATE TYPE ${enumName} AS ENUM (${escapedValues})
|
|
82
|
+
`);
|
|
83
|
+
this.logger.log(`Successfully created enum type ${enumName} with values: ${values.join(', ')}`);
|
|
84
|
+
}
|
|
85
|
+
catch (error) {
|
|
86
|
+
this.logger.error(`Error creating enum type ${enumName}: ${error.message}`);
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
async updateEnumValues(enumName, sourceValues) {
|
|
90
|
+
this.logger.log(`Updating enum type ${enumName} in target database`);
|
|
91
|
+
try {
|
|
92
|
+
const targetEnumValuesResult = await this.targetPool.query(`
|
|
93
|
+
SELECT e.enumlabel
|
|
94
|
+
FROM pg_enum e
|
|
95
|
+
JOIN pg_type t ON e.enumtypid = t.oid
|
|
96
|
+
WHERE t.typname = $1
|
|
97
|
+
ORDER BY e.enumsortorder
|
|
98
|
+
`, [enumName]);
|
|
99
|
+
const targetEnumValues = targetEnumValuesResult.rows.map(row => row.enumlabel);
|
|
100
|
+
this.logger.log(`Target enum ${enumName} has values: ${targetEnumValues.join(', ')}`);
|
|
101
|
+
const missingValues = sourceValues.filter(value => !targetEnumValues.includes(value));
|
|
102
|
+
if (missingValues.length === 0) {
|
|
103
|
+
this.logger.log(`Enum type ${enumName} is already up to date`);
|
|
104
|
+
return;
|
|
105
|
+
}
|
|
106
|
+
this.logger.log(`Adding ${missingValues.length} new values to enum ${enumName}: ${missingValues.join(', ')}`);
|
|
107
|
+
for (const value of missingValues) {
|
|
108
|
+
await this.targetPool.query(`
|
|
109
|
+
ALTER TYPE ${enumName} ADD VALUE '${value.replace(/'/g, "''")}'
|
|
110
|
+
`);
|
|
111
|
+
}
|
|
112
|
+
this.logger.log(`Successfully updated enum type ${enumName}`);
|
|
113
|
+
}
|
|
114
|
+
catch (error) {
|
|
115
|
+
this.logger.error(`Error updating enum type ${enumName}: ${error.message}`);
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
async cleanup() {
|
|
119
|
+
this.logger.log('Cleaning up database connections');
|
|
120
|
+
await this.sourcePool.end();
|
|
121
|
+
await this.targetPool.end();
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
exports.EnumSynchronizer = EnumSynchronizer;
|
|
125
|
+
if (require.main === module) {
|
|
126
|
+
const run = async () => {
|
|
127
|
+
try {
|
|
128
|
+
const synchronizer = new EnumSynchronizer();
|
|
129
|
+
await synchronizer.synchronizeEnums();
|
|
130
|
+
process.exit(0);
|
|
131
|
+
}
|
|
132
|
+
catch (error) {
|
|
133
|
+
console.error('Error:', error.message);
|
|
134
|
+
process.exit(1);
|
|
135
|
+
}
|
|
136
|
+
};
|
|
137
|
+
run();
|
|
138
|
+
}
|
|
139
|
+
//# sourceMappingURL=sync-enum-types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sync-enum-types.js","sourceRoot":"","sources":["../../src/scripts/sync-enum-types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
export declare class EnumValueSynchronizer {
|
|
2
|
+
private readonly sourceUrl;
|
|
3
|
+
private readonly targetUrl;
|
|
4
|
+
private readonly logger;
|
|
5
|
+
private readonly pool;
|
|
6
|
+
private readonly enumMappings;
|
|
7
|
+
private readonly valueNormalizationMap;
|
|
8
|
+
private enumValuesCache;
|
|
9
|
+
constructor(sourceUrl?: string, targetUrl?: string);
|
|
10
|
+
synchronizeEnumValues(): Promise<void>;
|
|
11
|
+
private synchronizeSpecificEnum;
|
|
12
|
+
private enumExists;
|
|
13
|
+
private getEnumValues;
|
|
14
|
+
private addValueToEnum;
|
|
15
|
+
private normalizeEnumValuesInTables;
|
|
16
|
+
private getSchemas;
|
|
17
|
+
private normalizeEnumValuesInSchema;
|
|
18
|
+
private normalizeEnumColumn;
|
|
19
|
+
private getNormalizedEnumValue;
|
|
20
|
+
}
|
|
@@ -0,0 +1,336 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.EnumValueSynchronizer = void 0;
|
|
4
|
+
const common_1 = require("@nestjs/common");
|
|
5
|
+
const pg_1 = require("pg");
|
|
6
|
+
const path = require("path");
|
|
7
|
+
const fs = require("fs");
|
|
8
|
+
const dotenv = require("dotenv");
|
|
9
|
+
dotenv.config();
|
|
10
|
+
class EnumValueSynchronizer {
|
|
11
|
+
constructor(sourceUrl = process.env.SOURCE_DATABASE_URL, targetUrl = process.env.DATABASE_URL) {
|
|
12
|
+
this.sourceUrl = sourceUrl;
|
|
13
|
+
this.targetUrl = targetUrl;
|
|
14
|
+
this.logger = new common_1.Logger("EnumValueSynchronizer");
|
|
15
|
+
this.enumMappings = {
|
|
16
|
+
enum_credit_requests_status: "enum_transaction_status",
|
|
17
|
+
enum_global_user_transactions_status: "enum_transaction_status",
|
|
18
|
+
enum_global_user_transactions_transaction_type: "enum_transaction_type",
|
|
19
|
+
enum_invoices_status: "enum_transaction_status",
|
|
20
|
+
enum_payin_status: "enum_transaction_status",
|
|
21
|
+
enum_payout_status: "enum_transaction_status",
|
|
22
|
+
enum_pending_references_status: "enum_transaction_status",
|
|
23
|
+
enum_toku_status: "enum_transaction_status",
|
|
24
|
+
enum_transaction_updates_new_status: "enum_transaction_status",
|
|
25
|
+
enum_transactions_account_type: "enum_account_type",
|
|
26
|
+
enum_transactions_status: "enum_transaction_status",
|
|
27
|
+
enum_transactions_transaction_type: "enum_transaction_type",
|
|
28
|
+
enum_transactions_typetransaction: "enum_transaction_type",
|
|
29
|
+
enum_transactions_user_type_account: "enum_account_type",
|
|
30
|
+
enum_transactions_usertypeaccount: "enum_account_type",
|
|
31
|
+
};
|
|
32
|
+
this.valueNormalizationMap = {
|
|
33
|
+
enum_transaction_status: {
|
|
34
|
+
PENDING: "PENDING",
|
|
35
|
+
pending: "PENDING",
|
|
36
|
+
COMPLETED: "COMPLETED",
|
|
37
|
+
completed: "COMPLETED",
|
|
38
|
+
FAILED: "FAILED",
|
|
39
|
+
failed: "FAILED",
|
|
40
|
+
PROCESSING: "PROCESSING",
|
|
41
|
+
processing: "PROCESSING",
|
|
42
|
+
CANCELLED: "CANCELLED",
|
|
43
|
+
cancelled: "CANCELLED",
|
|
44
|
+
canceled: "CANCELLED",
|
|
45
|
+
CANCELED: "CANCELLED",
|
|
46
|
+
REJECTED: "REJECTED",
|
|
47
|
+
rejected: "REJECTED",
|
|
48
|
+
APPROVED: "APPROVED",
|
|
49
|
+
approved: "APPROVED",
|
|
50
|
+
EXPIRED: "EXPIRED",
|
|
51
|
+
expired: "EXPIRED",
|
|
52
|
+
REFUNDED: "REFUNDED",
|
|
53
|
+
refunded: "REFUNDED",
|
|
54
|
+
PARTIAL_REFUND: "PARTIAL_REFUND",
|
|
55
|
+
partial_refund: "PARTIAL_REFUND",
|
|
56
|
+
},
|
|
57
|
+
enum_transaction_type: {
|
|
58
|
+
DEPOSIT: "DEPOSIT",
|
|
59
|
+
deposit: "DEPOSIT",
|
|
60
|
+
WITHDRAWAL: "WITHDRAWAL",
|
|
61
|
+
withdrawal: "WITHDRAWAL",
|
|
62
|
+
TRANSFER: "TRANSFER",
|
|
63
|
+
transfer: "TRANSFER",
|
|
64
|
+
PAYMENT: "PAYMENT",
|
|
65
|
+
payment: "PAYMENT",
|
|
66
|
+
REFUND: "REFUND",
|
|
67
|
+
refund: "REFUND",
|
|
68
|
+
FEE: "FEE",
|
|
69
|
+
fee: "FEE",
|
|
70
|
+
ADJUSTMENT: "ADJUSTMENT",
|
|
71
|
+
adjustment: "ADJUSTMENT",
|
|
72
|
+
},
|
|
73
|
+
enum_account_type: {
|
|
74
|
+
PERSONAL: "PERSONAL",
|
|
75
|
+
personal: "PERSONAL",
|
|
76
|
+
BUSINESS: "BUSINESS",
|
|
77
|
+
business: "BUSINESS",
|
|
78
|
+
MERCHANT: "MERCHANT",
|
|
79
|
+
merchant: "MERCHANT",
|
|
80
|
+
PLATFORM: "PLATFORM",
|
|
81
|
+
platform: "PLATFORM",
|
|
82
|
+
},
|
|
83
|
+
};
|
|
84
|
+
this.enumValuesCache = {};
|
|
85
|
+
this.pool = new pg_1.Pool({
|
|
86
|
+
connectionString: this.targetUrl,
|
|
87
|
+
});
|
|
88
|
+
}
|
|
89
|
+
async synchronizeEnumValues() {
|
|
90
|
+
try {
|
|
91
|
+
this.logger.log("Iniciando sincronización de valores de enum");
|
|
92
|
+
const logsDir = path.join(process.cwd(), "migration-logs");
|
|
93
|
+
if (!fs.existsSync(logsDir)) {
|
|
94
|
+
fs.mkdirSync(logsDir, { recursive: true });
|
|
95
|
+
}
|
|
96
|
+
const enumsResult = await this.pool.query(`
|
|
97
|
+
SELECT t.typname AS enum_name
|
|
98
|
+
FROM pg_type t
|
|
99
|
+
JOIN pg_namespace n ON t.typnamespace = n.oid
|
|
100
|
+
WHERE t.typtype = 'e' -- enum types
|
|
101
|
+
AND n.nspname = 'public'
|
|
102
|
+
ORDER BY t.typname
|
|
103
|
+
`);
|
|
104
|
+
this.logger.log(`Encontrados ${enumsResult.rows.length} tipos enum en la base de datos`);
|
|
105
|
+
for (const [specificEnum, consolidatedEnum] of Object.entries(this.enumMappings)) {
|
|
106
|
+
await this.synchronizeSpecificEnum(specificEnum, consolidatedEnum);
|
|
107
|
+
}
|
|
108
|
+
await this.normalizeEnumValuesInTables();
|
|
109
|
+
this.logger.log("Sincronización de valores de enum completada con éxito");
|
|
110
|
+
}
|
|
111
|
+
catch (error) {
|
|
112
|
+
this.logger.error(`Error durante la sincronización de valores de enum: ${error.message}`, error.stack);
|
|
113
|
+
throw error;
|
|
114
|
+
}
|
|
115
|
+
finally {
|
|
116
|
+
await this.pool.end();
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
async synchronizeSpecificEnum(specificEnum, consolidatedEnum) {
|
|
120
|
+
try {
|
|
121
|
+
this.logger.log(`Sincronizando valores entre ${specificEnum} y ${consolidatedEnum}`);
|
|
122
|
+
const specificEnumExists = await this.enumExists(specificEnum);
|
|
123
|
+
const consolidatedEnumExists = await this.enumExists(consolidatedEnum);
|
|
124
|
+
if (!specificEnumExists || !consolidatedEnumExists) {
|
|
125
|
+
this.logger.warn(`No se puede sincronizar: ${!specificEnumExists ? specificEnum : consolidatedEnum} no existe`);
|
|
126
|
+
return;
|
|
127
|
+
}
|
|
128
|
+
const specificValues = await this.getEnumValues(specificEnum);
|
|
129
|
+
const consolidatedValues = await this.getEnumValues(consolidatedEnum);
|
|
130
|
+
this.logger.log(`Valores en ${specificEnum}: ${specificValues.join(", ")}\n` +
|
|
131
|
+
`Valores en ${consolidatedEnum}: ${consolidatedValues.join(", ")}`);
|
|
132
|
+
const missingValues = specificValues.filter((value) => !consolidatedValues.includes(value));
|
|
133
|
+
if (missingValues.length === 0) {
|
|
134
|
+
this.logger.log(`No hay valores faltantes entre ${specificEnum} y ${consolidatedEnum}`);
|
|
135
|
+
return;
|
|
136
|
+
}
|
|
137
|
+
this.logger.log(`Encontrados ${missingValues.length} valores en ${specificEnum} que faltan en ${consolidatedEnum}: ${missingValues.join(", ")}`);
|
|
138
|
+
for (const value of missingValues) {
|
|
139
|
+
await this.addValueToEnum(consolidatedEnum, value);
|
|
140
|
+
}
|
|
141
|
+
this.logger.log(`Sincronización entre ${specificEnum} y ${consolidatedEnum} completada`);
|
|
142
|
+
}
|
|
143
|
+
catch (error) {
|
|
144
|
+
this.logger.error(`Error sincronizando ${specificEnum} con ${consolidatedEnum}: ${error.message}`);
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
async enumExists(enumName) {
|
|
148
|
+
const result = await this.pool.query(`
|
|
149
|
+
SELECT 1
|
|
150
|
+
FROM pg_type t
|
|
151
|
+
JOIN pg_namespace n ON t.typnamespace = n.oid
|
|
152
|
+
WHERE t.typname = $1
|
|
153
|
+
AND t.typtype = 'e' -- enum types
|
|
154
|
+
AND n.nspname = 'public'
|
|
155
|
+
`, [enumName]);
|
|
156
|
+
return result.rows.length > 0;
|
|
157
|
+
}
|
|
158
|
+
async getEnumValues(enumName) {
|
|
159
|
+
const result = await this.pool.query(`
|
|
160
|
+
SELECT e.enumlabel
|
|
161
|
+
FROM pg_enum e
|
|
162
|
+
JOIN pg_type t ON e.enumtypid = t.oid
|
|
163
|
+
JOIN pg_namespace n ON t.typnamespace = n.oid
|
|
164
|
+
WHERE t.typname = $1
|
|
165
|
+
AND n.nspname = 'public'
|
|
166
|
+
ORDER BY e.enumsortorder
|
|
167
|
+
`, [enumName]);
|
|
168
|
+
return result.rows.map((row) => row.enumlabel);
|
|
169
|
+
}
|
|
170
|
+
async addValueToEnum(enumName, value) {
|
|
171
|
+
try {
|
|
172
|
+
const escapedValue = value.replace(/'/g, "''");
|
|
173
|
+
await this.pool.query(`
|
|
174
|
+
ALTER TYPE ${enumName} ADD VALUE IF NOT EXISTS '${escapedValue}'
|
|
175
|
+
`);
|
|
176
|
+
if (this.enumValuesCache[enumName]) {
|
|
177
|
+
if (!this.enumValuesCache[enumName].includes(value)) {
|
|
178
|
+
this.enumValuesCache[enumName].push(value);
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
this.logger.log(`Valor '${value}' agregado al enum ${enumName}`);
|
|
182
|
+
}
|
|
183
|
+
catch (error) {
|
|
184
|
+
this.logger.error(`Error agregando valor '${value}' al enum ${enumName}: ${error.message}`);
|
|
185
|
+
throw error;
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
async normalizeEnumValuesInTables() {
|
|
189
|
+
this.logger.log("Iniciando normalización de valores de enum en tablas");
|
|
190
|
+
try {
|
|
191
|
+
const schemas = await this.getSchemas();
|
|
192
|
+
this.logger.log(`Encontrados ${schemas.length} schemas para procesar`);
|
|
193
|
+
for (const schema of schemas) {
|
|
194
|
+
await this.normalizeEnumValuesInSchema(schema);
|
|
195
|
+
}
|
|
196
|
+
this.logger.log("Normalización de valores de enum en tablas completada");
|
|
197
|
+
}
|
|
198
|
+
catch (error) {
|
|
199
|
+
this.logger.error(`Error durante la normalización de valores de enum: ${error.message}`, error.stack);
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
async getSchemas() {
|
|
203
|
+
const result = await this.pool.query(`
|
|
204
|
+
SELECT schema_name
|
|
205
|
+
FROM information_schema.schemata
|
|
206
|
+
WHERE schema_name NOT IN ('information_schema', 'pg_catalog', 'pg_toast')
|
|
207
|
+
AND schema_name NOT LIKE 'pg_%'
|
|
208
|
+
`);
|
|
209
|
+
return result.rows.map((row) => row.schema_name);
|
|
210
|
+
}
|
|
211
|
+
async normalizeEnumValuesInSchema(schema) {
|
|
212
|
+
this.logger.log(`Procesando valores de enum en schema: ${schema}`);
|
|
213
|
+
try {
|
|
214
|
+
const enumColumnsQuery = `
|
|
215
|
+
SELECT
|
|
216
|
+
c.table_name,
|
|
217
|
+
c.column_name,
|
|
218
|
+
c.udt_name
|
|
219
|
+
FROM
|
|
220
|
+
information_schema.columns c
|
|
221
|
+
WHERE
|
|
222
|
+
c.table_schema = $1
|
|
223
|
+
AND c.data_type = 'USER-DEFINED'
|
|
224
|
+
AND c.udt_name LIKE 'enum_%'
|
|
225
|
+
`;
|
|
226
|
+
const enumColumnsResult = await this.pool.query(enumColumnsQuery, [
|
|
227
|
+
schema,
|
|
228
|
+
]);
|
|
229
|
+
if (enumColumnsResult.rows.length === 0) {
|
|
230
|
+
this.logger.log(`No se encontraron columnas enum en schema: ${schema}`);
|
|
231
|
+
return;
|
|
232
|
+
}
|
|
233
|
+
this.logger.log(`Encontradas ${enumColumnsResult.rows.length} columnas enum en schema: ${schema}`);
|
|
234
|
+
for (const row of enumColumnsResult.rows) {
|
|
235
|
+
const tableName = row.table_name;
|
|
236
|
+
const columnName = row.column_name;
|
|
237
|
+
const enumTypeName = row.udt_name;
|
|
238
|
+
await this.normalizeEnumColumn(schema, tableName, columnName, enumTypeName);
|
|
239
|
+
}
|
|
240
|
+
this.logger.log(`Completado procesamiento de valores enum para schema: ${schema}`);
|
|
241
|
+
}
|
|
242
|
+
catch (error) {
|
|
243
|
+
this.logger.error(`Error procesando valores enum para schema ${schema}: ${error.message}`, error.stack);
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
async normalizeEnumColumn(schema, tableName, columnName, enumTypeName) {
|
|
247
|
+
this.logger.log(`Normalizando columna enum ${columnName} (${enumTypeName}) en tabla ${schema}.${tableName}`);
|
|
248
|
+
try {
|
|
249
|
+
if (!this.enumValuesCache[enumTypeName]) {
|
|
250
|
+
this.enumValuesCache[enumTypeName] = await this.getEnumValues(enumTypeName);
|
|
251
|
+
}
|
|
252
|
+
const validEnumValues = this.enumValuesCache[enumTypeName];
|
|
253
|
+
if (validEnumValues.length === 0) {
|
|
254
|
+
this.logger.warn(`No se encontraron valores para el enum ${enumTypeName}. Omitiendo.`);
|
|
255
|
+
return;
|
|
256
|
+
}
|
|
257
|
+
const currentValuesQuery = `
|
|
258
|
+
SELECT DISTINCT "${columnName}"
|
|
259
|
+
FROM "${schema}"."${tableName}"
|
|
260
|
+
WHERE "${columnName}" IS NOT NULL
|
|
261
|
+
`;
|
|
262
|
+
const currentValuesResult = await this.pool.query(currentValuesQuery);
|
|
263
|
+
const currentValues = currentValuesResult.rows.map((r) => r[columnName]);
|
|
264
|
+
const invalidValues = currentValues.filter((val) => !validEnumValues.includes(val));
|
|
265
|
+
if (invalidValues.length === 0) {
|
|
266
|
+
this.logger.log(`No se encontraron valores inválidos para columna enum ${columnName} en tabla ${schema}.${tableName}`);
|
|
267
|
+
return;
|
|
268
|
+
}
|
|
269
|
+
this.logger.log(`Encontrados ${invalidValues.length} valores inválidos para enum ${enumTypeName} en ${schema}.${tableName}: ${invalidValues.join(", ")}`);
|
|
270
|
+
for (const invalidValue of invalidValues) {
|
|
271
|
+
const normalizedValue = this.getNormalizedEnumValue(enumTypeName, invalidValue);
|
|
272
|
+
if (normalizedValue && normalizedValue !== invalidValue) {
|
|
273
|
+
const updateQuery = `
|
|
274
|
+
UPDATE "${schema}"."${tableName}"
|
|
275
|
+
SET "${columnName}" = $1
|
|
276
|
+
WHERE "${columnName}" = $2
|
|
277
|
+
`;
|
|
278
|
+
const result = await this.pool.query(updateQuery, [
|
|
279
|
+
normalizedValue,
|
|
280
|
+
invalidValue,
|
|
281
|
+
]);
|
|
282
|
+
this.logger.log(`Actualizado valor '${invalidValue}' a '${normalizedValue}' en ${result.rowCount} filas de ${schema}.${tableName}.${columnName}`);
|
|
283
|
+
if (!validEnumValues.includes(normalizedValue)) {
|
|
284
|
+
await this.addValueToEnum(enumTypeName, normalizedValue);
|
|
285
|
+
}
|
|
286
|
+
}
|
|
287
|
+
else if (!normalizedValue) {
|
|
288
|
+
const updateQuery = `
|
|
289
|
+
UPDATE "${schema}"."${tableName}"
|
|
290
|
+
SET "${columnName}" = NULL
|
|
291
|
+
WHERE "${columnName}" = $1
|
|
292
|
+
`;
|
|
293
|
+
const result = await this.pool.query(updateQuery, [invalidValue]);
|
|
294
|
+
this.logger.log(`Establecido valor '${invalidValue}' a NULL en ${result.rowCount} filas de ${schema}.${tableName}.${columnName}`);
|
|
295
|
+
}
|
|
296
|
+
}
|
|
297
|
+
}
|
|
298
|
+
catch (error) {
|
|
299
|
+
this.logger.error(`Error normalizando columna enum ${columnName} en ${schema}.${tableName}: ${error.message}`, error.stack);
|
|
300
|
+
}
|
|
301
|
+
}
|
|
302
|
+
getNormalizedEnumValue(enumTypeName, value) {
|
|
303
|
+
var _a;
|
|
304
|
+
if ((_a = this.enumValuesCache[enumTypeName]) === null || _a === void 0 ? void 0 : _a.includes(value)) {
|
|
305
|
+
return value;
|
|
306
|
+
}
|
|
307
|
+
if (this.valueNormalizationMap[enumTypeName] &&
|
|
308
|
+
this.valueNormalizationMap[enumTypeName][value]) {
|
|
309
|
+
return this.valueNormalizationMap[enumTypeName][value];
|
|
310
|
+
}
|
|
311
|
+
const normalizedInput = value.toUpperCase().replace(/\s+/g, "_");
|
|
312
|
+
if (this.valueNormalizationMap[enumTypeName] &&
|
|
313
|
+
this.valueNormalizationMap[enumTypeName][normalizedInput]) {
|
|
314
|
+
return this.valueNormalizationMap[enumTypeName][normalizedInput];
|
|
315
|
+
}
|
|
316
|
+
const validValues = this.enumValuesCache[enumTypeName] || [];
|
|
317
|
+
for (const validValue of validValues) {
|
|
318
|
+
if (validValue.toLowerCase() === value.toLowerCase()) {
|
|
319
|
+
return validValue;
|
|
320
|
+
}
|
|
321
|
+
}
|
|
322
|
+
return null;
|
|
323
|
+
}
|
|
324
|
+
}
|
|
325
|
+
exports.EnumValueSynchronizer = EnumValueSynchronizer;
|
|
326
|
+
if (require.main === module) {
|
|
327
|
+
const run = async () => {
|
|
328
|
+
const synchronizer = new EnumValueSynchronizer(process.env.SOURCE_DATABASE_URL, process.env.DATABASE_URL);
|
|
329
|
+
await synchronizer.synchronizeEnumValues();
|
|
330
|
+
};
|
|
331
|
+
run().catch((error) => {
|
|
332
|
+
console.error("Error ejecutando sincronización de valores de enum:", error);
|
|
333
|
+
process.exit(1);
|
|
334
|
+
});
|
|
335
|
+
}
|
|
336
|
+
//# sourceMappingURL=sync-enum-values.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sync-enum-values.js","sourceRoot":"","sources":["../../src/scripts/sync-enum-values.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export declare class DatabaseTruncateTool {
|
|
2
|
+
private readonly databaseUrl;
|
|
3
|
+
private readonly logger;
|
|
4
|
+
private readonly pool;
|
|
5
|
+
constructor(databaseUrl: string);
|
|
6
|
+
truncateDatabase(): Promise<void>;
|
|
7
|
+
private getSchemas;
|
|
8
|
+
private truncateSchema;
|
|
9
|
+
private cleanup;
|
|
10
|
+
}
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.DatabaseTruncateTool = void 0;
|
|
4
|
+
const pg = require("pg");
|
|
5
|
+
const dotenv = require("dotenv");
|
|
6
|
+
const common_1 = require("@nestjs/common");
|
|
7
|
+
dotenv.config();
|
|
8
|
+
class DatabaseTruncateTool {
|
|
9
|
+
constructor(databaseUrl) {
|
|
10
|
+
this.databaseUrl = databaseUrl;
|
|
11
|
+
this.logger = new common_1.Logger("DatabaseTruncateTool");
|
|
12
|
+
this.pool = new pg.Pool({
|
|
13
|
+
connectionString: this.databaseUrl,
|
|
14
|
+
});
|
|
15
|
+
}
|
|
16
|
+
async truncateDatabase() {
|
|
17
|
+
try {
|
|
18
|
+
this.logger.log("Starting database truncate process");
|
|
19
|
+
const schemas = await this.getSchemas();
|
|
20
|
+
this.logger.log(`Found ${schemas.length} schemas to process`);
|
|
21
|
+
for (const schema of schemas) {
|
|
22
|
+
await this.truncateSchema(schema);
|
|
23
|
+
}
|
|
24
|
+
this.logger.log("Database has been successfully truncated");
|
|
25
|
+
}
|
|
26
|
+
catch (error) {
|
|
27
|
+
this.logger.error(`Error truncating database: ${error.message}`, error.stack);
|
|
28
|
+
throw error;
|
|
29
|
+
}
|
|
30
|
+
finally {
|
|
31
|
+
await this.cleanup();
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
async getSchemas() {
|
|
35
|
+
const result = await this.pool.query(`
|
|
36
|
+
SELECT schema_name
|
|
37
|
+
FROM information_schema.schemata
|
|
38
|
+
WHERE schema_name NOT IN ('information_schema', 'pg_catalog', 'pg_toast')
|
|
39
|
+
AND schema_name NOT LIKE 'pg_%'
|
|
40
|
+
`);
|
|
41
|
+
return result.rows.map(row => row.schema_name);
|
|
42
|
+
}
|
|
43
|
+
async truncateSchema(schemaName) {
|
|
44
|
+
this.logger.log(`Processing schema: ${schemaName}`);
|
|
45
|
+
try {
|
|
46
|
+
const tablesResult = await this.pool.query(`
|
|
47
|
+
SELECT table_name
|
|
48
|
+
FROM information_schema.tables
|
|
49
|
+
WHERE table_schema = $1
|
|
50
|
+
AND table_type = 'BASE TABLE'
|
|
51
|
+
`, [schemaName]);
|
|
52
|
+
const tables = tablesResult.rows.map(row => row.table_name);
|
|
53
|
+
if (tables.length === 0) {
|
|
54
|
+
this.logger.log(`No tables found in schema ${schemaName}`);
|
|
55
|
+
return;
|
|
56
|
+
}
|
|
57
|
+
this.logger.log(`Found ${tables.length} tables in schema ${schemaName}`);
|
|
58
|
+
await this.pool.query(`SET session_replication_role = 'replica'`);
|
|
59
|
+
for (const table of tables) {
|
|
60
|
+
try {
|
|
61
|
+
await this.pool.query(`TRUNCATE TABLE "${schemaName}"."${table}" CASCADE`);
|
|
62
|
+
this.logger.log(`Truncated table ${schemaName}.${table}`);
|
|
63
|
+
}
|
|
64
|
+
catch (tableError) {
|
|
65
|
+
this.logger.error(`Error truncating table ${schemaName}.${table}: ${tableError.message}`);
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
await this.pool.query(`SET session_replication_role = 'origin'`);
|
|
69
|
+
this.logger.log(`Successfully processed schema: ${schemaName}`);
|
|
70
|
+
}
|
|
71
|
+
catch (error) {
|
|
72
|
+
this.logger.error(`Error processing schema ${schemaName}: ${error.message}`);
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
async cleanup() {
|
|
76
|
+
this.logger.log("Cleaning up database connections");
|
|
77
|
+
await this.pool.end();
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
exports.DatabaseTruncateTool = DatabaseTruncateTool;
|
|
81
|
+
if (require.main === module) {
|
|
82
|
+
const run = async () => {
|
|
83
|
+
try {
|
|
84
|
+
const databaseUrl = process.argv[2] || process.env.DATABASE_URL;
|
|
85
|
+
if (!databaseUrl) {
|
|
86
|
+
console.error("Error: No database URL provided. Please provide a database URL as an argument or set DATABASE_URL environment variable.");
|
|
87
|
+
process.exit(1);
|
|
88
|
+
}
|
|
89
|
+
const truncateTool = new DatabaseTruncateTool(databaseUrl);
|
|
90
|
+
await truncateTool.truncateDatabase();
|
|
91
|
+
process.exit(0);
|
|
92
|
+
}
|
|
93
|
+
catch (error) {
|
|
94
|
+
console.error("Error:", error.message);
|
|
95
|
+
process.exit(1);
|
|
96
|
+
}
|
|
97
|
+
};
|
|
98
|
+
run();
|
|
99
|
+
}
|
|
100
|
+
//# sourceMappingURL=truncate-database.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"truncate-database.js","sourceRoot":"","sources":["../../src/scripts/truncate-database.ts"],"names":[],"mappings":"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"}
|