@valentine-efagene/qshelter-common 2.0.0 → 2.0.2
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/OpenApiHelper.d.ts +9 -0
- package/dist/OpenApiHelper.js +118 -0
- package/dist/OpenApiHelper.js.map +1 -0
- package/dist/decorator/index.d.ts +2 -0
- package/dist/decorator/index.js +19 -0
- package/dist/decorator/index.js.map +1 -0
- package/dist/decorator/permission.decorator.d.ts +2 -0
- package/dist/decorator/permission.decorator.js +6 -0
- package/dist/decorator/permission.decorator.js.map +1 -0
- package/dist/decorator/tenant.decorator.d.ts +2 -0
- package/dist/decorator/tenant.decorator.js +13 -0
- package/dist/decorator/tenant.decorator.js.map +1 -0
- package/dist/encryption/encryption.module.d.ts +2 -0
- package/dist/encryption/encryption.module.js +24 -0
- package/dist/encryption/encryption.module.js.map +1 -0
- package/dist/encryption/encryption.service.d.ts +17 -0
- package/dist/encryption/encryption.service.js +85 -0
- package/dist/encryption/encryption.service.js.map +1 -0
- package/dist/entities/TenantAwareEntity.d.ts +9 -0
- package/dist/entities/TenantAwareEntity.js +48 -0
- package/dist/entities/TenantAwareEntity.js.map +1 -0
- package/dist/entities/TenantAwareRepository.d.ts +13 -0
- package/dist/entities/TenantAwareRepository.js +65 -0
- package/dist/entities/TenantAwareRepository.js.map +1 -0
- package/dist/entities/amenity.entity.d.ts +4 -0
- package/dist/entities/amenity.entity.js +28 -0
- package/dist/entities/amenity.entity.js.map +1 -0
- package/dist/entities/common.entity.d.ts +16 -0
- package/dist/entities/common.entity.js +63 -0
- package/dist/entities/common.entity.js.map +1 -0
- package/dist/entities/common.pure.entity.d.ts +11 -0
- package/dist/entities/common.pure.entity.js +52 -0
- package/dist/entities/common.pure.entity.js.map +1 -0
- package/dist/entities/contract-document.entity.d.ts +39 -0
- package/dist/entities/contract-document.entity.js +115 -0
- package/dist/entities/contract-document.entity.js.map +1 -0
- package/dist/entities/contract.entity.d.ts +62 -0
- package/dist/entities/contract.entity.js +191 -0
- package/dist/entities/contract.entity.js.map +1 -0
- package/dist/entities/device_endpoint.entity.d.ts +10 -0
- package/dist/entities/device_endpoint.entity.js +50 -0
- package/dist/entities/device_endpoint.entity.js.map +1 -0
- package/dist/entities/email_preference.entity.d.ts +6 -0
- package/dist/entities/email_preference.entity.js +45 -0
- package/dist/entities/email_preference.entity.js.map +1 -0
- package/dist/entities/index.d.ts +36 -0
- package/dist/entities/index.js +53 -0
- package/dist/entities/index.js.map +1 -0
- package/dist/entities/mortgage-document.entity.d.ts +14 -0
- package/dist/entities/mortgage-document.entity.js +58 -0
- package/dist/entities/mortgage-document.entity.js.map +1 -0
- package/dist/entities/mortgage-downpayment-installment.entity.d.ts +19 -0
- package/dist/entities/mortgage-downpayment-installment.entity.js +63 -0
- package/dist/entities/mortgage-downpayment-installment.entity.js.map +1 -0
- package/dist/entities/mortgage-downpayment-payment.entity.d.ts +28 -0
- package/dist/entities/mortgage-downpayment-payment.entity.js +84 -0
- package/dist/entities/mortgage-downpayment-payment.entity.js.map +1 -0
- package/dist/entities/mortgage-downpayment.entity.d.ts +22 -0
- package/dist/entities/mortgage-downpayment.entity.js +66 -0
- package/dist/entities/mortgage-downpayment.entity.js.map +1 -0
- package/dist/entities/mortgage-step.entity.d.ts +12 -0
- package/dist/entities/mortgage-step.entity.js +52 -0
- package/dist/entities/mortgage-step.entity.js.map +1 -0
- package/dist/entities/mortgage-transition-event.entity.d.ts +26 -0
- package/dist/entities/mortgage-transition-event.entity.js +111 -0
- package/dist/entities/mortgage-transition-event.entity.js.map +1 -0
- package/dist/entities/mortgage-transition.entity.d.ts +25 -0
- package/dist/entities/mortgage-transition.entity.js +91 -0
- package/dist/entities/mortgage-transition.entity.js.map +1 -0
- package/dist/entities/mortgage-type.entity.d.ts +10 -0
- package/dist/entities/mortgage-type.entity.js +46 -0
- package/dist/entities/mortgage-type.entity.js.map +1 -0
- package/dist/entities/mortgage.entity.d.ts +37 -0
- package/dist/entities/mortgage.entity.js +124 -0
- package/dist/entities/mortgage.entity.js.map +1 -0
- package/dist/entities/password_reset_tokens.entity.d.ts +7 -0
- package/dist/entities/password_reset_tokens.entity.js +45 -0
- package/dist/entities/password_reset_tokens.entity.js.map +1 -0
- package/dist/entities/payment-installment.entity.d.ts +39 -0
- package/dist/entities/payment-installment.entity.js +134 -0
- package/dist/entities/payment-installment.entity.js.map +1 -0
- package/dist/entities/payment-plan.entity.d.ts +62 -0
- package/dist/entities/payment-plan.entity.js +174 -0
- package/dist/entities/payment-plan.entity.js.map +1 -0
- package/dist/entities/payment-schedule.entity.d.ts +44 -0
- package/dist/entities/payment-schedule.entity.js +134 -0
- package/dist/entities/payment-schedule.entity.js.map +1 -0
- package/dist/entities/payment.entity.d.ts +55 -0
- package/dist/entities/payment.entity.js +157 -0
- package/dist/entities/payment.entity.js.map +1 -0
- package/dist/entities/permission.entity.d.ts +6 -0
- package/dist/entities/permission.entity.js +30 -0
- package/dist/entities/permission.entity.js.map +1 -0
- package/dist/entities/property-document.entity.d.ts +6 -0
- package/dist/entities/property-document.entity.js +34 -0
- package/dist/entities/property-document.entity.js.map +1 -0
- package/dist/entities/property-media.entity.d.ts +6 -0
- package/dist/entities/property-media.entity.js +37 -0
- package/dist/entities/property-media.entity.js.map +1 -0
- package/dist/entities/property.entity.d.ts +40 -0
- package/dist/entities/property.entity.js +202 -0
- package/dist/entities/property.entity.js.map +1 -0
- package/dist/entities/refresh_token.entity.d.ts +7 -0
- package/dist/entities/refresh_token.entity.js +35 -0
- package/dist/entities/refresh_token.entity.js.map +1 -0
- package/dist/entities/role.entity.d.ts +8 -0
- package/dist/entities/role.entity.js +39 -0
- package/dist/entities/role.entity.js.map +1 -0
- package/dist/entities/settings.entity.d.ts +17 -0
- package/dist/entities/settings.entity.js +81 -0
- package/dist/entities/settings.entity.js.map +1 -0
- package/dist/entities/social.entity.d.ts +8 -0
- package/dist/entities/social.entity.js +48 -0
- package/dist/entities/social.entity.js.map +1 -0
- package/dist/entities/tenant.entity.d.ts +32 -0
- package/dist/entities/tenant.entity.js +101 -0
- package/dist/entities/tenant.entity.js.map +1 -0
- package/dist/entities/transaction.entity.d.ts +17 -0
- package/dist/entities/transaction.entity.js +87 -0
- package/dist/entities/transaction.entity.js.map +1 -0
- package/dist/entities/user.entity.d.ts +28 -0
- package/dist/entities/user.entity.js +109 -0
- package/dist/entities/user.entity.js.map +1 -0
- package/dist/entities/user_suspensions.entity.d.ts +7 -0
- package/dist/entities/user_suspensions.entity.js +44 -0
- package/dist/entities/user_suspensions.entity.js.map +1 -0
- package/dist/entities/wallet.entity.d.ts +17 -0
- package/dist/entities/wallet.entity.js +79 -0
- package/dist/entities/wallet.entity.js.map +1 -0
- package/dist/guard/index.d.ts +2 -0
- package/dist/guard/index.js +19 -0
- package/dist/guard/index.js.map +1 -0
- package/dist/guard/permission.guard.d.ts +10 -0
- package/dist/guard/permission.guard.js +47 -0
- package/dist/guard/permission.guard.js.map +1 -0
- package/dist/guard/swagger-auth.guard.d.ts +1 -0
- package/dist/guard/swagger-auth.guard.js +9 -0
- package/dist/guard/swagger-auth.guard.js.map +1 -0
- package/dist/helpers/ArrayHelper.d.ts +2 -0
- package/dist/helpers/ArrayHelper.js +6 -0
- package/dist/helpers/ArrayHelper.js.map +1 -0
- package/dist/helpers/ConstantHelper.d.ts +36 -0
- package/dist/helpers/ConstantHelper.js +90 -0
- package/dist/helpers/ConstantHelper.js.map +1 -0
- package/dist/helpers/CustomNamingStrategy.d.ts +7 -0
- package/dist/helpers/CustomNamingStrategy.js +22 -0
- package/dist/helpers/CustomNamingStrategy.js.map +1 -0
- package/dist/helpers/DateHelper.d.ts +3 -0
- package/dist/helpers/DateHelper.js +20 -0
- package/dist/helpers/DateHelper.js.map +1 -0
- package/dist/helpers/EmailHelper.d.ts +4 -0
- package/dist/helpers/EmailHelper.js +55 -0
- package/dist/helpers/EmailHelper.js.map +1 -0
- package/dist/helpers/FileSystemHelper.d.ts +15 -0
- package/dist/helpers/FileSystemHelper.js +102 -0
- package/dist/helpers/FileSystemHelper.js.map +1 -0
- package/dist/helpers/index.d.ts +5 -0
- package/dist/helpers/index.js +22 -0
- package/dist/helpers/index.js.map +1 -0
- package/dist/index.d.ts +16 -2
- package/dist/index.js +33 -2
- package/dist/index.js.map +1 -0
- package/dist/middleware/AccessLoggerMiddleware.d.ts +6 -0
- package/dist/middleware/AccessLoggerMiddleware.js +64 -0
- package/dist/middleware/AccessLoggerMiddleware.js.map +1 -0
- package/dist/middleware/AuthenticationMiddleware.d.ts +5 -0
- package/dist/middleware/AuthenticationMiddleware.js +19 -0
- package/dist/middleware/AuthenticationMiddleware.js.map +1 -0
- package/dist/middleware/TenantMiddleware.d.ts +14 -0
- package/dist/middleware/TenantMiddleware.js +49 -0
- package/dist/middleware/TenantMiddleware.js.map +1 -0
- package/dist/middleware/index.d.ts +3 -0
- package/dist/middleware/index.js +20 -0
- package/dist/middleware/index.js.map +1 -0
- package/dist/pagination/index.d.ts +2 -0
- package/dist/pagination/index.js +19 -0
- package/dist/pagination/index.js.map +1 -0
- package/dist/pagination/pagination.helper.d.ts +7 -0
- package/dist/pagination/pagination.helper.js +40 -0
- package/dist/pagination/pagination.helper.js.map +1 -0
- package/dist/pagination/pagination.types.d.ts +19 -0
- package/dist/pagination/pagination.types.js +3 -0
- package/dist/pagination/pagination.types.js.map +1 -0
- package/dist/qr-code/qr-code.dto.d.ts +3 -0
- package/dist/qr-code/qr-code.dto.js +21 -0
- package/dist/qr-code/qr-code.dto.js.map +1 -0
- package/dist/qr-code/qr-code.module.d.ts +2 -0
- package/dist/qr-code/qr-code.module.js +24 -0
- package/dist/qr-code/qr-code.module.js.map +1 -0
- package/dist/qr-code/qr-code.service.d.ts +11 -0
- package/dist/qr-code/qr-code.service.js +89 -0
- package/dist/qr-code/qr-code.service.js.map +1 -0
- package/dist/qr-code/qr-code.type.d.ts +5 -0
- package/dist/qr-code/qr-code.type.js +3 -0
- package/dist/qr-code/qr-code.type.js.map +1 -0
- package/dist/src/config/config.service.d.ts +61 -0
- package/dist/src/config/config.service.js +144 -0
- package/dist/src/config/config.service.js.map +1 -0
- package/dist/src/config/index.d.ts +1 -0
- package/dist/src/config/index.js +18 -0
- package/dist/src/config/index.js.map +1 -0
- package/dist/standard-response.d.ts +7 -0
- package/dist/standard-response.js +27 -0
- package/dist/standard-response.js.map +1 -0
- package/dist/tsconfig.tsbuildinfo +1 -0
- package/dist/types/common.type.d.ts +54 -0
- package/dist/types/common.type.js +55 -0
- package/dist/types/common.type.js.map +1 -0
- package/dist/types/index.d.ts +8 -0
- package/dist/types/index.js +25 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/mortgage-fsm.type.d.ts +180 -0
- package/dist/types/mortgage-fsm.type.js +130 -0
- package/dist/types/mortgage-fsm.type.js.map +1 -0
- package/dist/types/permission.type.d.ts +42 -0
- package/dist/types/permission.type.js +47 -0
- package/dist/types/permission.type.js.map +1 -0
- package/dist/types/policy.type.d.ts +18 -0
- package/dist/types/policy.type.js +3 -0
- package/dist/types/policy.type.js.map +1 -0
- package/dist/types/property.type.d.ts +13 -0
- package/dist/types/property.type.js +20 -0
- package/dist/types/property.type.js.map +1 -0
- package/dist/types/tenant.type.d.ts +13 -0
- package/dist/types/tenant.type.js +19 -0
- package/dist/types/tenant.type.js.map +1 -0
- package/dist/types/transaction.type.d.ts +8 -0
- package/dist/types/transaction.type.js +14 -0
- package/dist/types/transaction.type.js.map +1 -0
- package/dist/types/user.type.d.ts +10 -0
- package/dist/types/user.type.js +16 -0
- package/dist/types/user.type.js.map +1 -0
- package/package.json +100 -32
- package/dist/types/prisma.d.ts +0 -2
- package/dist/types/prisma.js +0 -2
- package/dist/types/response.d.ts +0 -15
- package/dist/types/response.js +0 -6
- package/dist/utils/errors.d.ts +0 -21
- package/dist/utils/errors.js +0 -28
- package/prisma/schema.prisma +0 -636
package/prisma/schema.prisma
DELETED
|
@@ -1,636 +0,0 @@
|
|
|
1
|
-
// =============================================================================
|
|
2
|
-
// QSHELTER UNIFIED DATABASE SCHEMA
|
|
3
|
-
// =============================================================================
|
|
4
|
-
// This schema contains all database models for the QShelter platform
|
|
5
|
-
// Organized by domain for better readability
|
|
6
|
-
// =============================================================================
|
|
7
|
-
|
|
8
|
-
generator client {
|
|
9
|
-
provider = "prisma-client"
|
|
10
|
-
output = "../generated/client"
|
|
11
|
-
}
|
|
12
|
-
|
|
13
|
-
datasource db {
|
|
14
|
-
provider = "mysql"
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
// =============================================================================
|
|
18
|
-
// USER & AUTH DOMAIN
|
|
19
|
-
// =============================================================================
|
|
20
|
-
|
|
21
|
-
model User {
|
|
22
|
-
id String @id @default(cuid())
|
|
23
|
-
email String @unique
|
|
24
|
-
password String?
|
|
25
|
-
firstName String?
|
|
26
|
-
lastName String?
|
|
27
|
-
isActive Boolean @default(true)
|
|
28
|
-
isVerified Boolean @default(false)
|
|
29
|
-
googleId String? @unique
|
|
30
|
-
tenantId String?
|
|
31
|
-
tenant Tenant? @relation(fields: [tenantId], references: [id], onDelete: SetNull)
|
|
32
|
-
roleId String?
|
|
33
|
-
role Role? @relation(fields: [roleId], references: [id], onDelete: SetNull)
|
|
34
|
-
walletId String? @unique
|
|
35
|
-
wallet Wallet? @relation(fields: [walletId], references: [id])
|
|
36
|
-
createdAt DateTime @default(now())
|
|
37
|
-
updatedAt DateTime @updatedAt
|
|
38
|
-
emailVerifiedAt DateTime?
|
|
39
|
-
lastLoginAt DateTime?
|
|
40
|
-
refreshTokens RefreshToken[]
|
|
41
|
-
passwordResets PasswordReset[]
|
|
42
|
-
suspensions UserSuspension[]
|
|
43
|
-
emailPreferences EmailPreference[]
|
|
44
|
-
deviceEndpoints DeviceEndpoint[]
|
|
45
|
-
socials Social[]
|
|
46
|
-
|
|
47
|
-
// Relations to other domains
|
|
48
|
-
properties Property[]
|
|
49
|
-
mortgages Mortgage[] @relation("MortgageBorrower")
|
|
50
|
-
paymentPlans PaymentPlan[]
|
|
51
|
-
contracts Contract[] @relation("ContractBuyer")
|
|
52
|
-
soldContracts Contract[] @relation("ContractSeller")
|
|
53
|
-
payments Payment[]
|
|
54
|
-
|
|
55
|
-
@@index([email])
|
|
56
|
-
@@index([tenantId])
|
|
57
|
-
@@index([roleId])
|
|
58
|
-
@@map("users")
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
model Role {
|
|
62
|
-
id String @id @default(cuid())
|
|
63
|
-
name String @unique
|
|
64
|
-
description String?
|
|
65
|
-
users User[]
|
|
66
|
-
permissions RolePermission[]
|
|
67
|
-
createdAt DateTime @default(now())
|
|
68
|
-
updatedAt DateTime @updatedAt
|
|
69
|
-
|
|
70
|
-
@@map("roles")
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
model Permission {
|
|
74
|
-
id String @id @default(cuid())
|
|
75
|
-
name String @unique
|
|
76
|
-
description String?
|
|
77
|
-
resource String
|
|
78
|
-
action String
|
|
79
|
-
roles RolePermission[]
|
|
80
|
-
createdAt DateTime @default(now())
|
|
81
|
-
updatedAt DateTime @updatedAt
|
|
82
|
-
|
|
83
|
-
@@unique([resource, action])
|
|
84
|
-
@@index([resource])
|
|
85
|
-
@@map("permissions")
|
|
86
|
-
}
|
|
87
|
-
|
|
88
|
-
model RolePermission {
|
|
89
|
-
roleId String
|
|
90
|
-
permissionId String
|
|
91
|
-
role Role @relation(fields: [roleId], references: [id], onDelete: Cascade)
|
|
92
|
-
permission Permission @relation(fields: [permissionId], references: [id], onDelete: Cascade)
|
|
93
|
-
createdAt DateTime @default(now())
|
|
94
|
-
|
|
95
|
-
@@id([roleId, permissionId])
|
|
96
|
-
@@map("role_permissions")
|
|
97
|
-
}
|
|
98
|
-
|
|
99
|
-
model Tenant {
|
|
100
|
-
id String @id @default(cuid())
|
|
101
|
-
name String
|
|
102
|
-
subdomain String @unique
|
|
103
|
-
isActive Boolean @default(true)
|
|
104
|
-
users User[]
|
|
105
|
-
createdAt DateTime @default(now())
|
|
106
|
-
updatedAt DateTime @updatedAt
|
|
107
|
-
|
|
108
|
-
@@index([subdomain])
|
|
109
|
-
@@map("tenants")
|
|
110
|
-
}
|
|
111
|
-
|
|
112
|
-
model RefreshToken {
|
|
113
|
-
id String @id @default(cuid())
|
|
114
|
-
token String @unique
|
|
115
|
-
userId String
|
|
116
|
-
user User @relation(fields: [userId], references: [id], onDelete: Cascade)
|
|
117
|
-
expiresAt DateTime
|
|
118
|
-
createdAt DateTime @default(now())
|
|
119
|
-
|
|
120
|
-
@@index([userId])
|
|
121
|
-
@@index([expiresAt])
|
|
122
|
-
@@map("refresh_tokens")
|
|
123
|
-
}
|
|
124
|
-
|
|
125
|
-
model PasswordReset {
|
|
126
|
-
id String @id @default(cuid())
|
|
127
|
-
token String @unique
|
|
128
|
-
userId String
|
|
129
|
-
user User @relation(fields: [userId], references: [id], onDelete: Cascade)
|
|
130
|
-
expiresAt DateTime
|
|
131
|
-
usedAt DateTime?
|
|
132
|
-
createdAt DateTime @default(now())
|
|
133
|
-
|
|
134
|
-
@@index([userId])
|
|
135
|
-
@@index([expiresAt])
|
|
136
|
-
@@map("password_resets")
|
|
137
|
-
}
|
|
138
|
-
|
|
139
|
-
model UserSuspension {
|
|
140
|
-
id String @id @default(cuid())
|
|
141
|
-
userId String
|
|
142
|
-
user User @relation(fields: [userId], references: [id], onDelete: Cascade)
|
|
143
|
-
reason String
|
|
144
|
-
suspendedAt DateTime @default(now())
|
|
145
|
-
expiresAt DateTime?
|
|
146
|
-
liftedAt DateTime?
|
|
147
|
-
|
|
148
|
-
@@index([userId])
|
|
149
|
-
@@map("user_suspensions")
|
|
150
|
-
}
|
|
151
|
-
|
|
152
|
-
model EmailPreference {
|
|
153
|
-
id String @id @default(cuid())
|
|
154
|
-
userId String
|
|
155
|
-
user User @relation(fields: [userId], references: [id], onDelete: Cascade)
|
|
156
|
-
marketingEmails Boolean @default(true)
|
|
157
|
-
transactionalEmails Boolean @default(true)
|
|
158
|
-
propertyAlerts Boolean @default(true)
|
|
159
|
-
paymentReminders Boolean @default(true)
|
|
160
|
-
createdAt DateTime @default(now())
|
|
161
|
-
updatedAt DateTime @updatedAt
|
|
162
|
-
|
|
163
|
-
@@index([userId])
|
|
164
|
-
@@map("email_preferences")
|
|
165
|
-
}
|
|
166
|
-
|
|
167
|
-
model DeviceEndpoint {
|
|
168
|
-
id String @id @default(cuid())
|
|
169
|
-
userId String
|
|
170
|
-
user User @relation(fields: [userId], references: [id], onDelete: Cascade)
|
|
171
|
-
endpoint String // Push notification endpoint
|
|
172
|
-
platform String // ios, android, web
|
|
173
|
-
isActive Boolean @default(true)
|
|
174
|
-
createdAt DateTime @default(now())
|
|
175
|
-
updatedAt DateTime @updatedAt
|
|
176
|
-
|
|
177
|
-
@@index([userId])
|
|
178
|
-
@@map("device_endpoints")
|
|
179
|
-
}
|
|
180
|
-
|
|
181
|
-
model Social {
|
|
182
|
-
id String @id @default(cuid())
|
|
183
|
-
userId String
|
|
184
|
-
user User @relation(fields: [userId], references: [id], onDelete: Cascade)
|
|
185
|
-
provider String // google, facebook, twitter, etc
|
|
186
|
-
socialId String // ID from the social provider
|
|
187
|
-
createdAt DateTime @default(now())
|
|
188
|
-
updatedAt DateTime @updatedAt
|
|
189
|
-
|
|
190
|
-
@@unique([provider, socialId])
|
|
191
|
-
@@index([userId])
|
|
192
|
-
@@map("socials")
|
|
193
|
-
}
|
|
194
|
-
|
|
195
|
-
model Wallet {
|
|
196
|
-
id String @id @default(cuid())
|
|
197
|
-
balance Float @default(0)
|
|
198
|
-
currency String @default("USD")
|
|
199
|
-
user User?
|
|
200
|
-
transactions Transaction[]
|
|
201
|
-
createdAt DateTime @default(now())
|
|
202
|
-
updatedAt DateTime @updatedAt
|
|
203
|
-
|
|
204
|
-
@@map("wallets")
|
|
205
|
-
}
|
|
206
|
-
|
|
207
|
-
model Transaction {
|
|
208
|
-
id String @id @default(cuid())
|
|
209
|
-
walletId String
|
|
210
|
-
wallet Wallet @relation(fields: [walletId], references: [id], onDelete: Cascade)
|
|
211
|
-
amount Float
|
|
212
|
-
type String // CREDIT, DEBIT
|
|
213
|
-
status String // PENDING, COMPLETED, FAILED
|
|
214
|
-
reference String?
|
|
215
|
-
description String?
|
|
216
|
-
createdAt DateTime @default(now())
|
|
217
|
-
updatedAt DateTime @updatedAt
|
|
218
|
-
|
|
219
|
-
@@index([walletId])
|
|
220
|
-
@@map("transactions")
|
|
221
|
-
}
|
|
222
|
-
|
|
223
|
-
model Settings {
|
|
224
|
-
id String @id @default(cuid())
|
|
225
|
-
key String @unique
|
|
226
|
-
value String @db.Text
|
|
227
|
-
category String?
|
|
228
|
-
createdAt DateTime @default(now())
|
|
229
|
-
updatedAt DateTime @updatedAt
|
|
230
|
-
|
|
231
|
-
@@index([category])
|
|
232
|
-
@@map("settings")
|
|
233
|
-
}
|
|
234
|
-
|
|
235
|
-
// =============================================================================
|
|
236
|
-
// PROPERTY DOMAIN
|
|
237
|
-
// =============================================================================
|
|
238
|
-
|
|
239
|
-
model Property {
|
|
240
|
-
id String @id @default(cuid())
|
|
241
|
-
userId String
|
|
242
|
-
user User @relation(fields: [userId], references: [id], onDelete: Cascade)
|
|
243
|
-
title String
|
|
244
|
-
category String // SALE, RENT, LEASE
|
|
245
|
-
propertyType String // APARTMENT, HOUSE, LAND, COMMERCIAL
|
|
246
|
-
country String
|
|
247
|
-
currency String // USD, NGN, etc
|
|
248
|
-
city String
|
|
249
|
-
district String?
|
|
250
|
-
zipCode String?
|
|
251
|
-
streetAddress String?
|
|
252
|
-
nBedrooms String
|
|
253
|
-
nBathrooms String
|
|
254
|
-
nParkingSpots String
|
|
255
|
-
price Float
|
|
256
|
-
longitude Float?
|
|
257
|
-
latitude Float?
|
|
258
|
-
area Float?
|
|
259
|
-
status String @default("DRAFT") // DRAFT, PUBLISHED, SOLD, RENTED
|
|
260
|
-
description String? @db.Text
|
|
261
|
-
displayImageId String?
|
|
262
|
-
displayImage PropertyMedia? @relation("DisplayImage", fields: [displayImageId], references: [id], onDelete: SetNull)
|
|
263
|
-
isPublished Boolean @default(false)
|
|
264
|
-
publishedAt DateTime?
|
|
265
|
-
createdAt DateTime @default(now())
|
|
266
|
-
updatedAt DateTime @updatedAt
|
|
267
|
-
|
|
268
|
-
documents PropertyDocument[]
|
|
269
|
-
media PropertyMedia[] @relation("PropertyMedia")
|
|
270
|
-
amenities PropertyAmenity[]
|
|
271
|
-
mortgages Mortgage[]
|
|
272
|
-
paymentPlans PaymentPlan[]
|
|
273
|
-
contracts Contract[]
|
|
274
|
-
|
|
275
|
-
@@index([userId])
|
|
276
|
-
@@index([category])
|
|
277
|
-
@@index([propertyType])
|
|
278
|
-
@@index([city])
|
|
279
|
-
@@map("properties")
|
|
280
|
-
}
|
|
281
|
-
|
|
282
|
-
model PropertyMedia {
|
|
283
|
-
id String @id @default(cuid())
|
|
284
|
-
propertyId String
|
|
285
|
-
property Property @relation("PropertyMedia", fields: [propertyId], references: [id], onDelete: Cascade)
|
|
286
|
-
url String
|
|
287
|
-
type String // IMAGE, VIDEO
|
|
288
|
-
caption String?
|
|
289
|
-
order Int @default(0)
|
|
290
|
-
createdAt DateTime @default(now())
|
|
291
|
-
updatedAt DateTime @updatedAt
|
|
292
|
-
|
|
293
|
-
displayForProperties Property[] @relation("DisplayImage")
|
|
294
|
-
|
|
295
|
-
@@index([propertyId])
|
|
296
|
-
@@map("property_media")
|
|
297
|
-
}
|
|
298
|
-
|
|
299
|
-
model PropertyDocument {
|
|
300
|
-
id String @id @default(cuid())
|
|
301
|
-
propertyId String
|
|
302
|
-
property Property @relation(fields: [propertyId], references: [id], onDelete: Cascade)
|
|
303
|
-
name String
|
|
304
|
-
url String
|
|
305
|
-
type String // TITLE_DEED, SURVEY_PLAN, etc
|
|
306
|
-
createdAt DateTime @default(now())
|
|
307
|
-
updatedAt DateTime @updatedAt
|
|
308
|
-
|
|
309
|
-
@@index([propertyId])
|
|
310
|
-
@@map("property_documents")
|
|
311
|
-
}
|
|
312
|
-
|
|
313
|
-
model Amenity {
|
|
314
|
-
id String @id @default(cuid())
|
|
315
|
-
name String @unique
|
|
316
|
-
createdAt DateTime @default(now())
|
|
317
|
-
updatedAt DateTime @updatedAt
|
|
318
|
-
properties PropertyAmenity[]
|
|
319
|
-
|
|
320
|
-
@@map("amenities")
|
|
321
|
-
}
|
|
322
|
-
|
|
323
|
-
model PropertyAmenity {
|
|
324
|
-
propertyId String
|
|
325
|
-
amenityId String
|
|
326
|
-
property Property @relation(fields: [propertyId], references: [id], onDelete: Cascade)
|
|
327
|
-
amenity Amenity @relation(fields: [amenityId], references: [id], onDelete: Cascade)
|
|
328
|
-
createdAt DateTime @default(now())
|
|
329
|
-
|
|
330
|
-
@@id([propertyId, amenityId])
|
|
331
|
-
@@map("property_amenities")
|
|
332
|
-
}
|
|
333
|
-
|
|
334
|
-
// =============================================================================
|
|
335
|
-
// MORTGAGE DOMAIN
|
|
336
|
-
// =============================================================================
|
|
337
|
-
|
|
338
|
-
model Mortgage {
|
|
339
|
-
id String @id @default(cuid())
|
|
340
|
-
propertyId String
|
|
341
|
-
property Property @relation(fields: [propertyId], references: [id], onDelete: Cascade)
|
|
342
|
-
borrowerId String
|
|
343
|
-
borrower User @relation("MortgageBorrower", fields: [borrowerId], references: [id], onDelete: Cascade)
|
|
344
|
-
mortgageTypeId String?
|
|
345
|
-
mortgageType MortgageType? @relation(fields: [mortgageTypeId], references: [id])
|
|
346
|
-
downpaymentPlanId String?
|
|
347
|
-
downpaymentPlan MortgageDownpaymentPlan? @relation(fields: [downpaymentPlanId], references: [id])
|
|
348
|
-
principal Float
|
|
349
|
-
downPayment Float
|
|
350
|
-
downPaymentPaid Float @default(0)
|
|
351
|
-
termMonths Int
|
|
352
|
-
interestRate Float
|
|
353
|
-
monthlyPayment Float
|
|
354
|
-
status String @default("DRAFT") // DRAFT, PENDING, ACTIVE, COMPLETED, CANCELLED
|
|
355
|
-
state String @default("DRAFT") // FSM state
|
|
356
|
-
stateMetadata String? @db.Text // JSON metadata
|
|
357
|
-
lastReminderSentAt DateTime?
|
|
358
|
-
createdAt DateTime @default(now())
|
|
359
|
-
updatedAt DateTime @updatedAt
|
|
360
|
-
|
|
361
|
-
documents MortgageDocument[]
|
|
362
|
-
steps MortgageStep[]
|
|
363
|
-
transitions MortgageTransition[]
|
|
364
|
-
transitionEvents MortgageTransitionEvent[]
|
|
365
|
-
|
|
366
|
-
@@index([propertyId])
|
|
367
|
-
@@index([borrowerId])
|
|
368
|
-
@@index([status])
|
|
369
|
-
@@index([state])
|
|
370
|
-
@@map("mortgages")
|
|
371
|
-
}
|
|
372
|
-
|
|
373
|
-
model MortgageType {
|
|
374
|
-
id String @id @default(cuid())
|
|
375
|
-
name String @unique
|
|
376
|
-
description String? @db.Text
|
|
377
|
-
createdAt DateTime @default(now())
|
|
378
|
-
updatedAt DateTime @updatedAt
|
|
379
|
-
mortgages Mortgage[]
|
|
380
|
-
|
|
381
|
-
@@map("mortgage_types")
|
|
382
|
-
}
|
|
383
|
-
|
|
384
|
-
model MortgageDocument {
|
|
385
|
-
id String @id @default(cuid())
|
|
386
|
-
mortgageId String
|
|
387
|
-
mortgage Mortgage @relation(fields: [mortgageId], references: [id], onDelete: Cascade)
|
|
388
|
-
name String
|
|
389
|
-
url String
|
|
390
|
-
type String // INCOME_PROOF, ID, etc
|
|
391
|
-
createdAt DateTime @default(now())
|
|
392
|
-
updatedAt DateTime @updatedAt
|
|
393
|
-
|
|
394
|
-
@@index([mortgageId])
|
|
395
|
-
@@map("mortgage_documents")
|
|
396
|
-
}
|
|
397
|
-
|
|
398
|
-
model MortgageStep {
|
|
399
|
-
id String @id @default(cuid())
|
|
400
|
-
mortgageId String
|
|
401
|
-
mortgage Mortgage @relation(fields: [mortgageId], references: [id], onDelete: Cascade)
|
|
402
|
-
name String
|
|
403
|
-
description String? @db.Text
|
|
404
|
-
order Int
|
|
405
|
-
isCompleted Boolean @default(false)
|
|
406
|
-
completedAt DateTime?
|
|
407
|
-
createdAt DateTime @default(now())
|
|
408
|
-
updatedAt DateTime @updatedAt
|
|
409
|
-
|
|
410
|
-
@@index([mortgageId])
|
|
411
|
-
@@map("mortgage_steps")
|
|
412
|
-
}
|
|
413
|
-
|
|
414
|
-
model MortgageDownpaymentPlan {
|
|
415
|
-
id String @id @default(cuid())
|
|
416
|
-
totalAmount Float
|
|
417
|
-
paidAmount Float @default(0)
|
|
418
|
-
status String @default("PENDING") // PENDING, ACTIVE, COMPLETED
|
|
419
|
-
startDate DateTime
|
|
420
|
-
endDate DateTime
|
|
421
|
-
createdAt DateTime @default(now())
|
|
422
|
-
updatedAt DateTime @updatedAt
|
|
423
|
-
|
|
424
|
-
mortgages Mortgage[]
|
|
425
|
-
installments MortgageDownpaymentInstallment[]
|
|
426
|
-
payments MortgageDownpaymentPayment[]
|
|
427
|
-
|
|
428
|
-
@@map("mortgage_downpayment_plans")
|
|
429
|
-
}
|
|
430
|
-
|
|
431
|
-
model MortgageDownpaymentInstallment {
|
|
432
|
-
id String @id @default(cuid())
|
|
433
|
-
planId String
|
|
434
|
-
plan MortgageDownpaymentPlan @relation(fields: [planId], references: [id], onDelete: Cascade)
|
|
435
|
-
amount Float
|
|
436
|
-
dueDate DateTime
|
|
437
|
-
isPaid Boolean @default(false)
|
|
438
|
-
paidDate DateTime?
|
|
439
|
-
createdAt DateTime @default(now())
|
|
440
|
-
updatedAt DateTime @updatedAt
|
|
441
|
-
|
|
442
|
-
@@index([planId])
|
|
443
|
-
@@map("mortgage_downpayment_installments")
|
|
444
|
-
}
|
|
445
|
-
|
|
446
|
-
model MortgageDownpaymentPayment {
|
|
447
|
-
id String @id @default(cuid())
|
|
448
|
-
planId String
|
|
449
|
-
plan MortgageDownpaymentPlan @relation(fields: [planId], references: [id], onDelete: Cascade)
|
|
450
|
-
amount Float
|
|
451
|
-
paymentMethod String
|
|
452
|
-
reference String?
|
|
453
|
-
status String @default("PENDING")
|
|
454
|
-
createdAt DateTime @default(now())
|
|
455
|
-
updatedAt DateTime @updatedAt
|
|
456
|
-
|
|
457
|
-
@@index([planId])
|
|
458
|
-
@@map("mortgage_downpayment_payments")
|
|
459
|
-
}
|
|
460
|
-
|
|
461
|
-
model MortgageTransition {
|
|
462
|
-
id String @id @default(cuid())
|
|
463
|
-
mortgageId String
|
|
464
|
-
mortgage Mortgage @relation(fields: [mortgageId], references: [id], onDelete: Cascade)
|
|
465
|
-
fromState String
|
|
466
|
-
toState String
|
|
467
|
-
trigger String
|
|
468
|
-
metadata String? @db.Text // JSON
|
|
469
|
-
transitionedAt DateTime @default(now())
|
|
470
|
-
|
|
471
|
-
@@index([mortgageId])
|
|
472
|
-
@@map("mortgage_transitions")
|
|
473
|
-
}
|
|
474
|
-
|
|
475
|
-
model MortgageTransitionEvent {
|
|
476
|
-
id String @id @default(cuid())
|
|
477
|
-
mortgageId String
|
|
478
|
-
mortgage Mortgage @relation(fields: [mortgageId], references: [id], onDelete: Cascade)
|
|
479
|
-
event String
|
|
480
|
-
data String? @db.Text // JSON
|
|
481
|
-
createdAt DateTime @default(now())
|
|
482
|
-
|
|
483
|
-
@@index([mortgageId])
|
|
484
|
-
@@map("mortgage_transition_events")
|
|
485
|
-
}
|
|
486
|
-
|
|
487
|
-
// =============================================================================
|
|
488
|
-
// PAYMENT & CONTRACT DOMAIN
|
|
489
|
-
// =============================================================================
|
|
490
|
-
|
|
491
|
-
model PaymentPlan {
|
|
492
|
-
id String @id @default(cuid())
|
|
493
|
-
propertyId String
|
|
494
|
-
property Property @relation(fields: [propertyId], references: [id], onDelete: Cascade)
|
|
495
|
-
buyerId String?
|
|
496
|
-
buyer User? @relation(fields: [buyerId], references: [id])
|
|
497
|
-
planType String // MORTGAGE, INSTALLMENT, RENT_TO_OWN, LEASE, OUTRIGHT_PURCHASE, CUSTOM
|
|
498
|
-
name String
|
|
499
|
-
description String? @db.Text
|
|
500
|
-
totalAmount Float
|
|
501
|
-
downPaymentAmount Float @default(0)
|
|
502
|
-
downPaymentPaid Float @default(0)
|
|
503
|
-
principalAmount Float
|
|
504
|
-
interestRate Float @default(0)
|
|
505
|
-
totalInterest Float @default(0)
|
|
506
|
-
state String @default("DRAFT") // FSM state
|
|
507
|
-
stateMetadata String? @db.Text
|
|
508
|
-
createdAt DateTime @default(now())
|
|
509
|
-
updatedAt DateTime @updatedAt
|
|
510
|
-
|
|
511
|
-
contract Contract?
|
|
512
|
-
schedules PaymentSchedule[]
|
|
513
|
-
payments Payment[]
|
|
514
|
-
|
|
515
|
-
@@index([propertyId])
|
|
516
|
-
@@index([buyerId])
|
|
517
|
-
@@index([state])
|
|
518
|
-
@@map("payment_plans")
|
|
519
|
-
}
|
|
520
|
-
|
|
521
|
-
model PaymentSchedule {
|
|
522
|
-
id String @id @default(cuid())
|
|
523
|
-
planId String
|
|
524
|
-
plan PaymentPlan @relation(fields: [planId], references: [id], onDelete: Cascade)
|
|
525
|
-
name String
|
|
526
|
-
frequency String // MONTHLY, WEEKLY, QUARTERLY, CUSTOM
|
|
527
|
-
startDate DateTime
|
|
528
|
-
endDate DateTime?
|
|
529
|
-
isActive Boolean @default(true)
|
|
530
|
-
createdAt DateTime @default(now())
|
|
531
|
-
updatedAt DateTime @updatedAt
|
|
532
|
-
|
|
533
|
-
installments PaymentInstallment[]
|
|
534
|
-
payments Payment[]
|
|
535
|
-
|
|
536
|
-
@@index([planId])
|
|
537
|
-
@@map("payment_schedules")
|
|
538
|
-
}
|
|
539
|
-
|
|
540
|
-
model PaymentInstallment {
|
|
541
|
-
id String @id @default(cuid())
|
|
542
|
-
scheduleId String
|
|
543
|
-
schedule PaymentSchedule @relation(fields: [scheduleId], references: [id], onDelete: Cascade)
|
|
544
|
-
installmentNumber Int
|
|
545
|
-
amount Float
|
|
546
|
-
principalAmount Float
|
|
547
|
-
interestAmount Float
|
|
548
|
-
dueDate DateTime
|
|
549
|
-
status String @default("PENDING") // PENDING, PAID, OVERDUE, WAIVED
|
|
550
|
-
paidAmount Float @default(0)
|
|
551
|
-
paidDate DateTime?
|
|
552
|
-
lateFee Float @default(0)
|
|
553
|
-
createdAt DateTime @default(now())
|
|
554
|
-
updatedAt DateTime @updatedAt
|
|
555
|
-
|
|
556
|
-
payments Payment[]
|
|
557
|
-
|
|
558
|
-
@@index([scheduleId])
|
|
559
|
-
@@index([dueDate])
|
|
560
|
-
@@index([status])
|
|
561
|
-
@@map("payment_installments")
|
|
562
|
-
}
|
|
563
|
-
|
|
564
|
-
model Payment {
|
|
565
|
-
id String @id @default(cuid())
|
|
566
|
-
planId String
|
|
567
|
-
plan PaymentPlan @relation(fields: [planId], references: [id], onDelete: Cascade)
|
|
568
|
-
scheduleId String?
|
|
569
|
-
schedule PaymentSchedule? @relation(fields: [scheduleId], references: [id])
|
|
570
|
-
installmentId String?
|
|
571
|
-
installment PaymentInstallment? @relation(fields: [installmentId], references: [id])
|
|
572
|
-
payerId String?
|
|
573
|
-
payer User? @relation(fields: [payerId], references: [id])
|
|
574
|
-
amount Float
|
|
575
|
-
principalAmount Float @default(0)
|
|
576
|
-
interestAmount Float @default(0)
|
|
577
|
-
lateFeeAmount Float @default(0)
|
|
578
|
-
paymentMethod String // BANK_TRANSFER, CREDIT_CARD, WALLET, etc
|
|
579
|
-
status String @default("INITIATED") // INITIATED, PENDING, PROCESSING, COMPLETED, FAILED, CANCELLED, REFUNDED
|
|
580
|
-
reference String? @unique
|
|
581
|
-
gatewayResponse String? @db.Text // JSON
|
|
582
|
-
processedAt DateTime?
|
|
583
|
-
createdAt DateTime @default(now())
|
|
584
|
-
updatedAt DateTime @updatedAt
|
|
585
|
-
|
|
586
|
-
@@index([planId])
|
|
587
|
-
@@index([payerId])
|
|
588
|
-
@@index([status])
|
|
589
|
-
@@index([reference])
|
|
590
|
-
@@map("payments")
|
|
591
|
-
}
|
|
592
|
-
|
|
593
|
-
model Contract {
|
|
594
|
-
id String @id @default(cuid())
|
|
595
|
-
propertyId String
|
|
596
|
-
property Property @relation(fields: [propertyId], references: [id], onDelete: Cascade)
|
|
597
|
-
paymentPlanId String? @unique
|
|
598
|
-
paymentPlan PaymentPlan? @relation(fields: [paymentPlanId], references: [id])
|
|
599
|
-
buyerId String?
|
|
600
|
-
buyer User? @relation("ContractBuyer", fields: [buyerId], references: [id])
|
|
601
|
-
sellerId String?
|
|
602
|
-
seller User? @relation("ContractSeller", fields: [sellerId], references: [id])
|
|
603
|
-
contractType String // MORTGAGE, SALE_AGREEMENT, LEASE_AGREEMENT, etc
|
|
604
|
-
contractNumber String @unique
|
|
605
|
-
title String
|
|
606
|
-
description String? @db.Text
|
|
607
|
-
status String @default("DRAFT") // DRAFT, PENDING_SIGNATURE, ACTIVE, COMPLETED, TERMINATED
|
|
608
|
-
startDate DateTime?
|
|
609
|
-
endDate DateTime?
|
|
610
|
-
signedAt DateTime?
|
|
611
|
-
terminatedAt DateTime?
|
|
612
|
-
createdAt DateTime @default(now())
|
|
613
|
-
updatedAt DateTime @updatedAt
|
|
614
|
-
|
|
615
|
-
documents ContractDocument[]
|
|
616
|
-
|
|
617
|
-
@@index([propertyId])
|
|
618
|
-
@@index([buyerId])
|
|
619
|
-
@@index([sellerId])
|
|
620
|
-
@@index([status])
|
|
621
|
-
@@map("contracts")
|
|
622
|
-
}
|
|
623
|
-
|
|
624
|
-
model ContractDocument {
|
|
625
|
-
id String @id @default(cuid())
|
|
626
|
-
contractId String
|
|
627
|
-
contract Contract @relation(fields: [contractId], references: [id], onDelete: Cascade)
|
|
628
|
-
name String
|
|
629
|
-
url String
|
|
630
|
-
type String
|
|
631
|
-
createdAt DateTime @default(now())
|
|
632
|
-
updatedAt DateTime @updatedAt
|
|
633
|
-
|
|
634
|
-
@@index([contractId])
|
|
635
|
-
@@map("contract_documents")
|
|
636
|
-
}
|