@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.
Files changed (150) hide show
  1. package/README.md +220 -0
  2. package/dist/index.d.ts +7 -0
  3. package/dist/index.js +34 -0
  4. package/dist/index.js.map +1 -0
  5. package/dist/prisma-factory.service.d.ts +9 -0
  6. package/dist/prisma-factory.service.js +47 -0
  7. package/dist/prisma-factory.service.js.map +1 -0
  8. package/dist/prisma.module.d.ts +2 -0
  9. package/dist/prisma.module.js +23 -0
  10. package/dist/prisma.module.js.map +1 -0
  11. package/dist/prisma.service.d.ts +6 -0
  12. package/dist/prisma.service.js +27 -0
  13. package/dist/prisma.service.js.map +1 -0
  14. package/dist/scripts/create-tenant-schemas.d.ts +1 -0
  15. package/dist/scripts/create-tenant-schemas.js +117 -0
  16. package/dist/scripts/create-tenant-schemas.js.map +1 -0
  17. package/dist/scripts/data-migration/batch-migrator.d.ts +25 -0
  18. package/dist/scripts/data-migration/batch-migrator.js +333 -0
  19. package/dist/scripts/data-migration/batch-migrator.js.map +1 -0
  20. package/dist/scripts/data-migration/data-transformer.d.ts +17 -0
  21. package/dist/scripts/data-migration/data-transformer.js +242 -0
  22. package/dist/scripts/data-migration/data-transformer.js.map +1 -0
  23. package/dist/scripts/data-migration/db-connector.d.ts +7 -0
  24. package/dist/scripts/data-migration/db-connector.js +58 -0
  25. package/dist/scripts/data-migration/db-connector.js.map +1 -0
  26. package/dist/scripts/data-migration/dependency-manager.d.ts +9 -0
  27. package/dist/scripts/data-migration/dependency-manager.js +86 -0
  28. package/dist/scripts/data-migration/dependency-manager.js.map +1 -0
  29. package/dist/scripts/data-migration/dependency-resolver.d.ts +18 -0
  30. package/dist/scripts/data-migration/dependency-resolver.js +251 -0
  31. package/dist/scripts/data-migration/dependency-resolver.js.map +1 -0
  32. package/dist/scripts/data-migration/entity-discovery.d.ts +11 -0
  33. package/dist/scripts/data-migration/entity-discovery.js +152 -0
  34. package/dist/scripts/data-migration/entity-discovery.js.map +1 -0
  35. package/dist/scripts/data-migration/foreign-key-manager.d.ts +17 -0
  36. package/dist/scripts/data-migration/foreign-key-manager.js +70 -0
  37. package/dist/scripts/data-migration/foreign-key-manager.js.map +1 -0
  38. package/dist/scripts/data-migration/migration-phases.d.ts +5 -0
  39. package/dist/scripts/data-migration/migration-phases.js +55 -0
  40. package/dist/scripts/data-migration/migration-phases.js.map +1 -0
  41. package/dist/scripts/data-migration/migration-tool.d.ts +29 -0
  42. package/dist/scripts/data-migration/migration-tool.js +250 -0
  43. package/dist/scripts/data-migration/migration-tool.js.map +1 -0
  44. package/dist/scripts/data-migration/phase-generator.d.ts +15 -0
  45. package/dist/scripts/data-migration/phase-generator.js +187 -0
  46. package/dist/scripts/data-migration/phase-generator.js.map +1 -0
  47. package/dist/scripts/data-migration/schema-utils.d.ts +18 -0
  48. package/dist/scripts/data-migration/schema-utils.js +164 -0
  49. package/dist/scripts/data-migration/schema-utils.js.map +1 -0
  50. package/dist/scripts/data-migration/tenant-migrator.d.ts +15 -0
  51. package/dist/scripts/data-migration/tenant-migrator.js +110 -0
  52. package/dist/scripts/data-migration/tenant-migrator.js.map +1 -0
  53. package/dist/scripts/data-migration/typecast-manager.d.ts +5 -0
  54. package/dist/scripts/data-migration/typecast-manager.js +35 -0
  55. package/dist/scripts/data-migration/typecast-manager.js.map +1 -0
  56. package/dist/scripts/data-migration/types.d.ts +34 -0
  57. package/dist/scripts/data-migration/types.js +3 -0
  58. package/dist/scripts/data-migration/types.js.map +1 -0
  59. package/dist/scripts/data-migration.d.ts +22 -0
  60. package/dist/scripts/data-migration.js +593 -0
  61. package/dist/scripts/data-migration.js.map +1 -0
  62. package/dist/scripts/drop-database.d.ts +10 -0
  63. package/dist/scripts/drop-database.js +81 -0
  64. package/dist/scripts/drop-database.js.map +1 -0
  65. package/dist/scripts/error-handler.d.ts +12 -0
  66. package/dist/scripts/error-handler.js +82 -0
  67. package/dist/scripts/error-handler.js.map +1 -0
  68. package/dist/scripts/fix-data-types.d.ts +10 -0
  69. package/dist/scripts/fix-data-types.js +185 -0
  70. package/dist/scripts/fix-data-types.js.map +1 -0
  71. package/dist/scripts/fix-enum-values.d.ts +17 -0
  72. package/dist/scripts/fix-enum-values.js +234 -0
  73. package/dist/scripts/fix-enum-values.js.map +1 -0
  74. package/dist/scripts/fix-schema-discrepancies.d.ts +21 -0
  75. package/dist/scripts/fix-schema-discrepancies.js +240 -0
  76. package/dist/scripts/fix-schema-discrepancies.js.map +1 -0
  77. package/dist/scripts/migrate-schema-structure.d.ts +1 -0
  78. package/dist/scripts/migrate-schema-structure.js +76 -0
  79. package/dist/scripts/migrate-schema-structure.js.map +1 -0
  80. package/dist/scripts/post-migration-validator.d.ts +21 -0
  81. package/dist/scripts/post-migration-validator.js +341 -0
  82. package/dist/scripts/post-migration-validator.js.map +1 -0
  83. package/dist/scripts/pre-migration-validator.d.ts +25 -0
  84. package/dist/scripts/pre-migration-validator.js +491 -0
  85. package/dist/scripts/pre-migration-validator.js.map +1 -0
  86. package/dist/scripts/reset-database.d.ts +17 -0
  87. package/dist/scripts/reset-database.js +202 -0
  88. package/dist/scripts/reset-database.js.map +1 -0
  89. package/dist/scripts/retry-failed-migrations.d.ts +14 -0
  90. package/dist/scripts/retry-failed-migrations.js +301 -0
  91. package/dist/scripts/retry-failed-migrations.js.map +1 -0
  92. package/dist/scripts/run-migration.d.ts +1 -0
  93. package/dist/scripts/run-migration.js +525 -0
  94. package/dist/scripts/run-migration.js.map +1 -0
  95. package/dist/scripts/schema-sync.d.ts +1 -0
  96. package/dist/scripts/schema-sync.js +85 -0
  97. package/dist/scripts/schema-sync.js.map +1 -0
  98. package/dist/scripts/sync-enum-types.d.ts +13 -0
  99. package/dist/scripts/sync-enum-types.js +139 -0
  100. package/dist/scripts/sync-enum-types.js.map +1 -0
  101. package/dist/scripts/sync-enum-values.d.ts +20 -0
  102. package/dist/scripts/sync-enum-values.js +336 -0
  103. package/dist/scripts/sync-enum-values.js.map +1 -0
  104. package/dist/scripts/truncate-database.d.ts +10 -0
  105. package/dist/scripts/truncate-database.js +100 -0
  106. package/dist/scripts/truncate-database.js.map +1 -0
  107. package/dist/scripts/verify-migration-setup.d.ts +11 -0
  108. package/dist/scripts/verify-migration-setup.js +120 -0
  109. package/dist/scripts/verify-migration-setup.js.map +1 -0
  110. package/dist/tsconfig.tsbuildinfo +1 -0
  111. package/migration-config-public.json +95 -0
  112. package/migration-config.json +95 -0
  113. package/package.json +33 -0
  114. package/prisma/migrations/migration_lock.toml +3 -0
  115. package/prisma/schema.prisma +360 -0
  116. package/src/index.ts +23 -0
  117. package/src/prisma-factory.service.ts +41 -0
  118. package/src/prisma.module.ts +10 -0
  119. package/src/prisma.service.ts +17 -0
  120. package/src/scripts/create-tenant-schemas.ts +146 -0
  121. package/src/scripts/data-migration/batch-migrator.ts +569 -0
  122. package/src/scripts/data-migration/data-transformer.ts +377 -0
  123. package/src/scripts/data-migration/db-connector.ts +67 -0
  124. package/src/scripts/data-migration/dependency-resolver.ts +319 -0
  125. package/src/scripts/data-migration/entity-discovery.ts +197 -0
  126. package/src/scripts/data-migration/foreign-key-manager.ts +95 -0
  127. package/src/scripts/data-migration/migration-tool.ts +357 -0
  128. package/src/scripts/data-migration/schema-utils.ts +186 -0
  129. package/src/scripts/data-migration/tenant-migrator.ts +194 -0
  130. package/src/scripts/data-migration/typecast-manager.ts +38 -0
  131. package/src/scripts/data-migration/types.ts +40 -0
  132. package/src/scripts/drop-database.ts +105 -0
  133. package/src/scripts/dump-source-db.sh +62 -0
  134. package/src/scripts/dumps/source_dump_20250413_112626.sql +1527 -0
  135. package/src/scripts/error-handler.ts +118 -0
  136. package/src/scripts/fix-data-types.ts +242 -0
  137. package/src/scripts/fix-enum-values.ts +357 -0
  138. package/src/scripts/fix-schema-discrepancies.ts +318 -0
  139. package/src/scripts/migrate-schema-structure.ts +90 -0
  140. package/src/scripts/post-migration-validator.ts +427 -0
  141. package/src/scripts/pre-migration-validator.ts +611 -0
  142. package/src/scripts/reset-database.ts +264 -0
  143. package/src/scripts/retry-failed-migrations.ts +416 -0
  144. package/src/scripts/run-migration.ts +691 -0
  145. package/src/scripts/schema-sync.ts +129 -0
  146. package/src/scripts/sync-enum-types.ts +171 -0
  147. package/src/scripts/sync-enum-values.ts +563 -0
  148. package/src/scripts/truncate-database.ts +124 -0
  149. package/src/scripts/verify-migration-setup.ts +136 -0
  150. package/tsconfig.json +18 -0
