@javalabs/prisma-client 1.0.6 → 1.0.8

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.
@@ -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
- manual_transfer_bank_acounts manual_transfer_bank_acounts[]
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) // Mapea a enum_transaction_status
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 // Mapea a enum_transaction_type
157
+ transaction_type enum_transaction_type
122
158
  amount Decimal @db.Decimal(10, 2)
123
- status enum_transaction_status // Mapea a 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) // Mapea a enum_transaction_status
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.VarChar(255)
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 // Mapea a enum_transaction_status (subset)
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) // Mapea a enum_transaction_status
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 // Mapea a enum_transaction_status (subset)
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 // Mapea a 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 // Mapea a 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 // Mapea a 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? // Mapea a 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
- model users {
252
- user_id Int @id @default(autoincrement())
253
- name String @db.VarChar(255)
254
- email String @unique @db.VarChar(255)
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 manual_payments {
278
- id Int @id @default(autoincrement())
279
- user_id Int
280
- amount Decimal @db.Decimal(10, 2)
281
- currency String @db.VarChar(10)
282
- bank_account_id Int?
283
- bank_transaction_id String? @db.VarChar(255)
284
- receipt_image_url String? @db.VarChar(255)
285
- notes String? @db.Text
286
- status enum_transaction_status @default(pending)
287
- admin_notes String? @db.Text
288
- processed_by Int? // ID del admin que procesó el pago
289
- created_at DateTime @db.Timestamptz(6)
290
- processed_at DateTime? @db.Timestamptz(6)
291
- country_code String? @db.VarChar(10)
292
-
293
- // Relations
294
- processedByUser users? @relation("ProcessedByUser", fields: [processed_by], references: [user_id], onDelete: SetNull)
295
- users users? @relation(fields: [user_id], references: [user_id])
296
- manual_transfer_bank_acounts manual_transfer_bank_acounts? @relation(fields: [bank_account_id], references: [id])
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
- model manual_transfer_bank_acounts {
300
- id Int @id @default(autoincrement())
301
- account_number String @db.VarChar(255)
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
- // Tipos de cuenta bancaria
342
- enum enum_account_type {
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 enum_toku_status {
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 enum_users_role {
354
- user
355
- admin
490
+ enum enum_transactions_transaction_type {
491
+ payin
492
+ payout
356
493
  }
357
494
 
358
- enum enum_users_status {
359
- active
360
- inactive
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: Pre-migration validation
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 0: Running pre-migration validation...");
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 1: Migrate schema structure first
199
+ // Step 2: Migrate schema structure
189
200
  if (!options.skipSchemaMigration) {
190
- console.log("Step 1: Migrating schema structure...");
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 2: Now synchronize enums
232
+ // Step 3: Synchronize and fix enum types
222
233
  if (!options.skipEnumSync) {
223
- console.log("Step 2: Synchronizing enum types...");
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
- console.log("Step 2.1: Synchronizing enum values...");
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 3: Migrate data with transformation
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 3: Migrating data with transformation...");
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
- "You may need to run 'retry-failed' command to fix these issues."
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);