@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,512 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
const commander_1 = require("commander");
|
|
4
|
-
const dotenv = require("dotenv");
|
|
5
|
-
const child_process_1 = require("child_process");
|
|
6
|
-
const util_1 = require("util");
|
|
7
|
-
const fix_schema_discrepancies_1 = require("./fix-schema-discrepancies");
|
|
8
|
-
const fs = require("fs");
|
|
9
|
-
const path = require("path");
|
|
10
|
-
const database_initializer_1 = require("./database-initializer");
|
|
11
|
-
const sequence_synchronizer_1 = require("./sequence-synchronizer");
|
|
12
|
-
dotenv.config();
|
|
13
|
-
const execAsync = (0, util_1.promisify)(child_process_1.exec);
|
|
14
|
-
const program = new commander_1.Command();
|
|
15
|
-
async function loadMigrationConfig(configPath) {
|
|
16
|
-
const defaultPath = path.join(__dirname, "data-migration", "migration-config.json");
|
|
17
|
-
const filePath = configPath || defaultPath;
|
|
18
|
-
try {
|
|
19
|
-
const configContent = await fs.promises.readFile(filePath, "utf8");
|
|
20
|
-
return JSON.parse(configContent);
|
|
21
|
-
}
|
|
22
|
-
catch (error) {
|
|
23
|
-
console.error(`Error loading migration config from ${filePath}:`, error);
|
|
24
|
-
throw error;
|
|
25
|
-
}
|
|
26
|
-
}
|
|
27
|
-
async function testDatabaseConnection(url, name) {
|
|
28
|
-
const { Pool } = await Promise.resolve().then(() => require("pg"));
|
|
29
|
-
const pool = new Pool({ connectionString: url });
|
|
30
|
-
try {
|
|
31
|
-
console.log(`Testing connection to ${name} database...`);
|
|
32
|
-
const client = await pool.connect();
|
|
33
|
-
const result = await client.query("SELECT NOW()");
|
|
34
|
-
client.release();
|
|
35
|
-
console.log(`Successfully connected to ${name} database`);
|
|
36
|
-
return true;
|
|
37
|
-
}
|
|
38
|
-
catch (error) {
|
|
39
|
-
console.error(`Failed to connect to ${name} database: ${error.message}`);
|
|
40
|
-
return false;
|
|
41
|
-
}
|
|
42
|
-
finally {
|
|
43
|
-
await pool.end();
|
|
44
|
-
}
|
|
45
|
-
}
|
|
46
|
-
program
|
|
47
|
-
.command("migrate")
|
|
48
|
-
.description("Run the data migration process")
|
|
49
|
-
.option("-s, --source <url>", "Source database connection URL")
|
|
50
|
-
.option("-t, --target <url>", "Target database connection URL")
|
|
51
|
-
.option("-m, --mode <mode>", "Migration mode: 'multi-tenant' or 'public-only'", "multi-tenant")
|
|
52
|
-
.option("-d, --dry-run", "Perform a dry run without making changes", false)
|
|
53
|
-
.option("--skip-schema-creation", "Skip the schema creation step", false)
|
|
54
|
-
.option("--skip-schema-migration", "Skip the schema migration step", false)
|
|
55
|
-
.option("--skip-data-migration", "Skip the data migration step", false)
|
|
56
|
-
.option("--skip-validation", "Skip pre and post validation steps", false)
|
|
57
|
-
.option("--skip-enum-sync", "Skip enum synchronization step", false)
|
|
58
|
-
.option("--auto-fix-schema", "Automatically fix schema discrepancies", false)
|
|
59
|
-
.option("--force", "Force migration even if validation fails", false)
|
|
60
|
-
.option("-y, --yes", "Automatically answer yes to all prompts", false)
|
|
61
|
-
.option("--config-path <path>", "Path to migration config file")
|
|
62
|
-
.option("--skip-initialization", "Skip database initialization step", false)
|
|
63
|
-
.option("--skip-sequence-sync", "Skip sequence synchronization step", false)
|
|
64
|
-
.action(async (options) => {
|
|
65
|
-
if (options.source) {
|
|
66
|
-
process.env.SOURCE_DATABASE_URL = options.source;
|
|
67
|
-
}
|
|
68
|
-
if (options.target) {
|
|
69
|
-
process.env.DATABASE_URL = options.target;
|
|
70
|
-
}
|
|
71
|
-
if (!process.env.SOURCE_DATABASE_URL) {
|
|
72
|
-
console.error("Source database URL is required. Use --source or set SOURCE_DATABASE_URL environment variable.");
|
|
73
|
-
process.exit(1);
|
|
74
|
-
}
|
|
75
|
-
if (!process.env.DATABASE_URL) {
|
|
76
|
-
console.error("Target database URL is required. Use --target or set DATABASE_URL environment variable.");
|
|
77
|
-
process.exit(1);
|
|
78
|
-
}
|
|
79
|
-
if (options.dryRun) {
|
|
80
|
-
console.log("Performing dry run - no changes will be made to the database");
|
|
81
|
-
process.env.DRY_RUN = "true";
|
|
82
|
-
}
|
|
83
|
-
const sourceConnected = await testDatabaseConnection(process.env.SOURCE_DATABASE_URL, "source");
|
|
84
|
-
const targetConnected = await testDatabaseConnection(process.env.DATABASE_URL, "target");
|
|
85
|
-
if (!sourceConnected || !targetConnected) {
|
|
86
|
-
console.error("Database connection test failed. Please check your connection strings and try again.");
|
|
87
|
-
process.exit(1);
|
|
88
|
-
}
|
|
89
|
-
try {
|
|
90
|
-
if (!options.skipInitialization) {
|
|
91
|
-
console.log("Step 0: Checking database initialization...");
|
|
92
|
-
const initializer = new database_initializer_1.DatabaseInitializer(process.env.DATABASE_URL);
|
|
93
|
-
await initializer.initialize();
|
|
94
|
-
}
|
|
95
|
-
if (!options.skipValidation) {
|
|
96
|
-
console.log("Step 1: Running pre-migration validation...");
|
|
97
|
-
const { PreMigrationValidator } = await Promise.resolve().then(() => require("./pre-migration-validator"));
|
|
98
|
-
const validator = new PreMigrationValidator();
|
|
99
|
-
const validationResult = await validator.validate();
|
|
100
|
-
if (!validationResult.success && !options.force) {
|
|
101
|
-
console.log(`Pre-migration validation found ${validationResult.issueCount} issues.`);
|
|
102
|
-
console.log(JSON.stringify(validationResult, null, 2));
|
|
103
|
-
if (options.yes) {
|
|
104
|
-
console.log("Continuing with migration despite issues (--yes flag provided)");
|
|
105
|
-
}
|
|
106
|
-
else if (!options.force) {
|
|
107
|
-
const readline = require("readline").createInterface({
|
|
108
|
-
input: process.stdin,
|
|
109
|
-
output: process.stdout,
|
|
110
|
-
});
|
|
111
|
-
const answer = await new Promise((resolve) => {
|
|
112
|
-
readline.question("Continue with migration despite issues? (y/N) ", (ans) => {
|
|
113
|
-
resolve(ans);
|
|
114
|
-
readline.close();
|
|
115
|
-
});
|
|
116
|
-
});
|
|
117
|
-
if (answer.toLowerCase() !== "y") {
|
|
118
|
-
console.log("Migration aborted by user.");
|
|
119
|
-
process.exit(1);
|
|
120
|
-
}
|
|
121
|
-
}
|
|
122
|
-
}
|
|
123
|
-
else {
|
|
124
|
-
console.log("Pre-migration validation successful!");
|
|
125
|
-
}
|
|
126
|
-
if (options.autoFixSchema && validationResult.reportPath) {
|
|
127
|
-
console.log("Automatically fixing schema discrepancies...");
|
|
128
|
-
const fixer = new fix_schema_discrepancies_1.SchemaDiscrepancyFixer(process.env.SOURCE_DATABASE_URL, process.env.DATABASE_URL, validationResult.reportPath);
|
|
129
|
-
await fixer.fixDiscrepancies();
|
|
130
|
-
}
|
|
131
|
-
}
|
|
132
|
-
if (!options.skipSchemaMigration) {
|
|
133
|
-
console.log("Step 2: Migrating schema structure...");
|
|
134
|
-
if (options.mode === "multi-tenant") {
|
|
135
|
-
await execAsync("node dist/scripts/migrate-schema-structure.js");
|
|
136
|
-
}
|
|
137
|
-
else {
|
|
138
|
-
const { Pool } = await Promise.resolve().then(() => require("pg"));
|
|
139
|
-
const pool = new Pool({ connectionString: process.env.DATABASE_URL });
|
|
140
|
-
async function checkIfTablesExist(pool) {
|
|
141
|
-
try {
|
|
142
|
-
const result = await pool.query(`
|
|
143
|
-
SELECT COUNT(*)
|
|
144
|
-
FROM information_schema.tables
|
|
145
|
-
WHERE table_schema = 'public'
|
|
146
|
-
AND table_type = 'BASE TABLE'
|
|
147
|
-
`);
|
|
148
|
-
return parseInt(result.rows[0].count) > 0;
|
|
149
|
-
}
|
|
150
|
-
catch (error) {
|
|
151
|
-
console.error("Error checking tables:", error);
|
|
152
|
-
return false;
|
|
153
|
-
}
|
|
154
|
-
}
|
|
155
|
-
const tablesExist = await checkIfTablesExist(pool);
|
|
156
|
-
if (!tablesExist) {
|
|
157
|
-
await execAsync("npx prisma migrate deploy");
|
|
158
|
-
}
|
|
159
|
-
}
|
|
160
|
-
}
|
|
161
|
-
if (!options.skipEnumSync) {
|
|
162
|
-
console.log("Step 3: Synchronizing and fixing enum types...");
|
|
163
|
-
const { EnumSynchronizer } = await Promise.resolve().then(() => require("./sync-enum-types"));
|
|
164
|
-
const synchronizer = new EnumSynchronizer();
|
|
165
|
-
await synchronizer.synchronizeEnums();
|
|
166
|
-
console.log("Enum types synchronized successfully!");
|
|
167
|
-
console.log("Step 3.1: Synchronizing enum values...");
|
|
168
|
-
const { EnumValueSynchronizer } = await Promise.resolve().then(() => require("./sync-enum-values"));
|
|
169
|
-
const valueSynchronizer = new EnumValueSynchronizer();
|
|
170
|
-
await valueSynchronizer.synchronizeEnumValues();
|
|
171
|
-
console.log("Enum values synchronized successfully!");
|
|
172
|
-
console.log("Step 3.2: Fixing enum values...");
|
|
173
|
-
const { EnumFixer } = await Promise.resolve().then(() => require("./fix-enum-values"));
|
|
174
|
-
const enumFixer = new EnumFixer(process.env.DATABASE_URL);
|
|
175
|
-
await enumFixer.fixEnumValues();
|
|
176
|
-
console.log("Enum values fixed successfully!");
|
|
177
|
-
}
|
|
178
|
-
console.log("Step 4: Fixing data type issues...");
|
|
179
|
-
const { DataTypeFixer } = await Promise.resolve().then(() => require("./fix-data-types"));
|
|
180
|
-
const fixer = new DataTypeFixer();
|
|
181
|
-
await fixer.fixDataTypes();
|
|
182
|
-
console.log("Data type fixing completed successfully!");
|
|
183
|
-
if (!options.skipDataMigration) {
|
|
184
|
-
console.log("Step 5: Migrating data with transformation...");
|
|
185
|
-
const { DataMigrationTool } = await Promise.resolve().then(() => require("./data-migration/migration-tool"));
|
|
186
|
-
const { PrismaClient } = await Promise.resolve().then(() => require("@prisma/client"));
|
|
187
|
-
const { Pool } = await Promise.resolve().then(() => require("pg"));
|
|
188
|
-
const migrationConfig = await loadMigrationConfig(options.configPath);
|
|
189
|
-
const connections = {
|
|
190
|
-
sourcePool: new Pool({
|
|
191
|
-
connectionString: process.env.SOURCE_DATABASE_URL,
|
|
192
|
-
max: 20,
|
|
193
|
-
idleTimeoutMillis: 30000,
|
|
194
|
-
}),
|
|
195
|
-
targetPool: new Pool({
|
|
196
|
-
connectionString: process.env.DATABASE_URL,
|
|
197
|
-
max: 20,
|
|
198
|
-
idleTimeoutMillis: 30000,
|
|
199
|
-
}),
|
|
200
|
-
sourcePrisma: new PrismaClient({
|
|
201
|
-
datasources: { db: { url: process.env.SOURCE_DATABASE_URL } },
|
|
202
|
-
log: ["error", "warn"],
|
|
203
|
-
}),
|
|
204
|
-
targetPrisma: new PrismaClient({
|
|
205
|
-
datasources: { db: { url: process.env.DATABASE_URL } },
|
|
206
|
-
log: ["error", "warn"],
|
|
207
|
-
}),
|
|
208
|
-
};
|
|
209
|
-
try {
|
|
210
|
-
await connections.targetPool.query("SET session_replication_role = 'replica';");
|
|
211
|
-
if (options.mode === "public-only") {
|
|
212
|
-
migrationConfig.tables = Object.entries(migrationConfig.tables)
|
|
213
|
-
.filter(([_, config]) => config.type === "public")
|
|
214
|
-
.reduce((acc, [key, value]) => (Object.assign(Object.assign({}, acc), { [key]: value })), {});
|
|
215
|
-
}
|
|
216
|
-
const migrationTool = new DataMigrationTool(connections, Object.assign(Object.assign({}, migrationConfig), { tables: Object.entries(migrationConfig.tables).reduce((acc, [key, value]) => (Object.assign(Object.assign({}, acc), { [key]: Object.assign(Object.assign({}, value), { sourceTable: value.sourceTable || key, targetTable: value.targetTable || key }) })), {}) }), {
|
|
217
|
-
publicOnly: options.mode === "public-only",
|
|
218
|
-
targetSchema: "public",
|
|
219
|
-
sourceSchema: "public",
|
|
220
|
-
multiTenant: options.mode !== "public-only",
|
|
221
|
-
});
|
|
222
|
-
await migrationTool.migrate();
|
|
223
|
-
}
|
|
224
|
-
finally {
|
|
225
|
-
await connections.targetPool.query("SET session_replication_role = 'origin';");
|
|
226
|
-
await connections.sourcePool.end();
|
|
227
|
-
await connections.targetPool.end();
|
|
228
|
-
await connections.sourcePrisma.$disconnect();
|
|
229
|
-
await connections.targetPrisma.$disconnect();
|
|
230
|
-
}
|
|
231
|
-
}
|
|
232
|
-
if (!options.skipValidation) {
|
|
233
|
-
console.log("Step 6: Running post-migration validation...");
|
|
234
|
-
const { PostMigrationValidator } = await Promise.resolve().then(() => require("./post-migration-validator"));
|
|
235
|
-
const validator = new PostMigrationValidator();
|
|
236
|
-
const result = await validator.validate({
|
|
237
|
-
publicOnly: options.mode === "public-only",
|
|
238
|
-
});
|
|
239
|
-
if (result.success) {
|
|
240
|
-
console.log("Post-migration validation successful!");
|
|
241
|
-
}
|
|
242
|
-
else {
|
|
243
|
-
console.log(`Post-migration validation found ${result.issueCount} issues.`);
|
|
244
|
-
console.log(JSON.stringify(result, null, 2));
|
|
245
|
-
if (!options.force) {
|
|
246
|
-
console.error("Migration validation failed. Use --force to continue anyway.");
|
|
247
|
-
process.exit(1);
|
|
248
|
-
}
|
|
249
|
-
console.log("Continuing with migration despite validation issues (--force flag provided)");
|
|
250
|
-
}
|
|
251
|
-
}
|
|
252
|
-
if (!options.skipSequenceSync) {
|
|
253
|
-
console.log("Step 7: Synchronizing database sequences...");
|
|
254
|
-
const sequenceSynchronizer = new sequence_synchronizer_1.SequenceSynchronizer(process.env.DATABASE_URL);
|
|
255
|
-
await sequenceSynchronizer.synchronizeSequences();
|
|
256
|
-
console.log("Database sequences synchronized successfully!");
|
|
257
|
-
}
|
|
258
|
-
console.log("Migration process completed successfully!");
|
|
259
|
-
}
|
|
260
|
-
catch (error) {
|
|
261
|
-
console.error("Error running migration:", error);
|
|
262
|
-
process.exit(1);
|
|
263
|
-
}
|
|
264
|
-
});
|
|
265
|
-
program
|
|
266
|
-
.command("fix-data-types")
|
|
267
|
-
.description("Fix data type issues in the migrated data")
|
|
268
|
-
.option("-t, --target <url>", "Target database connection URL")
|
|
269
|
-
.action(async (options) => {
|
|
270
|
-
if (options.target) {
|
|
271
|
-
process.env.DATABASE_URL = options.target;
|
|
272
|
-
}
|
|
273
|
-
if (!process.env.DATABASE_URL) {
|
|
274
|
-
console.error("Target database URL is required. Use --target or set DATABASE_URL environment variable.");
|
|
275
|
-
process.exit(1);
|
|
276
|
-
}
|
|
277
|
-
try {
|
|
278
|
-
console.log("Fixing data type issues...");
|
|
279
|
-
const { DataTypeFixer } = await Promise.resolve().then(() => require("./fix-data-types"));
|
|
280
|
-
const fixer = new DataTypeFixer();
|
|
281
|
-
await fixer.fixDataTypes();
|
|
282
|
-
console.log("Data type fixing completed successfully!");
|
|
283
|
-
}
|
|
284
|
-
catch (error) {
|
|
285
|
-
console.error("Error fixing data types:", error);
|
|
286
|
-
process.exit(1);
|
|
287
|
-
}
|
|
288
|
-
});
|
|
289
|
-
program
|
|
290
|
-
.command("truncate-database")
|
|
291
|
-
.description("Truncate (empty) all tables in the database without dropping the database")
|
|
292
|
-
.option("-t, --target <url>", "Target database connection URL")
|
|
293
|
-
.action(async (options) => {
|
|
294
|
-
if (options.target) {
|
|
295
|
-
process.env.DATABASE_URL = options.target;
|
|
296
|
-
}
|
|
297
|
-
if (!process.env.DATABASE_URL) {
|
|
298
|
-
console.error("Target database URL is required. Use --target or set DATABASE_URL environment variable.");
|
|
299
|
-
process.exit(1);
|
|
300
|
-
}
|
|
301
|
-
try {
|
|
302
|
-
console.log("Truncating database...");
|
|
303
|
-
const { DatabaseTruncateTool } = await Promise.resolve().then(() => require("./truncate-database"));
|
|
304
|
-
const truncateTool = new DatabaseTruncateTool(process.env.DATABASE_URL);
|
|
305
|
-
await truncateTool.truncateDatabase();
|
|
306
|
-
console.log("Database truncation completed successfully!");
|
|
307
|
-
}
|
|
308
|
-
catch (error) {
|
|
309
|
-
console.error("Error truncating database:", error);
|
|
310
|
-
process.exit(1);
|
|
311
|
-
}
|
|
312
|
-
});
|
|
313
|
-
program
|
|
314
|
-
.command("retry-failed")
|
|
315
|
-
.description("Retry failed migrations from an error log file")
|
|
316
|
-
.argument("<error-log-path>", "Path to the error log file")
|
|
317
|
-
.option("-t, --target <url>", "Target database connection URL")
|
|
318
|
-
.action(async (errorLogPath, options) => {
|
|
319
|
-
if (options.target) {
|
|
320
|
-
process.env.DATABASE_URL = options.target;
|
|
321
|
-
}
|
|
322
|
-
if (!process.env.DATABASE_URL) {
|
|
323
|
-
console.error("Target database URL is required. Use --target or set DATABASE_URL environment variable.");
|
|
324
|
-
process.exit(1);
|
|
325
|
-
}
|
|
326
|
-
try {
|
|
327
|
-
console.log(`Retrying failed migrations from log: ${errorLogPath}`);
|
|
328
|
-
const { FailedMigrationRetry } = await Promise.resolve().then(() => require("./retry-failed-migrations"));
|
|
329
|
-
const retryTool = new FailedMigrationRetry(errorLogPath);
|
|
330
|
-
await retryTool.retryFailedMigrations();
|
|
331
|
-
console.log("Retry process completed!");
|
|
332
|
-
}
|
|
333
|
-
catch (error) {
|
|
334
|
-
console.error("Error retrying failed migrations:", error);
|
|
335
|
-
process.exit(1);
|
|
336
|
-
}
|
|
337
|
-
});
|
|
338
|
-
program
|
|
339
|
-
.command("fix-enum-values")
|
|
340
|
-
.description("Fix invalid enum values in the database")
|
|
341
|
-
.option("-t, --target <url>", "Target database connection URL")
|
|
342
|
-
.action(async (options) => {
|
|
343
|
-
if (options.target) {
|
|
344
|
-
process.env.DATABASE_URL = options.target;
|
|
345
|
-
}
|
|
346
|
-
if (!process.env.DATABASE_URL) {
|
|
347
|
-
console.error("Target database URL is required. Use --target or set DATABASE_URL environment variable.");
|
|
348
|
-
process.exit(1);
|
|
349
|
-
}
|
|
350
|
-
try {
|
|
351
|
-
console.log("Fixing enum values...");
|
|
352
|
-
const { EnumFixer } = await Promise.resolve().then(() => require("./fix-enum-values"));
|
|
353
|
-
const enumFixer = new EnumFixer(process.env.DATABASE_URL);
|
|
354
|
-
await enumFixer.fixEnumValues();
|
|
355
|
-
console.log("Enum values fixed successfully!");
|
|
356
|
-
}
|
|
357
|
-
catch (error) {
|
|
358
|
-
console.error("Error fixing enum values:", error);
|
|
359
|
-
process.exit(1);
|
|
360
|
-
}
|
|
361
|
-
});
|
|
362
|
-
program
|
|
363
|
-
.command("pre-validate")
|
|
364
|
-
.description("Validate database before migration")
|
|
365
|
-
.option("-s, --source <url>", "Source database connection URL")
|
|
366
|
-
.option("-t, --target <url>", "Target database connection URL")
|
|
367
|
-
.option("-y, --yes", "Automatically answer yes to all prompts", false)
|
|
368
|
-
.action(async (options) => {
|
|
369
|
-
if (options.source) {
|
|
370
|
-
process.env.SOURCE_DATABASE_URL = options.source;
|
|
371
|
-
}
|
|
372
|
-
if (options.target) {
|
|
373
|
-
process.env.DATABASE_URL = options.target;
|
|
374
|
-
}
|
|
375
|
-
if (!process.env.SOURCE_DATABASE_URL || !process.env.DATABASE_URL) {
|
|
376
|
-
console.error("Source and target database URLs are required. Use --source and --target or set SOURCE_DATABASE_URL and DATABASE_URL environment variables.");
|
|
377
|
-
process.exit(1);
|
|
378
|
-
}
|
|
379
|
-
try {
|
|
380
|
-
console.log("Validating database before migration...");
|
|
381
|
-
const { PreMigrationValidator } = await Promise.resolve().then(() => require("./pre-migration-validator"));
|
|
382
|
-
const validator = new PreMigrationValidator();
|
|
383
|
-
const result = await validator.validate();
|
|
384
|
-
if (result.success) {
|
|
385
|
-
console.log("Pre-migration validation successful!");
|
|
386
|
-
process.exit(0);
|
|
387
|
-
}
|
|
388
|
-
else {
|
|
389
|
-
console.log(`Pre-migration validation found ${result.issueCount} issues.`);
|
|
390
|
-
console.log(JSON.stringify(result, null, 2));
|
|
391
|
-
if (options.yes) {
|
|
392
|
-
console.log("Continuing with migration despite issues (--yes flag provided)");
|
|
393
|
-
process.exit(0);
|
|
394
|
-
}
|
|
395
|
-
const readline = require("readline").createInterface({
|
|
396
|
-
input: process.stdin,
|
|
397
|
-
output: process.stdout,
|
|
398
|
-
});
|
|
399
|
-
const answer = await new Promise((resolve) => {
|
|
400
|
-
readline.question("Continue with migration despite issues? (y/N) ", (ans) => {
|
|
401
|
-
resolve(ans);
|
|
402
|
-
readline.close();
|
|
403
|
-
});
|
|
404
|
-
});
|
|
405
|
-
if (answer.toLowerCase() === "y") {
|
|
406
|
-
console.log("Continuing with migration despite issues.");
|
|
407
|
-
process.exit(0);
|
|
408
|
-
}
|
|
409
|
-
else {
|
|
410
|
-
console.log("Migration aborted by user.");
|
|
411
|
-
process.exit(1);
|
|
412
|
-
}
|
|
413
|
-
}
|
|
414
|
-
}
|
|
415
|
-
catch (error) {
|
|
416
|
-
console.error("Error during pre-migration validation:", error);
|
|
417
|
-
process.exit(1);
|
|
418
|
-
}
|
|
419
|
-
});
|
|
420
|
-
program
|
|
421
|
-
.command("sync-enums")
|
|
422
|
-
.description("Synchronize enum types between databases")
|
|
423
|
-
.option("-s, --source <url>", "Source database connection URL")
|
|
424
|
-
.option("-t, --target <url>", "Target database connection URL")
|
|
425
|
-
.action(async (options) => {
|
|
426
|
-
if (options.source) {
|
|
427
|
-
process.env.SOURCE_DATABASE_URL = options.source;
|
|
428
|
-
}
|
|
429
|
-
if (options.target) {
|
|
430
|
-
process.env.DATABASE_URL = options.target;
|
|
431
|
-
}
|
|
432
|
-
if (!process.env.SOURCE_DATABASE_URL || !process.env.DATABASE_URL) {
|
|
433
|
-
console.error("Source and target database URLs are required. Use --source and --target or set SOURCE_DATABASE_URL and DATABASE_URL environment variables.");
|
|
434
|
-
process.exit(1);
|
|
435
|
-
}
|
|
436
|
-
try {
|
|
437
|
-
console.log("Synchronizing enum types...");
|
|
438
|
-
const { EnumSynchronizer } = await Promise.resolve().then(() => require("./sync-enum-types"));
|
|
439
|
-
const synchronizer = new EnumSynchronizer();
|
|
440
|
-
await synchronizer.synchronizeEnums();
|
|
441
|
-
console.log("Enum types synchronized successfully!");
|
|
442
|
-
}
|
|
443
|
-
catch (error) {
|
|
444
|
-
console.error("Error synchronizing enum types:", error);
|
|
445
|
-
process.exit(1);
|
|
446
|
-
}
|
|
447
|
-
});
|
|
448
|
-
program
|
|
449
|
-
.command("post-validate")
|
|
450
|
-
.description("Validate database after migration")
|
|
451
|
-
.option("-s, --source <url>", "Source database connection URL")
|
|
452
|
-
.option("-t, --target <url>", "Target database connection URL")
|
|
453
|
-
.action(async (options) => {
|
|
454
|
-
if (options.source) {
|
|
455
|
-
process.env.SOURCE_DATABASE_URL = options.source;
|
|
456
|
-
}
|
|
457
|
-
if (options.target) {
|
|
458
|
-
process.env.DATABASE_URL = options.target;
|
|
459
|
-
}
|
|
460
|
-
if (!process.env.SOURCE_DATABASE_URL || !process.env.DATABASE_URL) {
|
|
461
|
-
console.error("Source and target database URLs are required. Use --source and --target or set SOURCE_DATABASE_URL and DATABASE_URL environment variables.");
|
|
462
|
-
process.exit(1);
|
|
463
|
-
}
|
|
464
|
-
try {
|
|
465
|
-
console.log("Validating database after migration...");
|
|
466
|
-
const { PostMigrationValidator } = await Promise.resolve().then(() => require("./post-migration-validator"));
|
|
467
|
-
const validator = new PostMigrationValidator();
|
|
468
|
-
const result = await validator.validate();
|
|
469
|
-
if (result.success) {
|
|
470
|
-
console.log("Post-migration validation successful!");
|
|
471
|
-
}
|
|
472
|
-
else {
|
|
473
|
-
console.log(`Post-migration validation found ${result.issueCount} issues.`);
|
|
474
|
-
console.log(JSON.stringify(result, null, 2));
|
|
475
|
-
}
|
|
476
|
-
}
|
|
477
|
-
catch (error) {
|
|
478
|
-
console.error("Error during post-migration validation:", error);
|
|
479
|
-
process.exit(1);
|
|
480
|
-
}
|
|
481
|
-
});
|
|
482
|
-
program
|
|
483
|
-
.command("verify")
|
|
484
|
-
.description("Verify migration setup and connections")
|
|
485
|
-
.action(async () => {
|
|
486
|
-
try {
|
|
487
|
-
const { MigrationSetupVerifier } = await Promise.resolve().then(() => require("./verify-migration-setup"));
|
|
488
|
-
const verifier = new MigrationSetupVerifier();
|
|
489
|
-
await verifier.verifySetup();
|
|
490
|
-
}
|
|
491
|
-
catch (error) {
|
|
492
|
-
console.error("Verification failed:", error);
|
|
493
|
-
process.exit(1);
|
|
494
|
-
}
|
|
495
|
-
});
|
|
496
|
-
program
|
|
497
|
-
.command("fix-schema")
|
|
498
|
-
.description("Fix schema discrepancies between source and target databases")
|
|
499
|
-
.option("-r, --report <path>", "Path to pre-migration report file")
|
|
500
|
-
.action(async (options) => {
|
|
501
|
-
try {
|
|
502
|
-
const fixer = new fix_schema_discrepancies_1.SchemaDiscrepancyFixer(process.env.SOURCE_DATABASE_URL, process.env.DATABASE_URL, options.report);
|
|
503
|
-
await fixer.fixDiscrepancies();
|
|
504
|
-
console.log("Schema discrepancies fixed successfully");
|
|
505
|
-
}
|
|
506
|
-
catch (error) {
|
|
507
|
-
console.error("Error fixing schema discrepancies:", error.message);
|
|
508
|
-
process.exit(1);
|
|
509
|
-
}
|
|
510
|
-
});
|
|
511
|
-
program.parse();
|
|
512
|
-
//# sourceMappingURL=run-migration.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"run-migration.js","sourceRoot":"","sources":["../../src/scripts/run-migration.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
|
@@ -1,85 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
const common_1 = require("@nestjs/common");
|
|
4
|
-
const db_connector_1 = require("./data-migration/db-connector");
|
|
5
|
-
const fs = require("fs");
|
|
6
|
-
const path = require("path");
|
|
7
|
-
async function main() {
|
|
8
|
-
const logger = new common_1.Logger("SchemaSyncTool");
|
|
9
|
-
logger.log("Starting schema synchronization");
|
|
10
|
-
const connections = db_connector_1.DatabaseConnector.createConnections();
|
|
11
|
-
try {
|
|
12
|
-
const sourceTables = await getTablesFromDatabase(connections.sourcePool);
|
|
13
|
-
logger.log(`Found ${sourceTables.length} tables in source database`);
|
|
14
|
-
const targetTables = await getTablesFromDatabase(connections.targetPool);
|
|
15
|
-
logger.log(`Found ${targetTables.length} tables in target database`);
|
|
16
|
-
const syncScript = await generateSyncScript(connections.sourcePool, connections.targetPool, sourceTables, targetTables);
|
|
17
|
-
const timestamp = new Date().toISOString().replace(/:/g, "-").split(".")[0];
|
|
18
|
-
const filePath = path.join(process.cwd(), `schema-sync-${timestamp}.sql`);
|
|
19
|
-
fs.writeFileSync(filePath, syncScript);
|
|
20
|
-
logger.log(`Schema synchronization script saved to ${filePath}`);
|
|
21
|
-
logger.log("Review the script and execute it manually to synchronize schemas");
|
|
22
|
-
}
|
|
23
|
-
catch (error) {
|
|
24
|
-
logger.error(`Error in schema synchronization: ${error.message}`, error.stack);
|
|
25
|
-
}
|
|
26
|
-
finally {
|
|
27
|
-
await db_connector_1.DatabaseConnector.cleanup(connections);
|
|
28
|
-
}
|
|
29
|
-
}
|
|
30
|
-
async function getTablesFromDatabase(pool) {
|
|
31
|
-
const query = `
|
|
32
|
-
SELECT table_name
|
|
33
|
-
FROM information_schema.tables
|
|
34
|
-
WHERE table_schema = 'public'
|
|
35
|
-
AND table_type = 'BASE TABLE'
|
|
36
|
-
`;
|
|
37
|
-
const result = await pool.query(query);
|
|
38
|
-
return result.rows.map(row => row.table_name);
|
|
39
|
-
}
|
|
40
|
-
async function generateSyncScript(sourcePool, targetPool, sourceTables, targetTables) {
|
|
41
|
-
let script = "-- Schema synchronization script\n\n";
|
|
42
|
-
for (const table of sourceTables) {
|
|
43
|
-
const sourceColumns = await getTableColumns(sourcePool, table);
|
|
44
|
-
if (targetTables.includes(table)) {
|
|
45
|
-
const targetColumns = await getTableColumns(targetPool, table);
|
|
46
|
-
const missingColumns = sourceColumns.filter(sourceCol => !targetColumns.some(targetCol => targetCol.column_name === sourceCol.column_name));
|
|
47
|
-
for (const column of missingColumns) {
|
|
48
|
-
script += `-- Adding missing column ${column.column_name} to table ${table}\n`;
|
|
49
|
-
script += `ALTER TABLE "${table}" ADD COLUMN "${column.column_name}" ${column.data_type}`;
|
|
50
|
-
if (column.is_nullable === 'NO') {
|
|
51
|
-
script += " NOT NULL";
|
|
52
|
-
}
|
|
53
|
-
script += ";\n\n";
|
|
54
|
-
}
|
|
55
|
-
}
|
|
56
|
-
else {
|
|
57
|
-
script += `-- Table ${table} does not exist in target database\n`;
|
|
58
|
-
script += `-- Consider running a full schema migration instead\n\n`;
|
|
59
|
-
}
|
|
60
|
-
}
|
|
61
|
-
return script;
|
|
62
|
-
}
|
|
63
|
-
async function getTableColumns(pool, table) {
|
|
64
|
-
const query = `
|
|
65
|
-
SELECT
|
|
66
|
-
column_name,
|
|
67
|
-
data_type,
|
|
68
|
-
is_nullable,
|
|
69
|
-
column_default
|
|
70
|
-
FROM
|
|
71
|
-
information_schema.columns
|
|
72
|
-
WHERE
|
|
73
|
-
table_schema = 'public'
|
|
74
|
-
AND table_name = $1
|
|
75
|
-
ORDER BY
|
|
76
|
-
ordinal_position
|
|
77
|
-
`;
|
|
78
|
-
const result = await pool.query(query, [table]);
|
|
79
|
-
return result.rows;
|
|
80
|
-
}
|
|
81
|
-
main().catch(e => {
|
|
82
|
-
console.error(e);
|
|
83
|
-
process.exit(1);
|
|
84
|
-
});
|
|
85
|
-
//# sourceMappingURL=schema-sync.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"schema-sync.js","sourceRoot":"","sources":["../../src/scripts/schema-sync.ts"],"names":[],"mappings":"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"}
|