@javalabs/prisma-client 1.0.6 → 1.0.9
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/dist/scripts/database-initializer.d.ts +5 -0
- package/dist/scripts/database-initializer.js +45 -0
- package/dist/scripts/database-initializer.js.map +1 -0
- package/dist/scripts/post-migration-validator.d.ts +18 -5
- package/dist/scripts/post-migration-validator.js +61 -39
- package/dist/scripts/post-migration-validator.js.map +1 -1
- package/dist/scripts/run-migration.js +42 -21
- package/dist/scripts/run-migration.js.map +1 -1
- package/dist/scripts/sequence-synchronizer.d.ts +8 -0
- package/dist/scripts/sequence-synchronizer.js +88 -0
- package/dist/scripts/sequence-synchronizer.js.map +1 -0
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +5 -1
- package/prisma/migrations/{20250422001248_add_bank_account_id → 0_init}/migration.sql +269 -47
- package/prisma/migrations/20250505171324_add_bank_owner_name_in_manual_transfer/migration.sql +2 -0
- package/prisma/migrations/20250505173850_add_method_name_in_manual_transfer/migration.sql +2 -0
- package/prisma/migrations/20250505182032_update_receipt_image_url/migration.sql +2 -0
- package/prisma/migrations/migration_lock.toml +2 -2
- package/prisma/schema.prisma +214 -77
- package/src/scripts/database-initializer.ts +49 -0
- package/src/scripts/run-migration.ts +54 -24
- package/src/scripts/sequence-synchronizer.ts +127 -0
- package/prisma/migrations/20250422001957_add_bank_account_id_relations/migration.sql +0 -14
- package/src/scripts/dumps/source_dump_20250413_112626.sql +0 -1527
- package/src/scripts/dumps/source_dump_20250428_145606.sql +0 -323
package/prisma/schema.prisma
CHANGED
|
@@ -16,6 +16,10 @@ model api_keys {
|
|
|
16
16
|
provider_id Int?
|
|
17
17
|
providers providers? @relation(fields: [provider_id], references: [provider_id])
|
|
18
18
|
users users @relation(fields: [user_id], references: [user_id], onDelete: NoAction)
|
|
19
|
+
|
|
20
|
+
@@index([id], map: "idx_api_keys_id")
|
|
21
|
+
@@index([provider_id], map: "idx_api_keys_provider_id")
|
|
22
|
+
@@index([user_id], map: "idx_api_keys_user_id")
|
|
19
23
|
}
|
|
20
24
|
|
|
21
25
|
model api_request_logs {
|
|
@@ -27,6 +31,9 @@ model api_request_logs {
|
|
|
27
31
|
request_method String? @db.VarChar(255)
|
|
28
32
|
status_code Int?
|
|
29
33
|
timestamp DateTime? @db.Timestamptz(6)
|
|
34
|
+
|
|
35
|
+
@@index([id], map: "idx_api_request_logs_id")
|
|
36
|
+
@@index([status_code], map: "idx_api_request_logs_status_code")
|
|
30
37
|
}
|
|
31
38
|
|
|
32
39
|
model balances {
|
|
@@ -37,6 +44,9 @@ model balances {
|
|
|
37
44
|
createdAt DateTime @db.Timestamptz(6)
|
|
38
45
|
updatedAt DateTime @db.Timestamptz(6)
|
|
39
46
|
users users @relation(fields: [user_id], references: [user_id], onDelete: NoAction)
|
|
47
|
+
|
|
48
|
+
@@index([id], map: "idx_balances_id")
|
|
49
|
+
@@index([user_id], map: "idx_balances_user_id")
|
|
40
50
|
}
|
|
41
51
|
|
|
42
52
|
model banks {
|
|
@@ -46,6 +56,10 @@ model banks {
|
|
|
46
56
|
country_code String? @db.VarChar(100)
|
|
47
57
|
createdAt DateTime @db.Timestamptz(6)
|
|
48
58
|
updatedAt DateTime @db.Timestamptz(6)
|
|
59
|
+
|
|
60
|
+
@@index([code], map: "idx_banks_code")
|
|
61
|
+
@@index([country_code], map: "idx_banks_country_code")
|
|
62
|
+
@@index([id], map: "idx_banks_id")
|
|
49
63
|
}
|
|
50
64
|
|
|
51
65
|
model charges {
|
|
@@ -69,6 +83,13 @@ model charges {
|
|
|
69
83
|
buyer_phone_number String @db.VarChar(255)
|
|
70
84
|
transaction_state String? @db.VarChar(255)
|
|
71
85
|
created_at DateTime? @db.Timestamptz(6)
|
|
86
|
+
|
|
87
|
+
@@index([bank_code], map: "idx_charges_bank_code")
|
|
88
|
+
@@index([created_at], map: "idx_charges_created_at")
|
|
89
|
+
@@index([id], map: "idx_charges_id")
|
|
90
|
+
@@index([order_id], map: "idx_charges_order_id")
|
|
91
|
+
@@index([return_code], map: "idx_charges_return_code")
|
|
92
|
+
@@index([traceability_code], map: "idx_charges_traceability_code")
|
|
72
93
|
}
|
|
73
94
|
|
|
74
95
|
model countries {
|
|
@@ -79,9 +100,12 @@ model countries {
|
|
|
79
100
|
image String?
|
|
80
101
|
createdAt DateTime @db.Timestamptz(6)
|
|
81
102
|
updatedAt DateTime @db.Timestamptz(6)
|
|
103
|
+
manual_transfer_bank_acounts manual_transfer_bank_acounts[]
|
|
82
104
|
providers providers[]
|
|
83
105
|
users users[]
|
|
84
|
-
|
|
106
|
+
|
|
107
|
+
@@index([code], map: "idx_countries_code")
|
|
108
|
+
@@index([id], map: "idx_countries_id")
|
|
85
109
|
}
|
|
86
110
|
|
|
87
111
|
model credit_requests {
|
|
@@ -89,11 +113,15 @@ model credit_requests {
|
|
|
89
113
|
user_id Int?
|
|
90
114
|
invoice_id Int?
|
|
91
115
|
amount Decimal @db.Decimal(10, 2)
|
|
92
|
-
status enum_transaction_status @default(pending)
|
|
116
|
+
status enum_transaction_status @default(pending)
|
|
93
117
|
requested_at DateTime @db.Timestamptz(6)
|
|
94
118
|
processed_at DateTime? @db.Timestamptz(6)
|
|
95
119
|
invoices invoices? @relation(fields: [invoice_id], references: [id])
|
|
96
120
|
users users? @relation(fields: [user_id], references: [user_id])
|
|
121
|
+
|
|
122
|
+
@@index([id], map: "idx_credit_requests_id")
|
|
123
|
+
@@index([invoice_id], map: "idx_credit_requests_invoice_id")
|
|
124
|
+
@@index([user_id], map: "idx_credit_requests_user_id")
|
|
97
125
|
}
|
|
98
126
|
|
|
99
127
|
model customers {
|
|
@@ -106,6 +134,11 @@ model customers {
|
|
|
106
134
|
user_id Int
|
|
107
135
|
updatedAt DateTime @db.Timestamptz(6)
|
|
108
136
|
users users @relation(fields: [user_id], references: [user_id], onDelete: NoAction)
|
|
137
|
+
|
|
138
|
+
@@index([created_at], map: "idx_customers_created_at")
|
|
139
|
+
@@index([custom_id], map: "idx_customers_custom_id")
|
|
140
|
+
@@index([id], map: "idx_customers_id")
|
|
141
|
+
@@index([user_id], map: "idx_customers_user_id")
|
|
109
142
|
}
|
|
110
143
|
|
|
111
144
|
model daily_logs {
|
|
@@ -114,13 +147,16 @@ model daily_logs {
|
|
|
114
147
|
details String? @db.VarChar(255)
|
|
115
148
|
transaction_id Int?
|
|
116
149
|
transactions transactions? @relation(fields: [transaction_id], references: [id])
|
|
150
|
+
|
|
151
|
+
@@index([id], map: "idx_daily_logs_id")
|
|
152
|
+
@@index([transaction_id], map: "idx_daily_logs_transaction_id")
|
|
117
153
|
}
|
|
118
154
|
|
|
119
155
|
model global_user_transactions {
|
|
120
156
|
id Int @id @default(autoincrement())
|
|
121
|
-
transaction_type enum_transaction_type
|
|
157
|
+
transaction_type enum_transaction_type
|
|
122
158
|
amount Decimal @db.Decimal(10, 2)
|
|
123
|
-
status enum_transaction_status
|
|
159
|
+
status enum_transaction_status
|
|
124
160
|
executed_at DateTime? @db.Timestamptz(6)
|
|
125
161
|
user_id Int?
|
|
126
162
|
transaction_id Int?
|
|
@@ -128,6 +164,11 @@ model global_user_transactions {
|
|
|
128
164
|
providers providers? @relation(fields: [provider_id], references: [provider_id])
|
|
129
165
|
transactions transactions? @relation(fields: [transaction_id], references: [id])
|
|
130
166
|
users users? @relation(fields: [user_id], references: [user_id])
|
|
167
|
+
|
|
168
|
+
@@index([id], map: "idx_global_user_transactions_id")
|
|
169
|
+
@@index([provider_id], map: "idx_global_user_transactions_provider_id")
|
|
170
|
+
@@index([transaction_id], map: "idx_global_user_transactions_transaction_id")
|
|
171
|
+
@@index([user_id], map: "idx_global_user_transactions_user_id")
|
|
131
172
|
}
|
|
132
173
|
|
|
133
174
|
model invoices {
|
|
@@ -137,7 +178,7 @@ model invoices {
|
|
|
137
178
|
reference BigInt @unique
|
|
138
179
|
amount Decimal @db.Decimal(10, 2)
|
|
139
180
|
currency String @db.VarChar(255)
|
|
140
|
-
status enum_transaction_status @default(pending)
|
|
181
|
+
status enum_transaction_status @default(pending)
|
|
141
182
|
link_payment String? @db.VarChar(255)
|
|
142
183
|
due_date DateTime? @db.Timestamptz(6)
|
|
143
184
|
is_paid Boolean @default(false)
|
|
@@ -147,6 +188,55 @@ model invoices {
|
|
|
147
188
|
transactions transactions? @relation(fields: [transaction_id], references: [id])
|
|
148
189
|
|
|
149
190
|
@@unique([id, transaction_id], map: "invoices_id_transaction_id")
|
|
191
|
+
@@index([id], map: "idx_invoices_id")
|
|
192
|
+
@@index([transaction_id], map: "idx_invoices_transaction_id")
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
model manual_payments {
|
|
196
|
+
id Int @id @default(autoincrement())
|
|
197
|
+
user_id Int
|
|
198
|
+
amount Decimal @db.Decimal(10, 2)
|
|
199
|
+
currency String @db.VarChar(10)
|
|
200
|
+
bank_transaction_id String? @db.VarChar(255)
|
|
201
|
+
receipt_image_url String? @db.Text
|
|
202
|
+
notes String?
|
|
203
|
+
status enum_transaction_status @default(pending)
|
|
204
|
+
admin_notes String?
|
|
205
|
+
processed_by Int?
|
|
206
|
+
created_at DateTime @db.Timestamptz(6)
|
|
207
|
+
processed_at DateTime? @db.Timestamptz(6)
|
|
208
|
+
country_code String? @db.VarChar(10)
|
|
209
|
+
bank_account_id Int?
|
|
210
|
+
manual_transfer_bank_acounts manual_transfer_bank_acounts? @relation(fields: [bank_account_id], references: [id])
|
|
211
|
+
users_manual_payments_processed_byTousers users? @relation("manual_payments_processed_byTousers", fields: [processed_by], references: [user_id])
|
|
212
|
+
users_manual_payments_user_idTousers users @relation("manual_payments_user_idTousers", fields: [user_id], references: [user_id])
|
|
213
|
+
|
|
214
|
+
@@index([bank_account_id], map: "idx_manual_payments_bank_account_id")
|
|
215
|
+
@@index([bank_transaction_id], map: "idx_manual_payments_bank_transaction_id")
|
|
216
|
+
@@index([country_code], map: "idx_manual_payments_country_code")
|
|
217
|
+
@@index([created_at], map: "idx_manual_payments_created_at")
|
|
218
|
+
@@index([id], map: "idx_manual_payments_id")
|
|
219
|
+
@@index([processed_by], map: "idx_manual_payments_processed_by")
|
|
220
|
+
@@index([user_id], map: "idx_manual_payments_user_id")
|
|
221
|
+
}
|
|
222
|
+
|
|
223
|
+
model manual_transfer_bank_acounts {
|
|
224
|
+
id Int @id @default(autoincrement())
|
|
225
|
+
method_name String? @db.VarChar(255)
|
|
226
|
+
account_number String @db.VarChar(255)
|
|
227
|
+
account_type String @db.VarChar(255)
|
|
228
|
+
bank_name String @db.VarChar(255)
|
|
229
|
+
bank_owner_name String? @db.VarChar(255)
|
|
230
|
+
country_code String @db.VarChar(255)
|
|
231
|
+
created_at DateTime @db.Timestamptz(6)
|
|
232
|
+
updated_at DateTime @db.Timestamptz(6)
|
|
233
|
+
manual_payments manual_payments[]
|
|
234
|
+
countries countries @relation(fields: [country_code], references: [code])
|
|
235
|
+
|
|
236
|
+
@@index([country_code], map: "idx_manual_transfer_bank_acounts_country_code")
|
|
237
|
+
@@index([created_at], map: "idx_manual_transfer_bank_acounts_created_at")
|
|
238
|
+
@@index([id], map: "idx_manual_transfer_bank_acounts_id")
|
|
239
|
+
@@index([updated_at], map: "idx_manual_transfer_bank_acounts_updated_at")
|
|
150
240
|
}
|
|
151
241
|
|
|
152
242
|
model notifications {
|
|
@@ -158,16 +248,24 @@ model notifications {
|
|
|
158
248
|
transaction_id Int?
|
|
159
249
|
transactions transactions? @relation(fields: [transaction_id], references: [id])
|
|
160
250
|
users users? @relation(fields: [user_id], references: [user_id])
|
|
251
|
+
|
|
252
|
+
@@index([id], map: "idx_notifications_id")
|
|
253
|
+
@@index([transaction_id], map: "idx_notifications_transaction_id")
|
|
254
|
+
@@index([user_id], map: "idx_notifications_user_id")
|
|
161
255
|
}
|
|
162
256
|
|
|
163
257
|
model pending_references {
|
|
164
258
|
id Int @id @default(autoincrement())
|
|
165
|
-
status enum_transaction_status
|
|
259
|
+
status enum_transaction_status
|
|
166
260
|
reference_date DateTime? @db.Timestamptz(6)
|
|
167
261
|
user_id Int?
|
|
168
262
|
provider_id Int?
|
|
169
263
|
providers providers? @relation(fields: [provider_id], references: [provider_id])
|
|
170
264
|
users users? @relation(fields: [user_id], references: [user_id])
|
|
265
|
+
|
|
266
|
+
@@index([id], map: "idx_pending_references_id")
|
|
267
|
+
@@index([provider_id], map: "idx_pending_references_provider_id")
|
|
268
|
+
@@index([user_id], map: "idx_pending_references_user_id")
|
|
171
269
|
}
|
|
172
270
|
|
|
173
271
|
model providers {
|
|
@@ -184,6 +282,9 @@ model providers {
|
|
|
184
282
|
pending_references pending_references[]
|
|
185
283
|
countries countries @relation(fields: [country_id], references: [id], onDelete: Cascade)
|
|
186
284
|
transactions transactions[]
|
|
285
|
+
|
|
286
|
+
@@index([country_id], map: "idx_providers_country_id")
|
|
287
|
+
@@index([provider_id], map: "idx_providers_provider_id")
|
|
187
288
|
}
|
|
188
289
|
|
|
189
290
|
model toku {
|
|
@@ -198,7 +299,7 @@ model toku {
|
|
|
198
299
|
phone_number String @db.VarChar(50)
|
|
199
300
|
amount Decimal? @db.Decimal(10, 2)
|
|
200
301
|
currency String? @db.VarChar(255)
|
|
201
|
-
status enum_toku_status? @default(pending)
|
|
302
|
+
status enum_toku_status? @default(pending)
|
|
202
303
|
link_payment String? @db.VarChar(255)
|
|
203
304
|
due_date DateTime? @db.Timestamptz(6)
|
|
204
305
|
transaction_id Int? @unique
|
|
@@ -206,14 +307,21 @@ model toku {
|
|
|
206
307
|
transactions transactions? @relation(fields: [transaction_id], references: [id])
|
|
207
308
|
|
|
208
309
|
@@unique([id, transaction_id], map: "toku_id_transaction_id")
|
|
310
|
+
@@index([created_at], map: "idx_toku_created_at")
|
|
311
|
+
@@index([id], map: "idx_toku_id")
|
|
312
|
+
@@index([product_id], map: "idx_toku_product_id")
|
|
313
|
+
@@index([transaction_id], map: "idx_toku_transaction_id")
|
|
209
314
|
}
|
|
210
315
|
|
|
211
316
|
model transaction_updates {
|
|
212
317
|
id Int @id @default(autoincrement())
|
|
213
|
-
new_status enum_transaction_status
|
|
318
|
+
new_status enum_transaction_status
|
|
214
319
|
update_date DateTime? @db.Timestamptz(6)
|
|
215
320
|
transaction_id Int?
|
|
216
321
|
transactions transactions? @relation(fields: [transaction_id], references: [id])
|
|
322
|
+
|
|
323
|
+
@@index([id], map: "idx_transaction_updates_id")
|
|
324
|
+
@@index([transaction_id], map: "idx_transaction_updates_transaction_id")
|
|
217
325
|
}
|
|
218
326
|
|
|
219
327
|
model transactions {
|
|
@@ -221,21 +329,21 @@ model transactions {
|
|
|
221
329
|
reference BigInt @unique
|
|
222
330
|
currency String @db.VarChar(10)
|
|
223
331
|
amount Decimal @db.Decimal(10, 2)
|
|
224
|
-
transaction_type enum_transaction_type
|
|
332
|
+
transaction_type enum_transaction_type
|
|
225
333
|
user_name String @db.VarChar(50)
|
|
226
334
|
user_phone String @db.VarChar(20)
|
|
227
335
|
user_email String @db.VarChar(50)
|
|
228
336
|
user_bank String @db.VarChar(50)
|
|
229
|
-
user_type_account enum_account_type
|
|
337
|
+
user_type_account enum_account_type
|
|
230
338
|
user_num_account String @db.VarChar(20)
|
|
231
339
|
user_identification_number String @db.VarChar(255)
|
|
232
|
-
status enum_transaction_status
|
|
340
|
+
status enum_transaction_status
|
|
233
341
|
user_id Int?
|
|
234
342
|
provider_id Int?
|
|
235
343
|
createdAt DateTime @db.Timestamptz(6)
|
|
236
344
|
updatedAt DateTime @db.Timestamptz(6)
|
|
237
345
|
bank_name String? @db.VarChar(100)
|
|
238
|
-
account_type enum_account_type?
|
|
346
|
+
account_type enum_account_type?
|
|
239
347
|
account_number String? @db.VarChar(50)
|
|
240
348
|
custom_id Int?
|
|
241
349
|
daily_logs daily_logs[]
|
|
@@ -246,66 +354,45 @@ model transactions {
|
|
|
246
354
|
transaction_updates transaction_updates[]
|
|
247
355
|
providers providers? @relation(fields: [provider_id], references: [provider_id])
|
|
248
356
|
users users? @relation(fields: [user_id], references: [user_id])
|
|
249
|
-
}
|
|
250
357
|
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
password String @db.VarChar(255)
|
|
256
|
-
onboarding_date DateTime? @db.Timestamptz(6)
|
|
257
|
-
role enum_users_role
|
|
258
|
-
status enum_users_status? @default(active)
|
|
259
|
-
country_id Int
|
|
260
|
-
createdAt DateTime @db.Timestamptz(6)
|
|
261
|
-
updatedAt DateTime @db.Timestamptz(6)
|
|
262
|
-
api_keys api_keys[]
|
|
263
|
-
balances balances[]
|
|
264
|
-
credit_requests credit_requests[]
|
|
265
|
-
customers customers[]
|
|
266
|
-
global_user_transactions global_user_transactions[]
|
|
267
|
-
notifications notifications[]
|
|
268
|
-
pending_references pending_references[]
|
|
269
|
-
transactions transactions[]
|
|
270
|
-
countries countries @relation(fields: [country_id], references: [id], onDelete: Cascade)
|
|
271
|
-
payInWebhookUrl String?
|
|
272
|
-
payOutWebhookUrl String?
|
|
273
|
-
manual_payments_processed manual_payments[] @relation("ProcessedByUser") // Pagos manuales procesados por el admin
|
|
274
|
-
manual_payments manual_payments[]
|
|
358
|
+
@@index([custom_id], map: "idx_transactions_custom_id")
|
|
359
|
+
@@index([id], map: "idx_transactions_id")
|
|
360
|
+
@@index([provider_id], map: "idx_transactions_provider_id")
|
|
361
|
+
@@index([user_id], map: "idx_transactions_user_id")
|
|
275
362
|
}
|
|
276
363
|
|
|
277
|
-
model
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
364
|
+
model users {
|
|
365
|
+
user_id Int @id @default(autoincrement())
|
|
366
|
+
name String @db.VarChar(255)
|
|
367
|
+
email String @unique(map: "idx_users_email") @db.VarChar(255)
|
|
368
|
+
password String @db.VarChar(255)
|
|
369
|
+
onboarding_date DateTime? @db.Timestamptz(6)
|
|
370
|
+
role enum_users_role
|
|
371
|
+
status enum_users_status? @default(active)
|
|
372
|
+
country_id Int
|
|
373
|
+
createdAt DateTime @db.Timestamptz(6)
|
|
374
|
+
updatedAt DateTime @db.Timestamptz(6)
|
|
375
|
+
payInWebhookUrl String?
|
|
376
|
+
payOutWebhookUrl String?
|
|
377
|
+
api_keys api_keys[]
|
|
378
|
+
balances balances[]
|
|
379
|
+
credit_requests credit_requests[]
|
|
380
|
+
customers customers[]
|
|
381
|
+
global_user_transactions global_user_transactions[]
|
|
382
|
+
manual_payments_manual_payments_processed_byTousers manual_payments[] @relation("manual_payments_processed_byTousers")
|
|
383
|
+
manual_payments_manual_payments_user_idTousers manual_payments[] @relation("manual_payments_user_idTousers")
|
|
384
|
+
notifications notifications[]
|
|
385
|
+
pending_references pending_references[]
|
|
386
|
+
transactions transactions[]
|
|
387
|
+
countries countries @relation(fields: [country_id], references: [id], onDelete: Cascade)
|
|
388
|
+
|
|
389
|
+
@@index([country_id], map: "idx_users_country_id")
|
|
390
|
+
@@index([user_id], map: "idx_users_user_id")
|
|
297
391
|
}
|
|
298
392
|
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
account_type String @db.VarChar(255)
|
|
303
|
-
bank_name String @db.VarChar(255)
|
|
304
|
-
country_code String @db.VarChar(255)
|
|
305
|
-
created_at DateTime @db.Timestamptz(6)
|
|
306
|
-
updated_at DateTime @db.Timestamptz(6)
|
|
307
|
-
country countries @relation(fields: [country_code], references: [code])
|
|
308
|
-
manual_payments manual_payments[]
|
|
393
|
+
enum enum_account_type {
|
|
394
|
+
checking
|
|
395
|
+
savings
|
|
309
396
|
}
|
|
310
397
|
|
|
311
398
|
enum enum_charges_document_type {
|
|
@@ -321,6 +408,12 @@ enum enum_charges_user_type {
|
|
|
321
408
|
LEGAL
|
|
322
409
|
}
|
|
323
410
|
|
|
411
|
+
enum enum_toku_status {
|
|
412
|
+
pending
|
|
413
|
+
paid
|
|
414
|
+
failed
|
|
415
|
+
}
|
|
416
|
+
|
|
324
417
|
enum enum_transaction_status {
|
|
325
418
|
pending
|
|
326
419
|
approved
|
|
@@ -332,30 +425,74 @@ enum enum_transaction_status {
|
|
|
332
425
|
processed
|
|
333
426
|
}
|
|
334
427
|
|
|
335
|
-
// Tipos de transacción
|
|
336
428
|
enum enum_transaction_type {
|
|
337
429
|
payin
|
|
338
430
|
payout
|
|
339
431
|
}
|
|
340
432
|
|
|
341
|
-
|
|
342
|
-
|
|
433
|
+
enum enum_users_role {
|
|
434
|
+
user
|
|
435
|
+
admin
|
|
436
|
+
}
|
|
437
|
+
|
|
438
|
+
enum enum_users_status {
|
|
439
|
+
active
|
|
440
|
+
inactive
|
|
441
|
+
}
|
|
442
|
+
|
|
443
|
+
enum enum_credit_requests_status {
|
|
444
|
+
pending
|
|
445
|
+
approved
|
|
446
|
+
rejected
|
|
447
|
+
}
|
|
448
|
+
|
|
449
|
+
enum enum_global_user_transactions_status {
|
|
450
|
+
pending
|
|
451
|
+
approved
|
|
452
|
+
rejected
|
|
453
|
+
}
|
|
454
|
+
|
|
455
|
+
enum enum_global_user_transactions_transaction_type {
|
|
456
|
+
payin
|
|
457
|
+
payout
|
|
458
|
+
}
|
|
459
|
+
|
|
460
|
+
enum enum_invoices_status {
|
|
461
|
+
pending
|
|
462
|
+
paid
|
|
463
|
+
failed
|
|
464
|
+
}
|
|
465
|
+
|
|
466
|
+
enum enum_pending_references_status {
|
|
467
|
+
pending
|
|
468
|
+
processed
|
|
469
|
+
}
|
|
470
|
+
|
|
471
|
+
enum enum_transaction_updates_new_status {
|
|
472
|
+
approved
|
|
473
|
+
rejected
|
|
474
|
+
}
|
|
475
|
+
|
|
476
|
+
enum enum_transactions_account_type {
|
|
343
477
|
checking
|
|
344
478
|
savings
|
|
345
479
|
}
|
|
346
480
|
|
|
347
|
-
enum
|
|
481
|
+
enum enum_transactions_status {
|
|
348
482
|
pending
|
|
483
|
+
approved
|
|
484
|
+
rejected
|
|
349
485
|
paid
|
|
486
|
+
completed
|
|
350
487
|
failed
|
|
351
488
|
}
|
|
352
489
|
|
|
353
|
-
enum
|
|
354
|
-
|
|
355
|
-
|
|
490
|
+
enum enum_transactions_transaction_type {
|
|
491
|
+
payin
|
|
492
|
+
payout
|
|
356
493
|
}
|
|
357
494
|
|
|
358
|
-
enum
|
|
359
|
-
|
|
360
|
-
|
|
495
|
+
enum enum_transactions_user_type_account {
|
|
496
|
+
checking
|
|
497
|
+
savings
|
|
361
498
|
}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { PrismaClient } from "@prisma/client";
|
|
2
|
+
import { exec } from "child_process";
|
|
3
|
+
import { promisify } from "util";
|
|
4
|
+
|
|
5
|
+
const execAsync = promisify(exec);
|
|
6
|
+
|
|
7
|
+
export class DatabaseInitializer {
|
|
8
|
+
constructor(private readonly databaseUrl: string) {}
|
|
9
|
+
|
|
10
|
+
async initialize(): Promise<void> {
|
|
11
|
+
try {
|
|
12
|
+
console.log("Checking if database needs initialization...");
|
|
13
|
+
|
|
14
|
+
const { Pool } = await import("pg");
|
|
15
|
+
const pool = new Pool({ connectionString: this.databaseUrl });
|
|
16
|
+
|
|
17
|
+
try {
|
|
18
|
+
// Verificar si existen tablas en la base de datos
|
|
19
|
+
const result = await pool.query(`
|
|
20
|
+
SELECT COUNT(*)
|
|
21
|
+
FROM information_schema.tables
|
|
22
|
+
WHERE table_schema = 'public'
|
|
23
|
+
AND table_type = 'BASE TABLE'
|
|
24
|
+
`);
|
|
25
|
+
|
|
26
|
+
const tableCount = parseInt(result.rows[0].count);
|
|
27
|
+
|
|
28
|
+
if (tableCount === 0) {
|
|
29
|
+
console.log(
|
|
30
|
+
"No tables found in database. Running initial migration..."
|
|
31
|
+
);
|
|
32
|
+
// Ejecutar migración inicial usando Prisma
|
|
33
|
+
await execAsync("npx prisma migrate deploy");
|
|
34
|
+
await execAsync("npx prisma db push");
|
|
35
|
+
console.log("Initial database migration completed successfully.");
|
|
36
|
+
} else {
|
|
37
|
+
console.log(
|
|
38
|
+
`Database already contains ${tableCount} tables. Skipping initialization.`
|
|
39
|
+
);
|
|
40
|
+
}
|
|
41
|
+
} finally {
|
|
42
|
+
await pool.end();
|
|
43
|
+
}
|
|
44
|
+
} catch (error) {
|
|
45
|
+
console.error("Error initializing database:", error);
|
|
46
|
+
throw error;
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
}
|
|
@@ -8,6 +8,8 @@ import { PrismaClient } from "@prisma/client";
|
|
|
8
8
|
import { MigrationConfig } from "./data-migration/types";
|
|
9
9
|
import * as fs from "fs";
|
|
10
10
|
import * as path from "path";
|
|
11
|
+
import { DatabaseInitializer } from "./database-initializer";
|
|
12
|
+
import { SequenceSynchronizer } from "./sequence-synchronizer";
|
|
11
13
|
|
|
12
14
|
dotenv.config();
|
|
13
15
|
|
|
@@ -79,6 +81,8 @@ program
|
|
|
79
81
|
.option("--force", "Force migration even if validation fails", false)
|
|
80
82
|
.option("-y, --yes", "Automatically answer yes to all prompts", false)
|
|
81
83
|
.option("--config-path <path>", "Path to migration config file")
|
|
84
|
+
.option("--skip-initialization", "Skip database initialization step", false)
|
|
85
|
+
.option("--skip-sequence-sync", "Skip sequence synchronization step", false)
|
|
82
86
|
.action(async (options) => {
|
|
83
87
|
// Set environment variables for the migration
|
|
84
88
|
if (options.source) {
|
|
@@ -127,9 +131,16 @@ program
|
|
|
127
131
|
}
|
|
128
132
|
|
|
129
133
|
try {
|
|
130
|
-
// Step 0:
|
|
134
|
+
// Step 0: Initialize database if needed
|
|
135
|
+
if (!options.skipInitialization) {
|
|
136
|
+
console.log("Step 0: Checking database initialization...");
|
|
137
|
+
const initializer = new DatabaseInitializer(process.env.DATABASE_URL);
|
|
138
|
+
await initializer.initialize();
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
// Step 1: Pre-migration validation
|
|
131
142
|
if (!options.skipValidation) {
|
|
132
|
-
console.log("Step
|
|
143
|
+
console.log("Step 1: Running pre-migration validation...");
|
|
133
144
|
const { PreMigrationValidator } = await import(
|
|
134
145
|
"./pre-migration-validator"
|
|
135
146
|
);
|
|
@@ -185,9 +196,9 @@ program
|
|
|
185
196
|
}
|
|
186
197
|
}
|
|
187
198
|
|
|
188
|
-
// Step
|
|
199
|
+
// Step 2: Migrate schema structure
|
|
189
200
|
if (!options.skipSchemaMigration) {
|
|
190
|
-
console.log("Step
|
|
201
|
+
console.log("Step 2: Migrating schema structure...");
|
|
191
202
|
if (options.mode === "multi-tenant") {
|
|
192
203
|
await execAsync("node dist/scripts/migrate-schema-structure.js");
|
|
193
204
|
} else {
|
|
@@ -218,24 +229,40 @@ program
|
|
|
218
229
|
}
|
|
219
230
|
}
|
|
220
231
|
|
|
221
|
-
// Step
|
|
232
|
+
// Step 3: Synchronize and fix enum types
|
|
222
233
|
if (!options.skipEnumSync) {
|
|
223
|
-
console.log("Step
|
|
234
|
+
console.log("Step 3: Synchronizing and fixing enum types...");
|
|
235
|
+
// Sync enum types
|
|
224
236
|
const { EnumSynchronizer } = await import("./sync-enum-types");
|
|
225
237
|
const synchronizer = new EnumSynchronizer();
|
|
226
238
|
await synchronizer.synchronizeEnums();
|
|
227
239
|
console.log("Enum types synchronized successfully!");
|
|
228
240
|
|
|
229
|
-
|
|
241
|
+
// Sync enum values
|
|
242
|
+
console.log("Step 3.1: Synchronizing enum values...");
|
|
230
243
|
const { EnumValueSynchronizer } = await import("./sync-enum-values");
|
|
231
244
|
const valueSynchronizer = new EnumValueSynchronizer();
|
|
232
245
|
await valueSynchronizer.synchronizeEnumValues();
|
|
233
246
|
console.log("Enum values synchronized successfully!");
|
|
247
|
+
|
|
248
|
+
// Fix enum values
|
|
249
|
+
console.log("Step 3.2: Fixing enum values...");
|
|
250
|
+
const { EnumFixer } = await import("./fix-enum-values");
|
|
251
|
+
const enumFixer = new EnumFixer(process.env.DATABASE_URL);
|
|
252
|
+
await enumFixer.fixEnumValues();
|
|
253
|
+
console.log("Enum values fixed successfully!");
|
|
234
254
|
}
|
|
235
255
|
|
|
236
|
-
// Step
|
|
256
|
+
// Step 4: Fix data types
|
|
257
|
+
console.log("Step 4: Fixing data type issues...");
|
|
258
|
+
const { DataTypeFixer } = await import("./fix-data-types");
|
|
259
|
+
const fixer = new DataTypeFixer();
|
|
260
|
+
await fixer.fixDataTypes();
|
|
261
|
+
console.log("Data type fixing completed successfully!");
|
|
262
|
+
|
|
263
|
+
// Step 5: Migrate data with transformation
|
|
237
264
|
if (!options.skipDataMigration) {
|
|
238
|
-
console.log("Step
|
|
265
|
+
console.log("Step 5: Migrating data with transformation...");
|
|
239
266
|
const { DataMigrationTool } = await import(
|
|
240
267
|
"./data-migration/migration-tool"
|
|
241
268
|
);
|
|
@@ -325,20 +352,6 @@ program
|
|
|
325
352
|
}
|
|
326
353
|
}
|
|
327
354
|
|
|
328
|
-
// Step 4: Fix enum values if needed
|
|
329
|
-
console.log("Step 4: Fixing enum values...");
|
|
330
|
-
const { EnumFixer } = await import("./fix-enum-values");
|
|
331
|
-
const enumFixer = new EnumFixer(process.env.DATABASE_URL);
|
|
332
|
-
await enumFixer.fixEnumValues();
|
|
333
|
-
console.log("Enum values fixed successfully!");
|
|
334
|
-
|
|
335
|
-
// Step 5: Fix data types if needed
|
|
336
|
-
console.log("Step 5: Fixing data type issues...");
|
|
337
|
-
const { DataTypeFixer } = await import("./fix-data-types");
|
|
338
|
-
const fixer = new DataTypeFixer();
|
|
339
|
-
await fixer.fixDataTypes();
|
|
340
|
-
console.log("Data type fixing completed successfully!");
|
|
341
|
-
|
|
342
355
|
// Step 6: Post-migration validation
|
|
343
356
|
if (!options.skipValidation) {
|
|
344
357
|
console.log("Step 6: Running post-migration validation...");
|
|
@@ -357,12 +370,29 @@ program
|
|
|
357
370
|
`Post-migration validation found ${result.issueCount} issues.`
|
|
358
371
|
);
|
|
359
372
|
console.log(JSON.stringify(result, null, 2));
|
|
373
|
+
|
|
374
|
+
if (!options.force) {
|
|
375
|
+
console.error(
|
|
376
|
+
"Migration validation failed. Use --force to continue anyway."
|
|
377
|
+
);
|
|
378
|
+
process.exit(1);
|
|
379
|
+
}
|
|
360
380
|
console.log(
|
|
361
|
-
"
|
|
381
|
+
"Continuing with migration despite validation issues (--force flag provided)"
|
|
362
382
|
);
|
|
363
383
|
}
|
|
364
384
|
}
|
|
365
385
|
|
|
386
|
+
// Step 7: Synchronize sequences (final step)
|
|
387
|
+
if (!options.skipSequenceSync) {
|
|
388
|
+
console.log("Step 7: Synchronizing database sequences...");
|
|
389
|
+
const sequenceSynchronizer = new SequenceSynchronizer(
|
|
390
|
+
process.env.DATABASE_URL
|
|
391
|
+
);
|
|
392
|
+
await sequenceSynchronizer.synchronizeSequences();
|
|
393
|
+
console.log("Database sequences synchronized successfully!");
|
|
394
|
+
}
|
|
395
|
+
|
|
366
396
|
console.log("Migration process completed successfully!");
|
|
367
397
|
} catch (error) {
|
|
368
398
|
console.error("Error running migration:", error);
|