@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
package/README.md
ADDED
|
@@ -0,0 +1,220 @@
|
|
|
1
|
+
# @tupay/prisma-client
|
|
2
|
+
|
|
3
|
+
Cliente Prisma compartido para los microservicios de Tupay. Este paquete proporciona una capa de abstracción sobre Prisma ORM con soporte para multi-tenancy y utilidades de migración de datos.
|
|
4
|
+
|
|
5
|
+
## Instalación
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
npm install @tupay/prisma-client
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
## Características
|
|
12
|
+
|
|
13
|
+
- **Cliente Prisma Singleton**: Implementación eficiente del cliente Prisma como singleton
|
|
14
|
+
- **Soporte Multi-tenant**: Conexión a diferentes esquemas de base de datos para diferentes inquilinos
|
|
15
|
+
- **Integración con NestJS**: Módulo global para aplicaciones NestJS
|
|
16
|
+
- **Utilidades de Migración**: Scripts para migración de datos y esquemas
|
|
17
|
+
- **Herramientas de Gestión de BD**: Scripts para crear, eliminar y restablecer bases de datos
|
|
18
|
+
|
|
19
|
+
## Diagramas
|
|
20
|
+
|
|
21
|
+
### Arquitectura Multi-tenant
|
|
22
|
+
|
|
23
|
+
```mermaid
|
|
24
|
+
graph TD
|
|
25
|
+
A[Aplicación] --> B[PrismaFactoryService]
|
|
26
|
+
B --> C[Cliente Prisma - Tenant 1]
|
|
27
|
+
B --> D[Cliente Prisma - Tenant 2]
|
|
28
|
+
B --> E[Cliente Prisma - Tenant N]
|
|
29
|
+
C --> F[(Base de Datos - Schema Tenant 1)]
|
|
30
|
+
D --> F
|
|
31
|
+
E --> F
|
|
32
|
+
B --> G[Cliente Prisma - Public]
|
|
33
|
+
G --> F
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
### Flujo de Migración de Datos
|
|
37
|
+
|
|
38
|
+
```mermaid
|
|
39
|
+
sequenceDiagram
|
|
40
|
+
participant S as Base de Datos Origen
|
|
41
|
+
participant M as Script de Migración
|
|
42
|
+
participant T as Base de Datos Destino
|
|
43
|
+
|
|
44
|
+
M->>S: Consulta datos de origen
|
|
45
|
+
S-->>M: Retorna datos
|
|
46
|
+
M->>M: Procesa y transforma datos
|
|
47
|
+
M->>T: Migra datos a destino
|
|
48
|
+
T-->>M: Confirma migración
|
|
49
|
+
|
|
50
|
+
Note over M: Ordenamiento por dependencias
|
|
51
|
+
Note over M: Manejo de tipos de datos
|
|
52
|
+
Note over M: Migración por fases
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
### Estructura del Proyecto
|
|
56
|
+
|
|
57
|
+
```mermaid
|
|
58
|
+
graph LR
|
|
59
|
+
A[prisma-client] --> B[src]
|
|
60
|
+
A --> C[prisma]
|
|
61
|
+
B --> D[scripts]
|
|
62
|
+
B --> E[index.ts]
|
|
63
|
+
B --> F[prisma.module.ts]
|
|
64
|
+
B --> G[prisma.service.ts]
|
|
65
|
+
B --> H[prisma-factory.service.ts]
|
|
66
|
+
D --> I[data-migration]
|
|
67
|
+
D --> J[reset-database.ts]
|
|
68
|
+
D --> K[schema-sync.ts]
|
|
69
|
+
D --> L[create-tenant-schemas.ts]
|
|
70
|
+
I --> M[dependency-manager.ts]
|
|
71
|
+
I --> N[schema-utils.ts]
|
|
72
|
+
I --> O[migration-phases.ts]
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
## Uso Básico
|
|
76
|
+
|
|
77
|
+
### En aplicaciones NestJS
|
|
78
|
+
|
|
79
|
+
```typescript
|
|
80
|
+
import { Module } from "@nestjs/common";
|
|
81
|
+
import { PrismaModule } from "@tupay/prisma-client";
|
|
82
|
+
|
|
83
|
+
@Module({
|
|
84
|
+
imports: [PrismaModule],
|
|
85
|
+
})
|
|
86
|
+
export class AppModule {}
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
Luego, inyecta el servicio donde lo necesites:
|
|
90
|
+
|
|
91
|
+
```typescript
|
|
92
|
+
import { Injectable } from "@nestjs/common";
|
|
93
|
+
import { PrismaService, PrismaFactoryService } from "@tupay/prisma-client";
|
|
94
|
+
|
|
95
|
+
@Injectable()
|
|
96
|
+
export class MyService {
|
|
97
|
+
constructor(
|
|
98
|
+
private prismaService: PrismaService,
|
|
99
|
+
private prismaFactoryService: PrismaFactoryService
|
|
100
|
+
) {}
|
|
101
|
+
|
|
102
|
+
// Usar el cliente principal (schema public)
|
|
103
|
+
async findAllUsers() {
|
|
104
|
+
return this.prismaService.client.users.findMany();
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
// Usar un cliente específico para un tenant
|
|
108
|
+
async findTenantUsers(tenantId: string) {
|
|
109
|
+
const tenantClient = this.prismaFactoryService.getClient(tenantId);
|
|
110
|
+
return tenantClient.users.findMany();
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
### En aplicaciones no-NestJS
|
|
116
|
+
|
|
117
|
+
```typescript
|
|
118
|
+
import { prisma } from "@tupay/prisma-client";
|
|
119
|
+
|
|
120
|
+
async function main() {
|
|
121
|
+
const users = await prisma.users.findMany();
|
|
122
|
+
console.log(users);
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
main()
|
|
126
|
+
.catch(console.error)
|
|
127
|
+
.finally(() => prisma.$disconnect());
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
## Scripts de Utilidad
|
|
131
|
+
|
|
132
|
+
Este paquete incluye varios scripts útiles para la gestión de bases de datos:
|
|
133
|
+
|
|
134
|
+
### Migración de Datos
|
|
135
|
+
|
|
136
|
+
```bash
|
|
137
|
+
# Migrar datos entre bases de datos
|
|
138
|
+
npm run migrate:data
|
|
139
|
+
|
|
140
|
+
# Migrar datos forzando la operación
|
|
141
|
+
npm run migrate:data:force
|
|
142
|
+
|
|
143
|
+
# Migrar datos con confirmación automática
|
|
144
|
+
npm run migrate:data:yes
|
|
145
|
+
```
|
|
146
|
+
|
|
147
|
+
### Gestión de Esquemas
|
|
148
|
+
|
|
149
|
+
```bash
|
|
150
|
+
# Generar cliente Prisma
|
|
151
|
+
npm run generate
|
|
152
|
+
|
|
153
|
+
# Ejecutar migraciones de desarrollo
|
|
154
|
+
npm run migrate:dev
|
|
155
|
+
|
|
156
|
+
# Desplegar migraciones
|
|
157
|
+
npm run migrate:deploy
|
|
158
|
+
```
|
|
159
|
+
|
|
160
|
+
## Scripts Avanzados
|
|
161
|
+
|
|
162
|
+
El paquete también incluye scripts para casos de uso más avanzados:
|
|
163
|
+
|
|
164
|
+
### Creación de Esquemas para Tenants
|
|
165
|
+
|
|
166
|
+
```bash
|
|
167
|
+
# Compilar el proyecto
|
|
168
|
+
npm run build
|
|
169
|
+
|
|
170
|
+
# Ejecutar el script para crear esquemas de tenant
|
|
171
|
+
node dist/scripts/create-tenant-schemas.js
|
|
172
|
+
```
|
|
173
|
+
|
|
174
|
+
### Migración de Estructura de Esquemas
|
|
175
|
+
|
|
176
|
+
```bash
|
|
177
|
+
# Migrar la estructura de esquemas entre bases de datos
|
|
178
|
+
node dist/scripts/migrate-schema-structure.js
|
|
179
|
+
```
|
|
180
|
+
|
|
181
|
+
### Sincronización de Esquemas
|
|
182
|
+
|
|
183
|
+
```bash
|
|
184
|
+
# Generar un script SQL para sincronizar esquemas
|
|
185
|
+
node dist/scripts/schema-sync.js
|
|
186
|
+
```
|
|
187
|
+
|
|
188
|
+
### Reseteo de Base de Datos
|
|
189
|
+
|
|
190
|
+
```bash
|
|
191
|
+
# Resetear la base de datos
|
|
192
|
+
node dist/scripts/reset-database.js
|
|
193
|
+
|
|
194
|
+
# Resetear y recrear la base de datos
|
|
195
|
+
node dist/scripts/reset-database.js --recreate
|
|
196
|
+
```
|
|
197
|
+
|
|
198
|
+
## Variables de Entorno
|
|
199
|
+
|
|
200
|
+
El paquete requiere las siguientes variables de entorno:
|
|
201
|
+
|
|
202
|
+
- `DATABASE_URL`: URL de conexión a la base de datos principal
|
|
203
|
+
- `SOURCE_DATABASE_URL`: URL de conexión a la base de datos de origen (para migraciones)
|
|
204
|
+
|
|
205
|
+
## Desarrollo
|
|
206
|
+
|
|
207
|
+
```bash
|
|
208
|
+
# Instalar dependencias
|
|
209
|
+
npm install
|
|
210
|
+
|
|
211
|
+
# Compilar el proyecto
|
|
212
|
+
npm run build
|
|
213
|
+
|
|
214
|
+
# Generar cliente Prisma
|
|
215
|
+
npm run generate
|
|
216
|
+
```
|
|
217
|
+
|
|
218
|
+
## Licencia
|
|
219
|
+
|
|
220
|
+
ISC
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { PrismaClient } from "@prisma/client";
|
|
2
|
+
import { PrismaModule } from "./prisma.module";
|
|
3
|
+
import { PrismaService } from "./prisma.service";
|
|
4
|
+
import { PrismaFactoryService } from "./prisma-factory.service";
|
|
5
|
+
export declare const prisma: PrismaClient<import(".prisma/client").Prisma.PrismaClientOptions, never, import("@prisma/client/runtime/library").DefaultArgs>;
|
|
6
|
+
export { PrismaModule, PrismaService, PrismaFactoryService };
|
|
7
|
+
export * from "@prisma/client";
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
var _a;
|
|
17
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
18
|
+
exports.PrismaFactoryService = exports.PrismaService = exports.PrismaModule = exports.prisma = void 0;
|
|
19
|
+
const client_1 = require("@prisma/client");
|
|
20
|
+
const prisma_module_1 = require("./prisma.module");
|
|
21
|
+
Object.defineProperty(exports, "PrismaModule", { enumerable: true, get: function () { return prisma_module_1.PrismaModule; } });
|
|
22
|
+
const prisma_service_1 = require("./prisma.service");
|
|
23
|
+
Object.defineProperty(exports, "PrismaService", { enumerable: true, get: function () { return prisma_service_1.PrismaService; } });
|
|
24
|
+
const prisma_factory_service_1 = require("./prisma-factory.service");
|
|
25
|
+
Object.defineProperty(exports, "PrismaFactoryService", { enumerable: true, get: function () { return prisma_factory_service_1.PrismaFactoryService; } });
|
|
26
|
+
const prismaClientSingleton = () => {
|
|
27
|
+
return new client_1.PrismaClient();
|
|
28
|
+
};
|
|
29
|
+
const globalForPrisma = globalThis;
|
|
30
|
+
exports.prisma = (_a = globalForPrisma.prisma) !== null && _a !== void 0 ? _a : prismaClientSingleton();
|
|
31
|
+
if (process.env.NODE_ENV !== "production")
|
|
32
|
+
globalForPrisma.prisma = exports.prisma;
|
|
33
|
+
__exportStar(require("@prisma/client"), exports);
|
|
34
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;AAAA,2CAA8C;AAC9C,mDAA+C;AAoBtC,6FApBA,4BAAY,OAoBA;AAnBrB,qDAAiD;AAmB1B,8FAnBd,8BAAa,OAmBc;AAlBpC,qEAAgE;AAkB1B,qGAlB7B,6CAAoB,OAkB6B;AAf1D,MAAM,qBAAqB,GAAG,GAAG,EAAE;IACjC,OAAO,IAAI,qBAAY,EAAE,CAAC;AAC5B,CAAC,CAAC;AAIF,MAAM,eAAe,GAAG,UAEvB,CAAC;AAEW,QAAA,MAAM,GAAG,MAAA,eAAe,CAAC,MAAM,mCAAI,qBAAqB,EAAE,CAAC;AAExE,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,YAAY;IAAE,eAAe,CAAC,MAAM,GAAG,cAAM,CAAC;AAI3E,iDAA+B"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { OnModuleDestroy } from '@nestjs/common';
|
|
2
|
+
import { PrismaClient } from '@prisma/client';
|
|
3
|
+
export declare class PrismaFactoryService implements OnModuleDestroy {
|
|
4
|
+
private clients;
|
|
5
|
+
private readonly logger;
|
|
6
|
+
getClient(tenantId: string): PrismaClient;
|
|
7
|
+
getMasterClient(): PrismaClient;
|
|
8
|
+
onModuleDestroy(): Promise<void>;
|
|
9
|
+
}
|
|
@@ -0,0 +1,47 @@
|
|
|
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
|
+
var PrismaFactoryService_1;
|
|
9
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
|
+
exports.PrismaFactoryService = void 0;
|
|
11
|
+
const common_1 = require("@nestjs/common");
|
|
12
|
+
const client_1 = require("@prisma/client");
|
|
13
|
+
let PrismaFactoryService = PrismaFactoryService_1 = class PrismaFactoryService {
|
|
14
|
+
constructor() {
|
|
15
|
+
this.clients = new Map();
|
|
16
|
+
this.logger = new common_1.Logger(PrismaFactoryService_1.name);
|
|
17
|
+
}
|
|
18
|
+
getClient(tenantId) {
|
|
19
|
+
if (!this.clients.has(tenantId)) {
|
|
20
|
+
this.logger.log(`Creating new Prisma client for tenant: ${tenantId}`);
|
|
21
|
+
const client = new client_1.PrismaClient({
|
|
22
|
+
datasources: {
|
|
23
|
+
db: {
|
|
24
|
+
url: `${process.env.DATABASE_URL}?schema=${tenantId}`,
|
|
25
|
+
},
|
|
26
|
+
},
|
|
27
|
+
});
|
|
28
|
+
this.clients.set(tenantId, client);
|
|
29
|
+
}
|
|
30
|
+
return this.clients.get(tenantId);
|
|
31
|
+
}
|
|
32
|
+
getMasterClient() {
|
|
33
|
+
return this.getClient('public');
|
|
34
|
+
}
|
|
35
|
+
async onModuleDestroy() {
|
|
36
|
+
this.logger.log('Disconnecting all Prisma clients');
|
|
37
|
+
for (const [tenantId, client] of this.clients.entries()) {
|
|
38
|
+
this.logger.log(`Disconnecting client for tenant: ${tenantId}`);
|
|
39
|
+
await client.$disconnect();
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
};
|
|
43
|
+
exports.PrismaFactoryService = PrismaFactoryService;
|
|
44
|
+
exports.PrismaFactoryService = PrismaFactoryService = PrismaFactoryService_1 = __decorate([
|
|
45
|
+
(0, common_1.Injectable)()
|
|
46
|
+
], PrismaFactoryService);
|
|
47
|
+
//# sourceMappingURL=prisma-factory.service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prisma-factory.service.js","sourceRoot":"","sources":["../src/prisma-factory.service.ts"],"names":[],"mappings":";;;;;;;;;;AAAA,2CAAqE;AACrE,2CAA8C;AAGvC,IAAM,oBAAoB,4BAA1B,MAAM,oBAAoB;IAA1B;QACG,YAAO,GAA8B,IAAI,GAAG,EAAE,CAAC;QACtC,WAAM,GAAG,IAAI,eAAM,CAAC,sBAAoB,CAAC,IAAI,CAAC,CAAC;IAkClE,CAAC;IAhCC,SAAS,CAAC,QAAgB;QACxB,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;YAChC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,0CAA0C,QAAQ,EAAE,CAAC,CAAC;YAGtE,MAAM,MAAM,GAAG,IAAI,qBAAY,CAAC;gBAC9B,WAAW,EAAE;oBACX,EAAE,EAAE;wBACF,GAAG,EAAE,GAAG,OAAO,CAAC,GAAG,CAAC,YAAY,WAAW,QAAQ,EAAE;qBACtD;iBACF;aACF,CAAC,CAAC;YAEH,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QACrC,CAAC;QAED,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IACpC,CAAC;IAGD,eAAe;QACb,OAAO,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;IAClC,CAAC;IAED,KAAK,CAAC,eAAe;QACnB,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,kCAAkC,CAAC,CAAC;QAEpD,KAAK,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC;YACxD,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,oCAAoC,QAAQ,EAAE,CAAC,CAAC;YAChE,MAAM,MAAM,CAAC,WAAW,EAAE,CAAC;QAC7B,CAAC;IACH,CAAC;CACF,CAAA;AApCY,oDAAoB;+BAApB,oBAAoB;IADhC,IAAA,mBAAU,GAAE;GACA,oBAAoB,CAoChC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
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
|
|
@@ -0,0 +1 @@
|
|
|
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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
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, never, import("@prisma/client/runtime/library").DefaultArgs>;
|
|
6
|
+
}
|
|
@@ -0,0 +1,27 @@
|
|
|
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
|
|
@@ -0,0 +1 @@
|
|
|
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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,117 @@
|
|
|
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
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"create-tenant-schemas.js","sourceRoot":"","sources":["../../src/scripts/create-tenant-schemas.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { PrismaClient } from "@prisma/client";
|
|
2
|
+
import { EntityType, ColumnSchema } from "./types";
|
|
3
|
+
import { DataTransformer } from "./data-transformer";
|
|
4
|
+
import { SchemaUtils } from "./schema-utils";
|
|
5
|
+
import { DatabaseConnections } from "./types";
|
|
6
|
+
import { DependencyResolver } from "./dependency-resolver";
|
|
7
|
+
export declare class BatchMigrator {
|
|
8
|
+
private readonly dataTransformer;
|
|
9
|
+
private readonly schemaUtils;
|
|
10
|
+
private readonly connections;
|
|
11
|
+
private readonly dependencyResolver;
|
|
12
|
+
private readonly schemaCache;
|
|
13
|
+
private readonly targetSchemaCache;
|
|
14
|
+
private readonly logger;
|
|
15
|
+
private readonly BATCH_SIZE;
|
|
16
|
+
constructor(dataTransformer: DataTransformer, schemaUtils: SchemaUtils, connections: DatabaseConnections, dependencyResolver: DependencyResolver, schemaCache?: Record<string, ColumnSchema[]>, targetSchemaCache?: Record<string, ColumnSchema[]>);
|
|
17
|
+
private checkTableHasData;
|
|
18
|
+
migrateEntityDataInBatches(prisma: PrismaClient, entity: EntityType, providerId: number | null, targetSchema: string): Promise<void>;
|
|
19
|
+
private ensureSchemaExists;
|
|
20
|
+
private getSourceSchema;
|
|
21
|
+
private getTargetSchema;
|
|
22
|
+
private executeSourceQuery;
|
|
23
|
+
private getPrimaryKeyField;
|
|
24
|
+
private processRecords;
|
|
25
|
+
}
|