@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
package/dist/prisma.module.d.ts
DELETED
package/dist/prisma.module.js
DELETED
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
-
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
-
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
-
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
-
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
-
};
|
|
8
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
-
exports.PrismaModule = void 0;
|
|
10
|
-
const common_1 = require("@nestjs/common");
|
|
11
|
-
const prisma_service_1 = require("./prisma.service");
|
|
12
|
-
const prisma_factory_service_1 = require("./prisma-factory.service");
|
|
13
|
-
let PrismaModule = class PrismaModule {
|
|
14
|
-
};
|
|
15
|
-
exports.PrismaModule = PrismaModule;
|
|
16
|
-
exports.PrismaModule = PrismaModule = __decorate([
|
|
17
|
-
(0, common_1.Global)(),
|
|
18
|
-
(0, common_1.Module)({
|
|
19
|
-
providers: [prisma_service_1.PrismaService, prisma_factory_service_1.PrismaFactoryService],
|
|
20
|
-
exports: [prisma_service_1.PrismaService, prisma_factory_service_1.PrismaFactoryService],
|
|
21
|
-
})
|
|
22
|
-
], PrismaModule);
|
|
23
|
-
//# sourceMappingURL=prisma.module.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"prisma.module.js","sourceRoot":"","sources":["../src/prisma.module.ts"],"names":[],"mappings":";;;;;;;;;AAAA,2CAAgD;AAChD,qDAAiD;AACjD,qEAAgE;AAOzD,IAAM,YAAY,GAAlB,MAAM,YAAY;CAAG,CAAA;AAAf,oCAAY;uBAAZ,YAAY;IALxB,IAAA,eAAM,GAAE;IACR,IAAA,eAAM,EAAC;QACN,SAAS,EAAE,CAAC,8BAAa,EAAE,6CAAoB,CAAC;QAChD,OAAO,EAAE,CAAC,8BAAa,EAAE,6CAAoB,CAAC;KAC/C,CAAC;GACW,YAAY,CAAG"}
|
package/dist/prisma.service.d.ts
DELETED
|
@@ -1,6 +0,0 @@
|
|
|
1
|
-
import { OnModuleInit, OnModuleDestroy } from '@nestjs/common';
|
|
2
|
-
export declare class PrismaService implements OnModuleInit, OnModuleDestroy {
|
|
3
|
-
onModuleInit(): Promise<void>;
|
|
4
|
-
onModuleDestroy(): Promise<void>;
|
|
5
|
-
get client(): import(".prisma/client").PrismaClient<import(".prisma/client").Prisma.PrismaClientOptions, import(".prisma/client").Prisma.LogLevel, import("@prisma/client/runtime/library").DefaultArgs>;
|
|
6
|
-
}
|
package/dist/prisma.service.js
DELETED
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
-
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
-
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
-
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
-
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
-
};
|
|
8
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
-
exports.PrismaService = void 0;
|
|
10
|
-
const common_1 = require("@nestjs/common");
|
|
11
|
-
const index_1 = require("./index");
|
|
12
|
-
let PrismaService = class PrismaService {
|
|
13
|
-
async onModuleInit() {
|
|
14
|
-
await index_1.prisma.$connect();
|
|
15
|
-
}
|
|
16
|
-
async onModuleDestroy() {
|
|
17
|
-
await index_1.prisma.$disconnect();
|
|
18
|
-
}
|
|
19
|
-
get client() {
|
|
20
|
-
return index_1.prisma;
|
|
21
|
-
}
|
|
22
|
-
};
|
|
23
|
-
exports.PrismaService = PrismaService;
|
|
24
|
-
exports.PrismaService = PrismaService = __decorate([
|
|
25
|
-
(0, common_1.Injectable)()
|
|
26
|
-
], PrismaService);
|
|
27
|
-
//# sourceMappingURL=prisma.service.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"prisma.service.js","sourceRoot":"","sources":["../src/prisma.service.ts"],"names":[],"mappings":";;;;;;;;;AAAA,2CAA2E;AAC3E,mCAAiC;AAG1B,IAAM,aAAa,GAAnB,MAAM,aAAa;IACxB,KAAK,CAAC,YAAY;QAChB,MAAM,cAAM,CAAC,QAAQ,EAAE,CAAC;IAC1B,CAAC;IAED,KAAK,CAAC,eAAe;QACnB,MAAM,cAAM,CAAC,WAAW,EAAE,CAAC;IAC7B,CAAC;IAED,IAAI,MAAM;QACR,OAAO,cAAM,CAAC;IAChB,CAAC;CACF,CAAA;AAZY,sCAAa;wBAAb,aAAa;IADzB,IAAA,mBAAU,GAAE;GACA,aAAa,CAYzB"}
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
interface AddUuidOptions {
|
|
2
|
-
tableName: string;
|
|
3
|
-
columnName?: string;
|
|
4
|
-
makeRequired?: boolean;
|
|
5
|
-
addDefault?: boolean;
|
|
6
|
-
}
|
|
7
|
-
declare function addUuidToTable({ tableName, columnName, makeRequired, addDefault, }: AddUuidOptions): Promise<void>;
|
|
8
|
-
export { addUuidToTable };
|
|
@@ -1,98 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.addUuidToTable = addUuidToTable;
|
|
4
|
-
const client_1 = require("@prisma/client");
|
|
5
|
-
const child_process_1 = require("child_process");
|
|
6
|
-
const util_1 = require("util");
|
|
7
|
-
const execAsync = (0, util_1.promisify)(child_process_1.exec);
|
|
8
|
-
const prisma = new client_1.PrismaClient();
|
|
9
|
-
async function addUuidToTable({ tableName, columnName = "uuid", makeRequired = false, addDefault = false, }) {
|
|
10
|
-
try {
|
|
11
|
-
console.log(`🚀 Iniciando proceso de añadir UUID a la tabla ${tableName}...`);
|
|
12
|
-
const tableExists = await prisma.$queryRaw `
|
|
13
|
-
SELECT EXISTS (
|
|
14
|
-
SELECT FROM information_schema.tables
|
|
15
|
-
WHERE table_name = ${tableName}
|
|
16
|
-
);
|
|
17
|
-
`;
|
|
18
|
-
if (!tableExists[0].exists) {
|
|
19
|
-
throw new Error(`La tabla ${tableName} no existe`);
|
|
20
|
-
}
|
|
21
|
-
const columnExists = await prisma.$queryRaw `
|
|
22
|
-
SELECT EXISTS (
|
|
23
|
-
SELECT FROM information_schema.columns
|
|
24
|
-
WHERE table_name = ${tableName}
|
|
25
|
-
AND column_name = ${columnName}
|
|
26
|
-
);
|
|
27
|
-
`;
|
|
28
|
-
if (columnExists[0].exists) {
|
|
29
|
-
console.log(`⚠️ La columna ${columnName} ya existe en la tabla ${tableName}`);
|
|
30
|
-
return;
|
|
31
|
-
}
|
|
32
|
-
console.log("📦 Habilitando extensión uuid-ossp...");
|
|
33
|
-
await prisma.$executeRaw `CREATE EXTENSION IF NOT EXISTS "uuid-ossp";`;
|
|
34
|
-
console.log(`📝 Añadiendo columna ${columnName}...`);
|
|
35
|
-
await prisma.$executeRaw `
|
|
36
|
-
ALTER TABLE ${tableName}
|
|
37
|
-
ADD COLUMN ${columnName} VARCHAR(255);
|
|
38
|
-
`;
|
|
39
|
-
console.log("🔄 Actualizando registros existentes con UUIDs...");
|
|
40
|
-
await prisma.$executeRaw `
|
|
41
|
-
UPDATE ${tableName}
|
|
42
|
-
SET ${columnName} = uuid_generate_v4()
|
|
43
|
-
WHERE ${columnName} IS NULL;
|
|
44
|
-
`;
|
|
45
|
-
console.log("📊 Creando índice...");
|
|
46
|
-
await prisma.$executeRaw `
|
|
47
|
-
CREATE INDEX idx_${tableName}_${columnName}
|
|
48
|
-
ON ${tableName}(${columnName});
|
|
49
|
-
`;
|
|
50
|
-
console.log("🔒 Añadiendo restricción unique...");
|
|
51
|
-
await prisma.$executeRaw `
|
|
52
|
-
ALTER TABLE ${tableName}
|
|
53
|
-
ADD CONSTRAINT ${tableName}_${columnName}_key
|
|
54
|
-
UNIQUE (${columnName});
|
|
55
|
-
`;
|
|
56
|
-
if (makeRequired) {
|
|
57
|
-
console.log("⚠️ Haciendo la columna NOT NULL...");
|
|
58
|
-
await prisma.$executeRaw `
|
|
59
|
-
ALTER TABLE ${tableName}
|
|
60
|
-
ALTER COLUMN ${columnName} SET NOT NULL;
|
|
61
|
-
`;
|
|
62
|
-
}
|
|
63
|
-
if (addDefault) {
|
|
64
|
-
console.log("⚡ Añadiendo valor por defecto...");
|
|
65
|
-
await prisma.$executeRaw `
|
|
66
|
-
ALTER TABLE ${tableName}
|
|
67
|
-
ALTER COLUMN ${columnName}
|
|
68
|
-
SET DEFAULT uuid_generate_v4();
|
|
69
|
-
`;
|
|
70
|
-
}
|
|
71
|
-
console.log(`✅ Proceso completado exitosamente para la tabla ${tableName}`);
|
|
72
|
-
}
|
|
73
|
-
catch (error) {
|
|
74
|
-
console.error("❌ Error durante el proceso:", error);
|
|
75
|
-
throw error;
|
|
76
|
-
}
|
|
77
|
-
finally {
|
|
78
|
-
await prisma.$disconnect();
|
|
79
|
-
}
|
|
80
|
-
}
|
|
81
|
-
async function main() {
|
|
82
|
-
try {
|
|
83
|
-
await addUuidToTable({
|
|
84
|
-
tableName: "transactions",
|
|
85
|
-
columnName: "uuid",
|
|
86
|
-
makeRequired: false,
|
|
87
|
-
addDefault: false,
|
|
88
|
-
});
|
|
89
|
-
}
|
|
90
|
-
catch (error) {
|
|
91
|
-
console.error("Error en el proceso principal:", error);
|
|
92
|
-
process.exit(1);
|
|
93
|
-
}
|
|
94
|
-
}
|
|
95
|
-
if (require.main === module) {
|
|
96
|
-
main();
|
|
97
|
-
}
|
|
98
|
-
//# sourceMappingURL=add-uuid-to-table.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"add-uuid-to-table.js","sourceRoot":"","sources":["../../src/scripts/add-uuid-to-table.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
|
@@ -1,117 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
const client_1 = require("@prisma/client");
|
|
4
|
-
const fs = require("fs");
|
|
5
|
-
const path = require("path");
|
|
6
|
-
const dotenv = require("dotenv");
|
|
7
|
-
dotenv.config();
|
|
8
|
-
async function createTenantSchemas() {
|
|
9
|
-
var _a;
|
|
10
|
-
const sourcePrisma = new client_1.PrismaClient({
|
|
11
|
-
datasources: {
|
|
12
|
-
db: {
|
|
13
|
-
url: process.env.SOURCE_DATABASE_URL,
|
|
14
|
-
},
|
|
15
|
-
},
|
|
16
|
-
});
|
|
17
|
-
const targetPrisma = new client_1.PrismaClient({
|
|
18
|
-
datasources: {
|
|
19
|
-
db: {
|
|
20
|
-
url: process.env.DATABASE_URL,
|
|
21
|
-
},
|
|
22
|
-
},
|
|
23
|
-
});
|
|
24
|
-
try {
|
|
25
|
-
console.log('Fetching API keys from source database to create tenant schemas...');
|
|
26
|
-
const apiKeys = await sourcePrisma.api_keys.findMany({
|
|
27
|
-
select: {
|
|
28
|
-
api_key: true,
|
|
29
|
-
providers: {
|
|
30
|
-
select: {
|
|
31
|
-
name: true,
|
|
32
|
-
},
|
|
33
|
-
},
|
|
34
|
-
},
|
|
35
|
-
});
|
|
36
|
-
console.log(`Found ${apiKeys.length} API keys to create schemas for.`);
|
|
37
|
-
const sqlCommands = [];
|
|
38
|
-
sqlCommands.push('CREATE SCHEMA IF NOT EXISTS public;');
|
|
39
|
-
for (const apiKey of apiKeys) {
|
|
40
|
-
const schemaName = apiKey.api_key;
|
|
41
|
-
const providerName = ((_a = apiKey.providers) === null || _a === void 0 ? void 0 : _a.name) || 'unknown';
|
|
42
|
-
console.log(`Creating schema for ${providerName} with key ${schemaName}`);
|
|
43
|
-
sqlCommands.push(`CREATE SCHEMA IF NOT EXISTS "${schemaName}";`);
|
|
44
|
-
try {
|
|
45
|
-
const existingApiKey = await targetPrisma.api_keys.findUnique({
|
|
46
|
-
where: { api_key: schemaName },
|
|
47
|
-
});
|
|
48
|
-
if (!existingApiKey) {
|
|
49
|
-
console.log(`Creating API key record in target database for ${schemaName}`);
|
|
50
|
-
const sourceApiKeyFull = await sourcePrisma.api_keys.findUnique({
|
|
51
|
-
where: { api_key: schemaName },
|
|
52
|
-
include: {
|
|
53
|
-
providers: true,
|
|
54
|
-
users: true,
|
|
55
|
-
},
|
|
56
|
-
});
|
|
57
|
-
if (sourceApiKeyFull) {
|
|
58
|
-
let providerId = null;
|
|
59
|
-
if (sourceApiKeyFull.provider_id) {
|
|
60
|
-
const existingProvider = await targetPrisma.providers.findUnique({
|
|
61
|
-
where: { provider_id: sourceApiKeyFull.provider_id },
|
|
62
|
-
});
|
|
63
|
-
if (!existingProvider && sourceApiKeyFull.providers) {
|
|
64
|
-
const newProvider = await targetPrisma.providers.create({
|
|
65
|
-
data: {
|
|
66
|
-
provider_id: sourceApiKeyFull.providers.provider_id,
|
|
67
|
-
name: sourceApiKeyFull.providers.name,
|
|
68
|
-
api_key: sourceApiKeyFull.providers.api_key,
|
|
69
|
-
country_id: sourceApiKeyFull.providers.country_id,
|
|
70
|
-
contact_email: sourceApiKeyFull.providers.contact_email,
|
|
71
|
-
is_active: sourceApiKeyFull.providers.is_active,
|
|
72
|
-
agreement: sourceApiKeyFull.providers.agreement,
|
|
73
|
-
image: sourceApiKeyFull.providers.image,
|
|
74
|
-
},
|
|
75
|
-
});
|
|
76
|
-
providerId = newProvider.provider_id;
|
|
77
|
-
}
|
|
78
|
-
else if (existingProvider) {
|
|
79
|
-
providerId = existingProvider.provider_id;
|
|
80
|
-
}
|
|
81
|
-
}
|
|
82
|
-
await targetPrisma.api_keys.create({
|
|
83
|
-
data: {
|
|
84
|
-
api_key: sourceApiKeyFull.api_key,
|
|
85
|
-
name: sourceApiKeyFull.name,
|
|
86
|
-
is_active: sourceApiKeyFull.is_active,
|
|
87
|
-
user_id: sourceApiKeyFull.user_id,
|
|
88
|
-
provider_id: providerId,
|
|
89
|
-
},
|
|
90
|
-
});
|
|
91
|
-
}
|
|
92
|
-
}
|
|
93
|
-
}
|
|
94
|
-
catch (error) {
|
|
95
|
-
console.error(`Error creating API key in target database for ${schemaName}:`, error);
|
|
96
|
-
}
|
|
97
|
-
}
|
|
98
|
-
const migrationsDir = path.join(__dirname, '../../../prisma/migrations');
|
|
99
|
-
if (!fs.existsSync(migrationsDir)) {
|
|
100
|
-
console.log(`Creating migrations directory: ${migrationsDir}`);
|
|
101
|
-
fs.mkdirSync(migrationsDir, { recursive: true });
|
|
102
|
-
}
|
|
103
|
-
const sqlFilePath = path.join(migrationsDir, 'tenant-schemas.sql');
|
|
104
|
-
fs.writeFileSync(sqlFilePath, sqlCommands.join('\n'));
|
|
105
|
-
console.log(`SQL commands written to ${path.resolve(sqlFilePath)}`);
|
|
106
|
-
console.log('Run this SQL file against your database to create the schemas.');
|
|
107
|
-
}
|
|
108
|
-
catch (error) {
|
|
109
|
-
console.error('Error creating tenant schemas:', error);
|
|
110
|
-
}
|
|
111
|
-
finally {
|
|
112
|
-
await sourcePrisma.$disconnect();
|
|
113
|
-
await targetPrisma.$disconnect();
|
|
114
|
-
}
|
|
115
|
-
}
|
|
116
|
-
createTenantSchemas().catch(console.error);
|
|
117
|
-
//# sourceMappingURL=create-tenant-schemas.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"create-tenant-schemas.js","sourceRoot":"","sources":["../../src/scripts/create-tenant-schemas.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
import { SchemaUtils } from "./schema-utils";
|
|
2
|
-
import { DataTransformer } from "./data-transformer";
|
|
3
|
-
import { ColumnSchema, DatabaseConnections, MigrationOptions, TableConfig } from "./types";
|
|
4
|
-
export declare class BatchMigrator {
|
|
5
|
-
private readonly schemaUtils;
|
|
6
|
-
private readonly dataTransformer;
|
|
7
|
-
private readonly connections;
|
|
8
|
-
private readonly options;
|
|
9
|
-
private readonly providerId?;
|
|
10
|
-
private readonly logger;
|
|
11
|
-
private readonly typecastManager;
|
|
12
|
-
constructor(schemaUtils: SchemaUtils, dataTransformer: DataTransformer, connections: DatabaseConnections, options: MigrationOptions, providerId?: string | null);
|
|
13
|
-
validateSchema(sourceColumns: ColumnSchema[], targetColumns: ColumnSchema[]): Promise<void>;
|
|
14
|
-
migrateEntityDataInBatches(sourceSchema: string, targetSchema: string, tableConfig: TableConfig, tenantId: string): Promise<void>;
|
|
15
|
-
private fetchBatch;
|
|
16
|
-
private buildWhereClause;
|
|
17
|
-
private processBatchWithTransaction;
|
|
18
|
-
private transformRecord;
|
|
19
|
-
private insertRecord;
|
|
20
|
-
}
|
|
@@ -1,134 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.BatchMigrator = void 0;
|
|
4
|
-
const common_1 = require("@nestjs/common");
|
|
5
|
-
const typecast_manager_1 = require("./typecast-manager");
|
|
6
|
-
const BATCH_SIZE = 100;
|
|
7
|
-
const MAX_RETRIES = 3;
|
|
8
|
-
const RETRY_BASE_DELAY = 1000;
|
|
9
|
-
class BatchMigrator {
|
|
10
|
-
constructor(schemaUtils, dataTransformer, connections, options, providerId) {
|
|
11
|
-
this.schemaUtils = schemaUtils;
|
|
12
|
-
this.dataTransformer = dataTransformer;
|
|
13
|
-
this.connections = connections;
|
|
14
|
-
this.options = options;
|
|
15
|
-
this.providerId = providerId;
|
|
16
|
-
this.logger = new common_1.Logger("BatchMigrator");
|
|
17
|
-
this.typecastManager = new typecast_manager_1.TypecastManager();
|
|
18
|
-
}
|
|
19
|
-
async validateSchema(sourceColumns, targetColumns) {
|
|
20
|
-
for (const targetColumn of targetColumns) {
|
|
21
|
-
const sourceColumn = sourceColumns.find((col) => col.column_name === targetColumn.column_name);
|
|
22
|
-
if (!sourceColumn) {
|
|
23
|
-
if (targetColumn.is_nullable === "NO") {
|
|
24
|
-
throw new Error(`Required column ${targetColumn.column_name} not found in source schema`);
|
|
25
|
-
}
|
|
26
|
-
this.logger.warn(`Column ${targetColumn.column_name} not found in source schema but is nullable`);
|
|
27
|
-
continue;
|
|
28
|
-
}
|
|
29
|
-
if (!this.typecastManager.areTypesCompatible(sourceColumn.data_type, targetColumn.data_type)) {
|
|
30
|
-
throw new Error(`Incompatible data types for column ${targetColumn.column_name}: ` +
|
|
31
|
-
`source ${sourceColumn.data_type} -> target ${targetColumn.data_type}`);
|
|
32
|
-
}
|
|
33
|
-
}
|
|
34
|
-
}
|
|
35
|
-
async migrateEntityDataInBatches(sourceSchema, targetSchema, tableConfig, tenantId) {
|
|
36
|
-
const sourceColumns = await this.schemaUtils.getTableColumns(sourceSchema, tableConfig.sourceTable);
|
|
37
|
-
const targetColumns = await this.schemaUtils.getTableColumns(targetSchema, tableConfig.targetTable);
|
|
38
|
-
await this.validateSchema(sourceColumns, targetColumns);
|
|
39
|
-
let offset = 0;
|
|
40
|
-
let hasMoreRecords = true;
|
|
41
|
-
let retryCount = 0;
|
|
42
|
-
while (hasMoreRecords) {
|
|
43
|
-
try {
|
|
44
|
-
const records = await this.fetchBatch(sourceSchema, tableConfig, offset, BATCH_SIZE);
|
|
45
|
-
if (records.length === 0) {
|
|
46
|
-
hasMoreRecords = false;
|
|
47
|
-
continue;
|
|
48
|
-
}
|
|
49
|
-
await this.processBatchWithTransaction(records, targetSchema, tableConfig, sourceColumns, targetColumns, tenantId);
|
|
50
|
-
offset += BATCH_SIZE;
|
|
51
|
-
retryCount = 0;
|
|
52
|
-
}
|
|
53
|
-
catch (error) {
|
|
54
|
-
if (retryCount < MAX_RETRIES) {
|
|
55
|
-
retryCount++;
|
|
56
|
-
const delay = RETRY_BASE_DELAY * Math.pow(2, retryCount - 1);
|
|
57
|
-
this.logger.warn(`Error processing batch, retrying in ${delay}ms (attempt ${retryCount}/${MAX_RETRIES}): ${error.message}`);
|
|
58
|
-
await new Promise((resolve) => setTimeout(resolve, delay));
|
|
59
|
-
}
|
|
60
|
-
else {
|
|
61
|
-
throw new Error(`Failed to process batch after ${MAX_RETRIES} retries: ${error.message}`);
|
|
62
|
-
}
|
|
63
|
-
}
|
|
64
|
-
}
|
|
65
|
-
}
|
|
66
|
-
async fetchBatch(sourceSchema, tableConfig, offset, limit) {
|
|
67
|
-
const query = `
|
|
68
|
-
SELECT *
|
|
69
|
-
FROM "${sourceSchema}"."${tableConfig.sourceTable}"
|
|
70
|
-
${this.buildWhereClause(tableConfig)}
|
|
71
|
-
ORDER BY "${tableConfig.idField}"
|
|
72
|
-
LIMIT ${limit}
|
|
73
|
-
OFFSET ${offset}
|
|
74
|
-
`;
|
|
75
|
-
const result = await this.connections.sourcePool.query(query);
|
|
76
|
-
return result.rows;
|
|
77
|
-
}
|
|
78
|
-
buildWhereClause(tableConfig) {
|
|
79
|
-
const conditions = [];
|
|
80
|
-
if (this.providerId) {
|
|
81
|
-
conditions.push(`"${tableConfig.providerLink}" = '${this.providerId}'`);
|
|
82
|
-
}
|
|
83
|
-
if (tableConfig.filterColumn) {
|
|
84
|
-
conditions.push(`"${tableConfig.filterColumn}" IS NOT NULL`);
|
|
85
|
-
}
|
|
86
|
-
return conditions.length > 0 ? `WHERE ${conditions.join(" AND ")}` : "";
|
|
87
|
-
}
|
|
88
|
-
async processBatchWithTransaction(records, targetSchema, tableConfig, sourceColumns, targetColumns, tenantId) {
|
|
89
|
-
const client = await this.connections.targetPool.connect();
|
|
90
|
-
try {
|
|
91
|
-
await client.query("BEGIN");
|
|
92
|
-
for (const record of records) {
|
|
93
|
-
const transformedRecord = await this.transformRecord(record, sourceColumns, targetColumns, tenantId);
|
|
94
|
-
await this.insertRecord(client, targetSchema, tableConfig.targetTable, transformedRecord);
|
|
95
|
-
}
|
|
96
|
-
await client.query("COMMIT");
|
|
97
|
-
}
|
|
98
|
-
catch (error) {
|
|
99
|
-
await client.query("ROLLBACK");
|
|
100
|
-
throw error;
|
|
101
|
-
}
|
|
102
|
-
finally {
|
|
103
|
-
client.release();
|
|
104
|
-
}
|
|
105
|
-
}
|
|
106
|
-
async transformRecord(record, sourceColumns, targetColumns, tenantId) {
|
|
107
|
-
const transformedRecord = {};
|
|
108
|
-
for (const targetColumn of targetColumns) {
|
|
109
|
-
const sourceColumn = sourceColumns.find((col) => col.column_name === targetColumn.column_name);
|
|
110
|
-
if (!sourceColumn) {
|
|
111
|
-
transformedRecord[targetColumn.column_name] = null;
|
|
112
|
-
continue;
|
|
113
|
-
}
|
|
114
|
-
const value = record[targetColumn.column_name];
|
|
115
|
-
transformedRecord[targetColumn.column_name] =
|
|
116
|
-
await this.dataTransformer.transformColumnValue(value, targetColumn.column_name, Object.assign(Object.assign({}, targetColumn), { source_type: sourceColumn.data_type }), tenantId);
|
|
117
|
-
}
|
|
118
|
-
return transformedRecord;
|
|
119
|
-
}
|
|
120
|
-
async insertRecord(client, schema, table, record) {
|
|
121
|
-
const columns = Object.keys(record);
|
|
122
|
-
const values = Object.values(record);
|
|
123
|
-
const placeholders = values.map((_, i) => `$${i + 1}`).join(", ");
|
|
124
|
-
const query = `
|
|
125
|
-
INSERT INTO "${schema}"."${table}"
|
|
126
|
-
(${columns.map((col) => `"${col}"`).join(", ")})
|
|
127
|
-
VALUES (${placeholders})
|
|
128
|
-
ON CONFLICT DO NOTHING
|
|
129
|
-
`;
|
|
130
|
-
await client.query(query, values);
|
|
131
|
-
}
|
|
132
|
-
}
|
|
133
|
-
exports.BatchMigrator = BatchMigrator;
|
|
134
|
-
//# sourceMappingURL=batch-migrator.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"batch-migrator.js","sourceRoot":"","sources":["../../../src/scripts/data-migration/batch-migrator.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
import { ColumnSchema, EnumCastValue } from "./types";
|
|
2
|
-
import { SchemaUtils } from "./schema-utils";
|
|
3
|
-
import { DatabaseConnections } from "./types";
|
|
4
|
-
export declare class DataTransformer {
|
|
5
|
-
private readonly logger;
|
|
6
|
-
private readonly schemaUtils;
|
|
7
|
-
private readonly sourceConnection;
|
|
8
|
-
private connections;
|
|
9
|
-
private migrationConfig;
|
|
10
|
-
private options;
|
|
11
|
-
private foreignKeyManager;
|
|
12
|
-
private readonly typecastManager;
|
|
13
|
-
constructor(schemaUtils: SchemaUtils, sourceConnection: any, connections: DatabaseConnections);
|
|
14
|
-
validateEnumValue(tableName: string, columnName: string, value: string | null, isNullable?: boolean): Promise<string | null>;
|
|
15
|
-
private getEnumTypeName;
|
|
16
|
-
transformToNumeric(value: any): number | null;
|
|
17
|
-
private getDefaultEnumValue;
|
|
18
|
-
prepareEnumValue(tenantId: string, enumType: string, value: string): Promise<EnumCastValue | null>;
|
|
19
|
-
transformColumnValue(value: any, columnName: string, targetColumn: ColumnSchema & {
|
|
20
|
-
source_type?: string;
|
|
21
|
-
}, tenantId: string): Promise<any>;
|
|
22
|
-
private getDefaultValue;
|
|
23
|
-
private extractEnumValueFromObject;
|
|
24
|
-
private handleEnumType;
|
|
25
|
-
transformRecord(record: any, sourceSchema: ColumnSchema[], targetSchema: ColumnSchema[], tenantId: string): Promise<any>;
|
|
26
|
-
}
|