@@ -0,0 +1,95 @@
1
+ {
2
+ "commonSchema": "public",
3
+ "tenantInfo": {
4
+ "sourceTable": "api_keys",
5
+ "tenantIdColumn": "api_key",
6
+ "providerIdColumn": "provider_id"
7
+ },
8
+ "tables": {
9
+ "countries": { "type": "public", "idField": "id" },
10
+ "users": { "type": "public", "idField": "user_id" },
11
+ "providers": { "type": "public", "idField": "provider_id" },
12
+ "banks": { "type": "public", "idField": "id" },
13
+ "api_keys": { "type": "public", "idField": "id" },
14
+ "transactions": {
15
+ "type": "tenant",
16
+ "idField": "id",
17
+ "filterColumn": "provider_id"
18
+ },
19
+ "invoices": {
20
+ "type": "tenant",
21
+ "idField": "id",
22
+ "filterColumn": "transaction_id",
23
+ "via": "transactions"
24
+ },
25
+ "balances": {
26
+ "type": "tenant",
27
+ "idField": "id",
28
+ "filterColumn": "user_id",
29
+ "via": "users"
30
+ },
31
+ "charges": {
32
+ "type": "tenant",
33
+ "idField": "id",
34
+ "filterColumn": "reference",
35
+ "via": "transactions"
36
+ },
37
+ "payouts": {
38
+ "type": "tenant",
39
+ "idField": "id",
40
+ "filterColumn": "provider_id"
41
+ },
42
+ "api_request_logs": {
43
+ "type": "tenant",
44
+ "idField": "id",
45
+ "filterColumn": "api_key",
46
+ "via": "api_keys"
47
+ },
48
+ "credit_requests": {
49
+ "type": "tenant",
50
+ "idField": "id",
51
+ "filterColumn": "user_id",
52
+ "via": "users"
53
+ },
54
+ "customers": {
55
+ "type": "tenant",
56
+ "idField": "id",
57
+ "filterColumn": "user_id",
58
+ "via": "users"
59
+ },
60
+ "daily_logs": {
61
+ "type": "tenant",
62
+ "idField": "id",
63
+ "filterColumn": "transaction_id",
64
+ "via": "transactions"
65
+ },
66
+ "global_user_transactions": {
67
+ "type": "tenant",
68
+ "idField": "id",
69
+ "filterColumn": "provider_id"
70
+ },
71
+ "notifications": {
72
+ "type": "tenant",
73
+ "idField": "id",
74
+ "filterColumn": "user_id",
75
+ "via": "users"
76
+ },
77
+ "pending_references": {
78
+ "type": "tenant",
79
+ "idField": "id",
80
+ "filterColumn": "provider_id"
81
+ },
82
+ "toku": {
83
+ "type": "tenant",
84
+ "idField": "id",
85
+ "filterColumn": "transaction_id",
86
+ "via": "transactions"
87
+ },
88
+ "transaction_updates": {
89
+ "type": "tenant",
90
+ "idField": "id",
91
+ "filterColumn": "transaction_id",
92
+ "via": "transactions"
93
+ }
94
+ }
95
+ }
package/package.json ADDED
@@ -0,0 +1,33 @@
1
+ {
2
+ "name": "@javalabs/prisma-client",
3
+ "version": "1.0.0",
4
+ "description": "Shared Prisma client for Tupay microservices",
5
+ "main": "dist/index.js",
6
+ "types": "dist/index.d.ts",
7
+ "scripts": {
8
+ "build": "tsc",
9
+ "generate": "prisma generate",
10
+ "migrate:dev": "prisma migrate dev",
11
+ "migrate:deploy": "prisma migrate deploy",
12
+ "migrate:data": "node dist/scripts/run-migration.js migrate",
13
+ "migrate:data:force": "node dist/scripts/run-migration.js migrate --force",
14
+ "migrate:data:yes": "node dist/scripts/run-migration.js migrate -y"
15
+ },
16
+ "keywords": [],
17
+ "author": "",
18
+ "license": "ISC",
19
+ "dependencies": {
20
+ "@nestjs/common": "^10.0.0",
21
+ "@nestjs/core": "^10.0.0",
22
+ "@prisma/client": "^5.4.2",
23
+ "commander": "^11.1.0",
24
+ "dotenv": "^16.4.7",
25
+ "pg": "^8.14.1"
26
+ },
27
+ "devDependencies": {
28
+ "@types/node": "^20.3.1",
29
+ "@types/pg": "^8.11.11",
30
+ "prisma": "^5.4.2",
31
+ "typescript": "^5.2.2"
32
+ }
33
+ }
@@ -0,0 +1,3 @@
1
+ # Please do not edit this file manually
2
+ # It should be added in your version-control system (i.e. Git)
3
+ provider = "postgresql"
@@ -0,0 +1,360 @@
1
+ generator client {
2
+ provider = "prisma-client-js"
3
+ }
4
+
5
+ datasource db {
6
+ provider = "postgresql"
7
+ url = env("DATABASE_URL")
8
+ }
9
+
10
+ model api_keys {
11
+ id Int @id @default(autoincrement())
12
+ name String @db.VarChar(255)
13
+ api_key String @unique @db.VarChar(255)
14
+ is_active Boolean? @default(true)
15
+ user_id Int
16
+ provider_id Int?
17
+ providers providers? @relation(fields: [provider_id], references: [provider_id])
18
+ users users @relation(fields: [user_id], references: [user_id], onDelete: NoAction)
19
+ }
20
+
21
+ model api_request_logs {
22
+ id Int @id @default(autoincrement())
23
+ api_key String @db.VarChar(255)
24
+ endpoint String @db.VarChar(255)
25
+ ip_address String? @db.VarChar(255)
26
+ user_agent String? @db.VarChar(255)
27
+ request_method String? @db.VarChar(255)
28
+ status_code Int?
29
+ timestamp DateTime? @db.Timestamptz(6)
30
+ }
31
+
32
+ model balances {
33
+ id Int @id @default(autoincrement())
34
+ amount Decimal @db.Decimal(10, 2)
35
+ currency String @db.VarChar(10)
36
+ user_id Int
37
+ createdAt DateTime @db.Timestamptz(6)
38
+ updatedAt DateTime @db.Timestamptz(6)
39
+ users users @relation(fields: [user_id], references: [user_id], onDelete: NoAction)
40
+ }
41
+
42
+ model banks {
43
+ id Int @id @default(autoincrement())
44
+ name String @db.VarChar(100)
45
+ code String? @db.VarChar(100)
46
+ country_code String? @db.VarChar(100)
47
+ createdAt DateTime @db.Timestamptz(6)
48
+ updatedAt DateTime @db.Timestamptz(6)
49
+ }
50
+
51
+ model charges {
52
+ id Int @id @default(autoincrement())
53
+ token String @db.VarChar(255)
54
+ order_id String @unique(map: "charges_order_id") @db.VarChar(255)
55
+ amount Decimal @db.Decimal(10, 2)
56
+ vat_amount Decimal @db.Decimal(10, 2)
57
+ description String @db.VarChar(255)
58
+ user_type enum_charges_user_type
59
+ document_type enum_charges_document_type
60
+ bank_code String @db.VarChar(255)
61
+ status String @db.VarChar(255)
62
+ buyer_email String @db.VarChar(255)
63
+ buyer_full_name String @db.VarChar(255)
64
+ document_number String @db.VarChar(255)
65
+ redirect_url String @default("https://dashboard.tupay.finance") @db.VarChar(255)
66
+ traceability_code String? @db.VarChar(255)
67
+ return_code String? @db.VarChar(255)
68
+ bank_url String? @db.VarChar(255)
69
+ buyer_phone_number String @db.VarChar(255)
70
+ transaction_state String? @db.VarChar(255)
71
+ created_at DateTime? @db.Timestamptz(6)
72
+ }
73
+
74
+ model countries {
75
+ id Int @id @default(autoincrement())
76
+ name String @db.VarChar(100)
77
+ code String @unique @db.VarChar(3)
78
+ currencyCode String @unique @db.VarChar(3)
79
+ image String?
80
+ createdAt DateTime @db.Timestamptz(6)
81
+ updatedAt DateTime @db.Timestamptz(6)
82
+ providers providers[]
83
+ users users[]
84
+ manual_transfer_bank_acounts manual_transfer_bank_acounts[]
85
+ }
86
+
87
+ model credit_requests {
88
+ id Int @id @default(autoincrement())
89
+ user_id Int?
90
+ invoice_id Int?
91
+ amount Decimal @db.Decimal(10, 2)
92
+ status enum_transaction_status @default(pending) // Mapea a enum_transaction_status
93
+ requested_at DateTime @db.Timestamptz(6)
94
+ processed_at DateTime? @db.Timestamptz(6)
95
+ invoices invoices? @relation(fields: [invoice_id], references: [id])
96
+ users users? @relation(fields: [user_id], references: [user_id])
97
+ }
98
+
99
+ model customers {
100
+ id Int @id @default(autoincrement())
101
+ custom_id String? @unique @db.VarChar(255)
102
+ mail String @unique @db.VarChar(255)
103
+ name String @db.VarChar(255)
104
+ phone_number String @db.VarChar(255)
105
+ created_at DateTime @db.Timestamptz(6)
106
+ user_id Int
107
+ updatedAt DateTime @db.Timestamptz(6)
108
+ users users @relation(fields: [user_id], references: [user_id], onDelete: NoAction)
109
+ }
110
+
111
+ model daily_logs {
112
+ id Int @id @default(autoincrement())
113
+ log_date DateTime @db.Timestamptz(6)
114
+ details String? @db.VarChar(255)
115
+ transaction_id Int?
116
+ transactions transactions? @relation(fields: [transaction_id], references: [id])
117
+ }
118
+
119
+ model global_user_transactions {
120
+ id Int @id @default(autoincrement())
121
+ transaction_type enum_transaction_type // Mapea a enum_transaction_type
122
+ amount Decimal @db.Decimal(10, 2)
123
+ status enum_transaction_status // Mapea a enum_transaction_status
124
+ executed_at DateTime? @db.Timestamptz(6)
125
+ user_id Int?
126
+ transaction_id Int?
127
+ provider_id Int?
128
+ providers providers? @relation(fields: [provider_id], references: [provider_id])
129
+ transactions transactions? @relation(fields: [transaction_id], references: [id])
130
+ users users? @relation(fields: [user_id], references: [user_id])
131
+ }
132
+
133
+ model invoices {
134
+ id Int @id @default(autoincrement())
135
+ invoice_number BigInt
136
+ transaction_id Int?
137
+ reference BigInt @unique
138
+ amount Decimal @db.Decimal(10, 2)
139
+ currency String @db.VarChar(255)
140
+ status enum_transaction_status @default(pending) // Mapea a enum_transaction_status
141
+ link_payment String? @db.VarChar(255)
142
+ due_date DateTime? @db.Timestamptz(6)
143
+ is_paid Boolean @default(false)
144
+ createdAt DateTime @db.Timestamptz(6)
145
+ updatedAt DateTime @db.Timestamptz(6)
146
+ credit_requests credit_requests[]
147
+ transactions transactions? @relation(fields: [transaction_id], references: [id])
148
+
149
+ @@unique([id, transaction_id], map: "invoices_id_transaction_id")
150
+ }
151
+
152
+ model notifications {
153
+ id Int @id @default(autoincrement())
154
+ message String @db.VarChar(255)
155
+ notification_date DateTime? @db.Timestamptz(6)
156
+ metadata Json?
157
+ user_id Int?
158
+ transaction_id Int?
159
+ transactions transactions? @relation(fields: [transaction_id], references: [id])
160
+ users users? @relation(fields: [user_id], references: [user_id])
161
+ }
162
+
163
+ model pending_references {
164
+ id Int @id @default(autoincrement())
165
+ status enum_transaction_status // Mapea a enum_transaction_status (subset)
166
+ reference_date DateTime? @db.Timestamptz(6)
167
+ user_id Int?
168
+ provider_id Int?
169
+ providers providers? @relation(fields: [provider_id], references: [provider_id])
170
+ users users? @relation(fields: [user_id], references: [user_id])
171
+ }
172
+
173
+ model providers {
174
+ provider_id Int @id @default(autoincrement())
175
+ name String @db.VarChar(255)
176
+ contact_email String? @db.VarChar(255)
177
+ api_key String @unique @db.VarChar(255)
178
+ is_active Boolean? @default(true)
179
+ country_id Int
180
+ agreement String? @db.VarChar(50)
181
+ image String?
182
+ api_keys api_keys[]
183
+ global_user_transactions global_user_transactions[]
184
+ pending_references pending_references[]
185
+ countries countries @relation(fields: [country_id], references: [id], onDelete: Cascade)
186
+ transactions transactions[]
187
+ }
188
+
189
+ model toku {
190
+ id Int @id @default(autoincrement())
191
+ customer String @unique @db.VarChar(255)
192
+ subscription String? @unique @db.VarChar(255)
193
+ invoice String? @unique @db.VarChar(255)
194
+ product_id String? @unique @db.VarChar(255)
195
+ is_paid Boolean? @default(false)
196
+ mail String @unique @db.VarChar(50)
197
+ name String @db.VarChar(50)
198
+ phone_number String @db.VarChar(50)
199
+ amount Decimal? @db.Decimal(10, 2)
200
+ currency String? @db.VarChar(255)
201
+ status enum_toku_status? @default(pending) // Mapea a enum_transaction_status
202
+ link_payment String? @db.VarChar(255)
203
+ due_date DateTime? @db.Timestamptz(6)
204
+ transaction_id Int? @unique
205
+ created_at DateTime? @db.Timestamptz(6)
206
+ transactions transactions? @relation(fields: [transaction_id], references: [id])
207
+
208
+ @@unique([id, transaction_id], map: "toku_id_transaction_id")
209
+ }
210
+
211
+ model transaction_updates {
212
+ id Int @id @default(autoincrement())
213
+ new_status enum_transaction_status // Mapea a enum_transaction_status (subset)
214
+ update_date DateTime? @db.Timestamptz(6)
215
+ transaction_id Int?
216
+ transactions transactions? @relation(fields: [transaction_id], references: [id])
217
+ }
218
+
219
+ model transactions {
220
+ id Int @id @default(autoincrement())
221
+ reference BigInt @unique
222
+ currency String @db.VarChar(10)
223
+ amount Decimal @db.Decimal(10, 2)
224
+ transaction_type enum_transaction_type // Mapea a enum_transaction_type
225
+ user_name String @db.VarChar(50)
226
+ user_phone String @db.VarChar(20)
227
+ user_email String @db.VarChar(50)
228
+ user_bank String @db.VarChar(50)
229
+ user_type_account enum_account_type // Mapea a enum_account_type
230
+ user_num_account String @db.VarChar(20)
231
+ user_identification_number String @db.VarChar(255)
232
+ status enum_transaction_status // Mapea a enum_transaction_status
233
+ user_id Int?
234
+ provider_id Int?
235
+ createdAt DateTime @db.Timestamptz(6)
236
+ updatedAt DateTime @db.Timestamptz(6)
237
+ bank_name String? @db.VarChar(100)
238
+ account_type enum_account_type? // Mapea a enum_account_type
239
+ account_number String? @db.VarChar(50)
240
+ custom_id Int?
241
+ daily_logs daily_logs[]
242
+ global_user_transactions global_user_transactions[]
243
+ invoices invoices[]
244
+ notifications notifications[]
245
+ toku toku?
246
+ transaction_updates transaction_updates[]
247
+ providers providers? @relation(fields: [provider_id], references: [provider_id])
248
+ users users? @relation(fields: [user_id], references: [user_id])
249
+ }
250
+
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[]
275
+ }
276
+
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
+ payment_method String @db.VarChar(50)
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: [usersUser_id], references: [user_id])
296
+ usersUser_id Int?
297
+ }
298
+
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
+ }
309
+
310
+ enum enum_charges_document_type {
311
+ CC
312
+ CE
313
+ NIT
314
+ TI
315
+ PP
316
+ }
317
+
318
+ enum enum_charges_user_type {
319
+ NATURAL
320
+ LEGAL
321
+ }
322
+
323
+ enum enum_transaction_status {
324
+ pending
325
+ approved
326
+ rejected
327
+ paid
328
+ completed
329
+ failed
330
+ canceled
331
+ processed
332
+ }
333
+
334
+ // Tipos de transacción
335
+ enum enum_transaction_type {
336
+ payin
337
+ payout
338
+ }
339
+
340
+ // Tipos de cuenta bancaria
341
+ enum enum_account_type {
342
+ checking
343
+ savings
344
+ }
345
+
346
+ enum enum_toku_status {
347
+ pending
348
+ paid
349
+ failed
350
+ }
351
+
352
+ enum enum_users_role {
353
+ user
354
+ admin
355
+ }
356
+
357
+ enum enum_users_status {
358
+ active
359
+ inactive
360
+ }
package/src/index.ts ADDED
@@ -0,0 +1,23 @@
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
+
6
+ // Create a singleton instance of the PrismaClient
7
+ const prismaClientSingleton = () => {
8
+ return new PrismaClient();
9
+ };
10
+
11
+ type PrismaClientSingleton = ReturnType<typeof prismaClientSingleton>;
12
+
13
+ const globalForPrisma = globalThis as unknown as {
14
+ prisma: PrismaClientSingleton | undefined;
15
+ };
16
+
17
+ export const prisma = globalForPrisma.prisma ?? prismaClientSingleton();
18
+
19
+ if (process.env.NODE_ENV !== "production") globalForPrisma.prisma = prisma;
20
+
21
+ // Explicitly export the modules and services
22
+ export { PrismaModule, PrismaService, PrismaFactoryService };
23
+ export * from "@prisma/client";
@@ -0,0 +1,41 @@
1
+ import { Injectable, OnModuleDestroy, Logger } from '@nestjs/common';
2
+ import { PrismaClient } from '@prisma/client';
3
+
4
+ @Injectable()
5
+ export class PrismaFactoryService implements OnModuleDestroy {
6
+ private clients: Map<string, PrismaClient> = new Map();
7
+ private readonly logger = new Logger(PrismaFactoryService.name);
8
+
9
+ getClient(tenantId: string): PrismaClient {
10
+ if (!this.clients.has(tenantId)) {
11
+ this.logger.log(`Creating new Prisma client for tenant: ${tenantId}`);
12
+
13
+ // Crear un nuevo cliente con el schema específico
14
+ const client = new PrismaClient({
15
+ datasources: {
16
+ db: {
17
+ url: `${process.env.DATABASE_URL}?schema=${tenantId}`,
18
+ },
19
+ },
20
+ });
21
+
22
+ this.clients.set(tenantId, client);
23
+ }
24
+
25
+ return this.clients.get(tenantId);
26
+ }
27
+
28
+ // Cliente para el schema público/master
29
+ getMasterClient(): PrismaClient {
30
+ return this.getClient('public');
31
+ }
32
+
33
+ async onModuleDestroy() {
34
+ this.logger.log('Disconnecting all Prisma clients');
35
+ // Desconectar todos los clientes al finalizar
36
+ for (const [tenantId, client] of this.clients.entries()) {
37
+ this.logger.log(`Disconnecting client for tenant: ${tenantId}`);
38
+ await client.$disconnect();
39
+ }
40
+ }
41
+ }
@@ -0,0 +1,10 @@
1
+ import { Module, Global } from '@nestjs/common';
2
+ import { PrismaService } from './prisma.service';
3
+ import { PrismaFactoryService } from './prisma-factory.service';
4
+
5
+ @Global()
6
+ @Module({
7
+ providers: [PrismaService, PrismaFactoryService],
8
+ exports: [PrismaService, PrismaFactoryService],
9
+ })
10
+ export class PrismaModule {}
@@ -0,0 +1,17 @@
1
+ import { Injectable, OnModuleInit, OnModuleDestroy } from '@nestjs/common';
2
+ import { prisma } from './index';
3
+
4
+ @Injectable()
5
+ export class PrismaService implements OnModuleInit, OnModuleDestroy {
6
+ async onModuleInit() {
7
+ await prisma.$connect();
8
+ }
9
+
10
+ async onModuleDestroy() {
11
+ await prisma.$disconnect();
12
+ }
13
+
14
+ get client() {
15
+ return prisma;
16
+ }
17
+ }