@valentine-efagene/qshelter-common 2.0.14 → 2.0.15

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.
@@ -15,14 +15,14 @@ const config = {
15
15
  "clientVersion": "7.2.0",
16
16
  "engineVersion": "0c8ef2ce45c83248ab3df073180d5eda9e8be7a3",
17
17
  "activeProvider": "mysql",
18
- "inlineSchema": "// =============================================================================\n// QSHELTER UNIFIED DATABASE SCHEMA\n// =============================================================================\n// This schema contains all database models for the QShelter platform\n// Organized by domain for better readability\n// =============================================================================\n\ngenerator client {\n provider = \"prisma-client\"\n output = \"../src/generated/client\"\n}\n\ndatasource db {\n provider = \"mysql\"\n}\n\n// =============================================================================\n// USER & AUTH DOMAIN\n// =============================================================================\n\nmodel User {\n id String @id @default(cuid())\n email String @unique\n password String?\n phone String? @unique\n firstName String?\n lastName String?\n isActive Boolean @default(true)\n isEmailVerified Boolean @default(false)\n googleId String?\n avatar String?\n tenantId String?\n tenant Tenant? @relation(fields: [tenantId], references: [id], onDelete: SetNull)\n // Support multiple roles via explicit join table `UserRole`\n userRoles UserRole[]\n walletId String? @unique\n wallet Wallet? @relation(fields: [walletId], references: [id])\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n emailVerifiedAt DateTime?\n emailVerificationToken String?\n lastLoginAt DateTime?\n refreshTokens RefreshToken[]\n passwordResets PasswordReset[]\n suspensions UserSuspension[]\n emailPreferences EmailPreference[]\n deviceEndpoints DeviceEndpoint[]\n socials Social[]\n\n // Relations to other domains\n properties Property[]\n mortgages Mortgage[] @relation(\"MortgageBorrower\")\n paymentPlans PaymentPlan[]\n contracts Contract[] @relation(\"ContractBuyer\")\n soldContracts Contract[] @relation(\"ContractSeller\")\n payments Payment[]\n\n @@index([email])\n @@index([tenantId])\n @@map(\"users\")\n}\n\nmodel Role {\n id String @id @default(cuid())\n name String @unique\n description String?\n userRoles UserRole[]\n permissions RolePermission[]\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n\n @@map(\"roles\")\n}\n\nmodel Permission {\n id String @id @default(cuid())\n name String @unique\n description String?\n resource String\n action String\n roles RolePermission[]\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n\n @@unique([resource, action])\n @@index([resource])\n @@map(\"permissions\")\n}\n\nmodel RolePermission {\n roleId String\n permissionId String\n role Role @relation(fields: [roleId], references: [id], onDelete: Cascade)\n permission Permission @relation(fields: [permissionId], references: [id], onDelete: Cascade)\n createdAt DateTime @default(now())\n\n @@id([roleId, permissionId])\n @@map(\"role_permissions\")\n}\n\nmodel UserRole {\n userId String\n roleId String\n user User @relation(fields: [userId], references: [id], onDelete: Cascade)\n role Role @relation(fields: [roleId], references: [id], onDelete: Cascade)\n createdAt DateTime @default(now())\n\n @@id([userId, roleId])\n @@map(\"user_roles\")\n}\n\nmodel Tenant {\n id String @id @default(cuid())\n name String\n subdomain String @unique\n isActive Boolean @default(true)\n users User[]\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n\n @@index([subdomain])\n @@map(\"tenants\")\n}\n\nmodel RefreshToken {\n id String @id @default(cuid())\n // Store a fixed-length hash for lookup/indexing and keep the raw JWT (optional)\n tokenHash String @unique @db.VarChar(64)\n token String? @db.LongText\n userId String\n user User @relation(fields: [userId], references: [id], onDelete: Cascade)\n expiresAt DateTime\n createdAt DateTime @default(now())\n\n @@index([userId])\n @@index([expiresAt])\n @@map(\"refresh_tokens\")\n}\n\nmodel PasswordReset {\n id String @id @default(cuid())\n token String @unique\n userId String\n user User @relation(fields: [userId], references: [id], onDelete: Cascade)\n expiresAt DateTime\n usedAt DateTime?\n createdAt DateTime @default(now())\n\n @@index([userId])\n @@index([expiresAt])\n @@map(\"password_resets\")\n}\n\nmodel UserSuspension {\n id String @id @default(cuid())\n userId String\n user User @relation(fields: [userId], references: [id], onDelete: Cascade)\n reason String\n suspendedAt DateTime @default(now())\n expiresAt DateTime?\n liftedAt DateTime?\n\n @@index([userId])\n @@map(\"user_suspensions\")\n}\n\nmodel EmailPreference {\n id String @id @default(cuid())\n userId String\n user User @relation(fields: [userId], references: [id], onDelete: Cascade)\n marketingEmails Boolean @default(true)\n transactionalEmails Boolean @default(true)\n propertyAlerts Boolean @default(true)\n paymentReminders Boolean @default(true)\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n\n @@index([userId])\n @@map(\"email_preferences\")\n}\n\nmodel DeviceEndpoint {\n id String @id @default(cuid())\n userId String\n user User @relation(fields: [userId], references: [id], onDelete: Cascade)\n endpoint String // Push notification endpoint\n platform String // ios, android, web\n isActive Boolean @default(true)\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n\n @@index([userId])\n @@map(\"device_endpoints\")\n}\n\nmodel Social {\n id String @id @default(cuid())\n userId String\n user User @relation(fields: [userId], references: [id], onDelete: Cascade)\n provider String // google, facebook, twitter, etc\n socialId String // ID from the social provider\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n\n @@unique([provider, socialId])\n @@index([userId])\n @@map(\"socials\")\n}\n\nmodel OAuthState {\n id String @id @default(cuid())\n state String @unique\n expiresAt DateTime\n createdAt DateTime @default(now())\n\n @@index([state])\n @@index([expiresAt])\n @@map(\"oauth_states\")\n}\n\nmodel Wallet {\n id String @id @default(cuid())\n balance Float @default(0)\n currency String @default(\"USD\")\n user User?\n transactions Transaction[]\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n\n @@map(\"wallets\")\n}\n\nmodel Transaction {\n id String @id @default(cuid())\n walletId String\n wallet Wallet @relation(fields: [walletId], references: [id], onDelete: Cascade)\n amount Float\n type String // CREDIT, DEBIT\n status String // PENDING, COMPLETED, FAILED\n reference String?\n description String?\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n\n @@index([walletId])\n @@map(\"transactions\")\n}\n\nmodel Settings {\n id String @id @default(cuid())\n key String @unique\n value String @db.Text\n category String?\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n\n @@index([category])\n @@map(\"settings\")\n}\n\n// =============================================================================\n// PROPERTY DOMAIN\n// =============================================================================\n\nmodel Property {\n id String @id @default(cuid())\n userId String\n user User @relation(fields: [userId], references: [id], onDelete: Cascade)\n title String\n category String // SALE, RENT, LEASE\n propertyType String // APARTMENT, HOUSE, LAND, COMMERCIAL\n country String\n currency String // USD, NGN, etc\n city String\n district String?\n zipCode String?\n streetAddress String?\n nBedrooms String\n nBathrooms String\n nParkingSpots String\n price Float\n longitude Float?\n latitude Float?\n area Float?\n status String @default(\"DRAFT\") // DRAFT, PUBLISHED, SOLD, RENTED\n description String? @db.Text\n displayImageId String?\n displayImage PropertyMedia? @relation(\"DisplayImage\", fields: [displayImageId], references: [id], onDelete: SetNull)\n isPublished Boolean @default(false)\n publishedAt DateTime?\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n\n documents PropertyDocument[]\n media PropertyMedia[] @relation(\"PropertyMedia\")\n amenities PropertyAmenity[]\n mortgages Mortgage[]\n paymentPlans PaymentPlan[]\n contracts Contract[]\n\n @@index([userId])\n @@index([category])\n @@index([propertyType])\n @@index([city])\n @@map(\"properties\")\n}\n\nmodel PropertyMedia {\n id String @id @default(cuid())\n propertyId String\n property Property @relation(\"PropertyMedia\", fields: [propertyId], references: [id], onDelete: Cascade)\n url String\n type String // IMAGE, VIDEO\n caption String?\n order Int @default(0)\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n\n displayForProperties Property[] @relation(\"DisplayImage\")\n\n @@index([propertyId])\n @@map(\"property_media\")\n}\n\nmodel PropertyDocument {\n id String @id @default(cuid())\n propertyId String\n property Property @relation(fields: [propertyId], references: [id], onDelete: Cascade)\n name String\n url String\n type String // TITLE_DEED, SURVEY_PLAN, etc\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n\n @@index([propertyId])\n @@map(\"property_documents\")\n}\n\nmodel Amenity {\n id String @id @default(cuid())\n name String @unique\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n properties PropertyAmenity[]\n\n @@map(\"amenities\")\n}\n\nmodel PropertyAmenity {\n propertyId String\n amenityId String\n property Property @relation(fields: [propertyId], references: [id], onDelete: Cascade)\n amenity Amenity @relation(fields: [amenityId], references: [id], onDelete: Cascade)\n createdAt DateTime @default(now())\n\n @@id([propertyId, amenityId])\n @@map(\"property_amenities\")\n}\n\n// =============================================================================\n// MORTGAGE DOMAIN\n// =============================================================================\n\nmodel Mortgage {\n id String @id @default(cuid())\n propertyId String\n property Property @relation(fields: [propertyId], references: [id], onDelete: Cascade)\n borrowerId String\n borrower User @relation(\"MortgageBorrower\", fields: [borrowerId], references: [id], onDelete: Cascade)\n mortgageTypeId String?\n mortgageType MortgageType? @relation(fields: [mortgageTypeId], references: [id])\n downpaymentPlanId String?\n downpaymentPlan MortgageDownpaymentPlan? @relation(fields: [downpaymentPlanId], references: [id])\n principal Float\n downPayment Float\n downPaymentPaid Float @default(0)\n termMonths Int\n interestRate Float\n monthlyPayment Float\n status String @default(\"DRAFT\") // DRAFT, PENDING, ACTIVE, COMPLETED, CANCELLED\n state String @default(\"DRAFT\") // FSM state\n stateMetadata String? @db.Text // JSON metadata\n lastReminderSentAt DateTime?\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n\n documents MortgageDocument[]\n steps MortgageStep[]\n transitions MortgageTransition[]\n transitionEvents MortgageTransitionEvent[]\n\n @@index([propertyId])\n @@index([borrowerId])\n @@index([status])\n @@index([state])\n @@map(\"mortgages\")\n}\n\nmodel MortgageType {\n id String @id @default(cuid())\n name String @unique\n description String? @db.Text\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n mortgages Mortgage[]\n\n @@map(\"mortgage_types\")\n}\n\nmodel MortgageDocument {\n id String @id @default(cuid())\n mortgageId String\n mortgage Mortgage @relation(fields: [mortgageId], references: [id], onDelete: Cascade)\n name String\n url String\n type String // INCOME_PROOF, ID, etc\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n\n @@index([mortgageId])\n @@map(\"mortgage_documents\")\n}\n\nmodel MortgageStep {\n id String @id @default(cuid())\n mortgageId String\n mortgage Mortgage @relation(fields: [mortgageId], references: [id], onDelete: Cascade)\n name String\n description String? @db.Text\n order Int\n isCompleted Boolean @default(false)\n completedAt DateTime?\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n\n @@index([mortgageId])\n @@map(\"mortgage_steps\")\n}\n\nmodel MortgageDownpaymentPlan {\n id String @id @default(cuid())\n totalAmount Float\n paidAmount Float @default(0)\n status String @default(\"PENDING\") // PENDING, ACTIVE, COMPLETED\n startDate DateTime\n endDate DateTime\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n\n mortgages Mortgage[]\n installments MortgageDownpaymentInstallment[]\n payments MortgageDownpaymentPayment[]\n\n @@map(\"mortgage_downpayment_plans\")\n}\n\nmodel MortgageDownpaymentInstallment {\n id String @id @default(cuid())\n planId String\n plan MortgageDownpaymentPlan @relation(fields: [planId], references: [id], onDelete: Cascade)\n amount Float\n dueDate DateTime\n isPaid Boolean @default(false)\n paidDate DateTime?\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n\n @@index([planId])\n @@map(\"mortgage_downpayment_installments\")\n}\n\nmodel MortgageDownpaymentPayment {\n id String @id @default(cuid())\n planId String\n plan MortgageDownpaymentPlan @relation(fields: [planId], references: [id], onDelete: Cascade)\n amount Float\n paymentMethod String\n reference String?\n status String @default(\"PENDING\")\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n\n @@index([planId])\n @@map(\"mortgage_downpayment_payments\")\n}\n\nmodel MortgageTransition {\n id String @id @default(cuid())\n mortgageId String\n mortgage Mortgage @relation(fields: [mortgageId], references: [id], onDelete: Cascade)\n fromState String\n toState String\n trigger String\n metadata String? @db.Text // JSON\n transitionedAt DateTime @default(now())\n\n @@index([mortgageId])\n @@map(\"mortgage_transitions\")\n}\n\nmodel MortgageTransitionEvent {\n id String @id @default(cuid())\n mortgageId String\n mortgage Mortgage @relation(fields: [mortgageId], references: [id], onDelete: Cascade)\n event String\n data String? @db.Text // JSON\n createdAt DateTime @default(now())\n\n @@index([mortgageId])\n @@map(\"mortgage_transition_events\")\n}\n\n// =============================================================================\n// PAYMENT & CONTRACT DOMAIN\n// =============================================================================\n\nmodel PaymentPlan {\n id String @id @default(cuid())\n propertyId String\n property Property @relation(fields: [propertyId], references: [id], onDelete: Cascade)\n buyerId String?\n buyer User? @relation(fields: [buyerId], references: [id])\n planType String // MORTGAGE, INSTALLMENT, RENT_TO_OWN, LEASE, OUTRIGHT_PURCHASE, CUSTOM\n name String\n description String? @db.Text\n totalAmount Float\n downPaymentAmount Float @default(0)\n downPaymentPaid Float @default(0)\n principalAmount Float\n interestRate Float @default(0)\n totalInterest Float @default(0)\n state String @default(\"DRAFT\") // FSM state\n stateMetadata String? @db.Text\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n\n contract Contract?\n schedules PaymentSchedule[]\n payments Payment[]\n\n @@index([propertyId])\n @@index([buyerId])\n @@index([state])\n @@map(\"payment_plans\")\n}\n\nmodel PaymentSchedule {\n id String @id @default(cuid())\n planId String\n plan PaymentPlan @relation(fields: [planId], references: [id], onDelete: Cascade)\n name String\n frequency String // MONTHLY, WEEKLY, QUARTERLY, CUSTOM\n startDate DateTime\n endDate DateTime?\n isActive Boolean @default(true)\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n\n installments PaymentInstallment[]\n payments Payment[]\n\n @@index([planId])\n @@map(\"payment_schedules\")\n}\n\nmodel PaymentInstallment {\n id String @id @default(cuid())\n scheduleId String\n schedule PaymentSchedule @relation(fields: [scheduleId], references: [id], onDelete: Cascade)\n installmentNumber Int\n amount Float\n principalAmount Float\n interestAmount Float\n dueDate DateTime\n status String @default(\"PENDING\") // PENDING, PAID, OVERDUE, WAIVED\n paidAmount Float @default(0)\n paidDate DateTime?\n lateFee Float @default(0)\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n\n payments Payment[]\n\n @@index([scheduleId])\n @@index([dueDate])\n @@index([status])\n @@map(\"payment_installments\")\n}\n\nmodel Payment {\n id String @id @default(cuid())\n planId String\n plan PaymentPlan @relation(fields: [planId], references: [id], onDelete: Cascade)\n scheduleId String?\n schedule PaymentSchedule? @relation(fields: [scheduleId], references: [id])\n installmentId String?\n installment PaymentInstallment? @relation(fields: [installmentId], references: [id])\n payerId String?\n payer User? @relation(fields: [payerId], references: [id])\n amount Float\n principalAmount Float @default(0)\n interestAmount Float @default(0)\n lateFeeAmount Float @default(0)\n paymentMethod String // BANK_TRANSFER, CREDIT_CARD, WALLET, etc\n status String @default(\"INITIATED\") // INITIATED, PENDING, PROCESSING, COMPLETED, FAILED, CANCELLED, REFUNDED\n reference String? @unique\n gatewayResponse String? @db.Text // JSON\n processedAt DateTime?\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n\n @@index([planId])\n @@index([payerId])\n @@index([status])\n @@index([reference])\n @@map(\"payments\")\n}\n\nmodel Contract {\n id String @id @default(cuid())\n propertyId String\n property Property @relation(fields: [propertyId], references: [id], onDelete: Cascade)\n paymentPlanId String? @unique\n paymentPlan PaymentPlan? @relation(fields: [paymentPlanId], references: [id])\n buyerId String?\n buyer User? @relation(\"ContractBuyer\", fields: [buyerId], references: [id])\n sellerId String?\n seller User? @relation(\"ContractSeller\", fields: [sellerId], references: [id])\n contractType String // MORTGAGE, SALE_AGREEMENT, LEASE_AGREEMENT, etc\n contractNumber String @unique\n title String\n description String? @db.Text\n status String @default(\"DRAFT\") // DRAFT, PENDING_SIGNATURE, ACTIVE, COMPLETED, TERMINATED\n startDate DateTime?\n endDate DateTime?\n signedAt DateTime?\n terminatedAt DateTime?\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n\n documents ContractDocument[]\n\n @@index([propertyId])\n @@index([buyerId])\n @@index([sellerId])\n @@index([status])\n @@map(\"contracts\")\n}\n\nmodel ContractDocument {\n id String @id @default(cuid())\n contractId String\n contract Contract @relation(fields: [contractId], references: [id], onDelete: Cascade)\n name String\n url String\n type String\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n\n @@index([contractId])\n @@map(\"contract_documents\")\n}\n",
18
+ "inlineSchema": "// =============================================================================\n// QSHELTER UNIFIED DATABASE SCHEMA\n// =============================================================================\n// This schema contains all database models for the QShelter platform\n// Organized by domain for better readability\n// =============================================================================\n\ngenerator client {\n provider = \"prisma-client\"\n output = \"../src/generated/client\"\n}\n\ndatasource db {\n provider = \"mysql\"\n}\n\n// =============================================================================\n// USER & AUTH DOMAIN\n// =============================================================================\n\nmodel User {\n id String @id @default(cuid())\n email String @unique\n password String?\n phone String? @unique\n firstName String?\n lastName String?\n isActive Boolean @default(true)\n isEmailVerified Boolean @default(false)\n googleId String?\n avatar String?\n tenantId String?\n tenant Tenant? @relation(fields: [tenantId], references: [id], onDelete: SetNull)\n // Support multiple roles via explicit join table `UserRole`\n userRoles UserRole[]\n walletId String? @unique\n wallet Wallet? @relation(fields: [walletId], references: [id])\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n emailVerifiedAt DateTime?\n emailVerificationToken String?\n lastLoginAt DateTime?\n refreshTokens RefreshToken[]\n passwordResets PasswordReset[]\n suspensions UserSuspension[]\n emailPreferences EmailPreference[]\n deviceEndpoints DeviceEndpoint[]\n socials Social[]\n\n // Relations to other domains\n properties Property[]\n mortgages Mortgage[] @relation(\"MortgageBorrower\")\n paymentPlans PaymentPlan[]\n contracts Contract[] @relation(\"ContractBuyer\")\n soldContracts Contract[] @relation(\"ContractSeller\")\n payments Payment[]\n\n @@index([email])\n @@index([tenantId])\n @@map(\"users\")\n}\n\nmodel Role {\n id String @id @default(cuid())\n name String @unique\n description String?\n userRoles UserRole[]\n permissions RolePermission[]\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n\n @@map(\"roles\")\n}\n\nmodel Permission {\n id String @id @default(cuid())\n name String @unique\n description String?\n resource String\n action String\n roles RolePermission[]\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n\n @@unique([resource, action])\n @@index([resource])\n @@map(\"permissions\")\n}\n\nmodel RolePermission {\n roleId String\n permissionId String\n role Role @relation(fields: [roleId], references: [id], onDelete: Cascade)\n permission Permission @relation(fields: [permissionId], references: [id], onDelete: Cascade)\n createdAt DateTime @default(now())\n\n @@id([roleId, permissionId])\n @@map(\"role_permissions\")\n}\n\nmodel UserRole {\n userId String\n roleId String\n user User @relation(fields: [userId], references: [id], onDelete: Cascade)\n role Role @relation(fields: [roleId], references: [id], onDelete: Cascade)\n createdAt DateTime @default(now())\n\n @@id([userId, roleId])\n @@map(\"user_roles\")\n}\n\nmodel Tenant {\n id String @id @default(cuid())\n name String\n subdomain String @unique\n isActive Boolean @default(true)\n users User[]\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n\n @@index([subdomain])\n @@map(\"tenants\")\n}\n\nmodel RefreshToken {\n id String @id @default(cuid())\n // Use the JWT `jti` for indexed lookups and keep the raw JWT (optional)\n jti String? @unique @db.VarChar(255)\n token String? @db.LongText\n userId String\n user User @relation(fields: [userId], references: [id], onDelete: Cascade)\n expiresAt DateTime\n createdAt DateTime @default(now())\n\n @@index([userId])\n @@index([expiresAt])\n @@map(\"refresh_tokens\")\n}\n\nmodel PasswordReset {\n id String @id @default(cuid())\n token String @unique\n userId String\n user User @relation(fields: [userId], references: [id], onDelete: Cascade)\n expiresAt DateTime\n usedAt DateTime?\n createdAt DateTime @default(now())\n\n @@index([userId])\n @@index([expiresAt])\n @@map(\"password_resets\")\n}\n\nmodel UserSuspension {\n id String @id @default(cuid())\n userId String\n user User @relation(fields: [userId], references: [id], onDelete: Cascade)\n reason String\n suspendedAt DateTime @default(now())\n expiresAt DateTime?\n liftedAt DateTime?\n\n @@index([userId])\n @@map(\"user_suspensions\")\n}\n\nmodel EmailPreference {\n id String @id @default(cuid())\n userId String\n user User @relation(fields: [userId], references: [id], onDelete: Cascade)\n marketingEmails Boolean @default(true)\n transactionalEmails Boolean @default(true)\n propertyAlerts Boolean @default(true)\n paymentReminders Boolean @default(true)\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n\n @@index([userId])\n @@map(\"email_preferences\")\n}\n\nmodel DeviceEndpoint {\n id String @id @default(cuid())\n userId String\n user User @relation(fields: [userId], references: [id], onDelete: Cascade)\n endpoint String // Push notification endpoint\n platform String // ios, android, web\n isActive Boolean @default(true)\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n\n @@index([userId])\n @@map(\"device_endpoints\")\n}\n\nmodel Social {\n id String @id @default(cuid())\n userId String\n user User @relation(fields: [userId], references: [id], onDelete: Cascade)\n provider String // google, facebook, twitter, etc\n socialId String // ID from the social provider\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n\n @@unique([provider, socialId])\n @@index([userId])\n @@map(\"socials\")\n}\n\nmodel OAuthState {\n id String @id @default(cuid())\n state String @unique\n expiresAt DateTime\n createdAt DateTime @default(now())\n\n @@index([state])\n @@index([expiresAt])\n @@map(\"oauth_states\")\n}\n\nmodel Wallet {\n id String @id @default(cuid())\n balance Float @default(0)\n currency String @default(\"USD\")\n user User?\n transactions Transaction[]\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n\n @@map(\"wallets\")\n}\n\nmodel Transaction {\n id String @id @default(cuid())\n walletId String\n wallet Wallet @relation(fields: [walletId], references: [id], onDelete: Cascade)\n amount Float\n type String // CREDIT, DEBIT\n status String // PENDING, COMPLETED, FAILED\n reference String?\n description String?\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n\n @@index([walletId])\n @@map(\"transactions\")\n}\n\nmodel Settings {\n id String @id @default(cuid())\n key String @unique\n value String @db.Text\n category String?\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n\n @@index([category])\n @@map(\"settings\")\n}\n\n// =============================================================================\n// PROPERTY DOMAIN\n// =============================================================================\n\nmodel Property {\n id String @id @default(cuid())\n userId String\n user User @relation(fields: [userId], references: [id], onDelete: Cascade)\n title String\n category String // SALE, RENT, LEASE\n propertyType String // APARTMENT, HOUSE, LAND, COMMERCIAL\n country String\n currency String // USD, NGN, etc\n city String\n district String?\n zipCode String?\n streetAddress String?\n nBedrooms String\n nBathrooms String\n nParkingSpots String\n price Float\n longitude Float?\n latitude Float?\n area Float?\n status String @default(\"DRAFT\") // DRAFT, PUBLISHED, SOLD, RENTED\n description String? @db.Text\n displayImageId String?\n displayImage PropertyMedia? @relation(\"DisplayImage\", fields: [displayImageId], references: [id], onDelete: SetNull)\n isPublished Boolean @default(false)\n publishedAt DateTime?\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n\n documents PropertyDocument[]\n media PropertyMedia[] @relation(\"PropertyMedia\")\n amenities PropertyAmenity[]\n mortgages Mortgage[]\n paymentPlans PaymentPlan[]\n contracts Contract[]\n\n @@index([userId])\n @@index([category])\n @@index([propertyType])\n @@index([city])\n @@map(\"properties\")\n}\n\nmodel PropertyMedia {\n id String @id @default(cuid())\n propertyId String\n property Property @relation(\"PropertyMedia\", fields: [propertyId], references: [id], onDelete: Cascade)\n url String\n type String // IMAGE, VIDEO\n caption String?\n order Int @default(0)\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n\n displayForProperties Property[] @relation(\"DisplayImage\")\n\n @@index([propertyId])\n @@map(\"property_media\")\n}\n\nmodel PropertyDocument {\n id String @id @default(cuid())\n propertyId String\n property Property @relation(fields: [propertyId], references: [id], onDelete: Cascade)\n name String\n url String\n type String // TITLE_DEED, SURVEY_PLAN, etc\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n\n @@index([propertyId])\n @@map(\"property_documents\")\n}\n\nmodel Amenity {\n id String @id @default(cuid())\n name String @unique\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n properties PropertyAmenity[]\n\n @@map(\"amenities\")\n}\n\nmodel PropertyAmenity {\n propertyId String\n amenityId String\n property Property @relation(fields: [propertyId], references: [id], onDelete: Cascade)\n amenity Amenity @relation(fields: [amenityId], references: [id], onDelete: Cascade)\n createdAt DateTime @default(now())\n\n @@id([propertyId, amenityId])\n @@map(\"property_amenities\")\n}\n\n// =============================================================================\n// MORTGAGE DOMAIN\n// =============================================================================\n\nmodel Mortgage {\n id String @id @default(cuid())\n propertyId String\n property Property @relation(fields: [propertyId], references: [id], onDelete: Cascade)\n borrowerId String\n borrower User @relation(\"MortgageBorrower\", fields: [borrowerId], references: [id], onDelete: Cascade)\n mortgageTypeId String?\n mortgageType MortgageType? @relation(fields: [mortgageTypeId], references: [id])\n downpaymentPlanId String?\n downpaymentPlan MortgageDownpaymentPlan? @relation(fields: [downpaymentPlanId], references: [id])\n principal Float\n downPayment Float\n downPaymentPaid Float @default(0)\n termMonths Int\n interestRate Float\n monthlyPayment Float\n status String @default(\"DRAFT\") // DRAFT, PENDING, ACTIVE, COMPLETED, CANCELLED\n state String @default(\"DRAFT\") // FSM state\n stateMetadata String? @db.Text // JSON metadata\n lastReminderSentAt DateTime?\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n\n documents MortgageDocument[]\n steps MortgageStep[]\n transitions MortgageTransition[]\n transitionEvents MortgageTransitionEvent[]\n\n @@index([propertyId])\n @@index([borrowerId])\n @@index([status])\n @@index([state])\n @@map(\"mortgages\")\n}\n\nmodel MortgageType {\n id String @id @default(cuid())\n name String @unique\n description String? @db.Text\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n mortgages Mortgage[]\n\n @@map(\"mortgage_types\")\n}\n\nmodel MortgageDocument {\n id String @id @default(cuid())\n mortgageId String\n mortgage Mortgage @relation(fields: [mortgageId], references: [id], onDelete: Cascade)\n name String\n url String\n type String // INCOME_PROOF, ID, etc\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n\n @@index([mortgageId])\n @@map(\"mortgage_documents\")\n}\n\nmodel MortgageStep {\n id String @id @default(cuid())\n mortgageId String\n mortgage Mortgage @relation(fields: [mortgageId], references: [id], onDelete: Cascade)\n name String\n description String? @db.Text\n order Int\n isCompleted Boolean @default(false)\n completedAt DateTime?\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n\n @@index([mortgageId])\n @@map(\"mortgage_steps\")\n}\n\nmodel MortgageDownpaymentPlan {\n id String @id @default(cuid())\n totalAmount Float\n paidAmount Float @default(0)\n status String @default(\"PENDING\") // PENDING, ACTIVE, COMPLETED\n startDate DateTime\n endDate DateTime\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n\n mortgages Mortgage[]\n installments MortgageDownpaymentInstallment[]\n payments MortgageDownpaymentPayment[]\n\n @@map(\"mortgage_downpayment_plans\")\n}\n\nmodel MortgageDownpaymentInstallment {\n id String @id @default(cuid())\n planId String\n plan MortgageDownpaymentPlan @relation(fields: [planId], references: [id], onDelete: Cascade)\n amount Float\n dueDate DateTime\n isPaid Boolean @default(false)\n paidDate DateTime?\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n\n @@index([planId])\n @@map(\"mortgage_downpayment_installments\")\n}\n\nmodel MortgageDownpaymentPayment {\n id String @id @default(cuid())\n planId String\n plan MortgageDownpaymentPlan @relation(fields: [planId], references: [id], onDelete: Cascade)\n amount Float\n paymentMethod String\n reference String?\n status String @default(\"PENDING\")\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n\n @@index([planId])\n @@map(\"mortgage_downpayment_payments\")\n}\n\nmodel MortgageTransition {\n id String @id @default(cuid())\n mortgageId String\n mortgage Mortgage @relation(fields: [mortgageId], references: [id], onDelete: Cascade)\n fromState String\n toState String\n trigger String\n metadata String? @db.Text // JSON\n transitionedAt DateTime @default(now())\n\n @@index([mortgageId])\n @@map(\"mortgage_transitions\")\n}\n\nmodel MortgageTransitionEvent {\n id String @id @default(cuid())\n mortgageId String\n mortgage Mortgage @relation(fields: [mortgageId], references: [id], onDelete: Cascade)\n event String\n data String? @db.Text // JSON\n createdAt DateTime @default(now())\n\n @@index([mortgageId])\n @@map(\"mortgage_transition_events\")\n}\n\n// =============================================================================\n// PAYMENT & CONTRACT DOMAIN\n// =============================================================================\n\nmodel PaymentPlan {\n id String @id @default(cuid())\n propertyId String\n property Property @relation(fields: [propertyId], references: [id], onDelete: Cascade)\n buyerId String?\n buyer User? @relation(fields: [buyerId], references: [id])\n planType String // MORTGAGE, INSTALLMENT, RENT_TO_OWN, LEASE, OUTRIGHT_PURCHASE, CUSTOM\n name String\n description String? @db.Text\n totalAmount Float\n downPaymentAmount Float @default(0)\n downPaymentPaid Float @default(0)\n principalAmount Float\n interestRate Float @default(0)\n totalInterest Float @default(0)\n state String @default(\"DRAFT\") // FSM state\n stateMetadata String? @db.Text\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n\n contract Contract?\n schedules PaymentSchedule[]\n payments Payment[]\n\n @@index([propertyId])\n @@index([buyerId])\n @@index([state])\n @@map(\"payment_plans\")\n}\n\nmodel PaymentSchedule {\n id String @id @default(cuid())\n planId String\n plan PaymentPlan @relation(fields: [planId], references: [id], onDelete: Cascade)\n name String\n frequency String // MONTHLY, WEEKLY, QUARTERLY, CUSTOM\n startDate DateTime\n endDate DateTime?\n isActive Boolean @default(true)\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n\n installments PaymentInstallment[]\n payments Payment[]\n\n @@index([planId])\n @@map(\"payment_schedules\")\n}\n\nmodel PaymentInstallment {\n id String @id @default(cuid())\n scheduleId String\n schedule PaymentSchedule @relation(fields: [scheduleId], references: [id], onDelete: Cascade)\n installmentNumber Int\n amount Float\n principalAmount Float\n interestAmount Float\n dueDate DateTime\n status String @default(\"PENDING\") // PENDING, PAID, OVERDUE, WAIVED\n paidAmount Float @default(0)\n paidDate DateTime?\n lateFee Float @default(0)\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n\n payments Payment[]\n\n @@index([scheduleId])\n @@index([dueDate])\n @@index([status])\n @@map(\"payment_installments\")\n}\n\nmodel Payment {\n id String @id @default(cuid())\n planId String\n plan PaymentPlan @relation(fields: [planId], references: [id], onDelete: Cascade)\n scheduleId String?\n schedule PaymentSchedule? @relation(fields: [scheduleId], references: [id])\n installmentId String?\n installment PaymentInstallment? @relation(fields: [installmentId], references: [id])\n payerId String?\n payer User? @relation(fields: [payerId], references: [id])\n amount Float\n principalAmount Float @default(0)\n interestAmount Float @default(0)\n lateFeeAmount Float @default(0)\n paymentMethod String // BANK_TRANSFER, CREDIT_CARD, WALLET, etc\n status String @default(\"INITIATED\") // INITIATED, PENDING, PROCESSING, COMPLETED, FAILED, CANCELLED, REFUNDED\n reference String? @unique\n gatewayResponse String? @db.Text // JSON\n processedAt DateTime?\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n\n @@index([planId])\n @@index([payerId])\n @@index([status])\n @@index([reference])\n @@map(\"payments\")\n}\n\nmodel Contract {\n id String @id @default(cuid())\n propertyId String\n property Property @relation(fields: [propertyId], references: [id], onDelete: Cascade)\n paymentPlanId String? @unique\n paymentPlan PaymentPlan? @relation(fields: [paymentPlanId], references: [id])\n buyerId String?\n buyer User? @relation(\"ContractBuyer\", fields: [buyerId], references: [id])\n sellerId String?\n seller User? @relation(\"ContractSeller\", fields: [sellerId], references: [id])\n contractType String // MORTGAGE, SALE_AGREEMENT, LEASE_AGREEMENT, etc\n contractNumber String @unique\n title String\n description String? @db.Text\n status String @default(\"DRAFT\") // DRAFT, PENDING_SIGNATURE, ACTIVE, COMPLETED, TERMINATED\n startDate DateTime?\n endDate DateTime?\n signedAt DateTime?\n terminatedAt DateTime?\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n\n documents ContractDocument[]\n\n @@index([propertyId])\n @@index([buyerId])\n @@index([sellerId])\n @@index([status])\n @@map(\"contracts\")\n}\n\nmodel ContractDocument {\n id String @id @default(cuid())\n contractId String\n contract Contract @relation(fields: [contractId], references: [id], onDelete: Cascade)\n name String\n url String\n type String\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n\n @@index([contractId])\n @@map(\"contract_documents\")\n}\n",
19
19
  "runtimeDataModel": {
20
20
  "models": {},
21
21
  "enums": {},
22
22
  "types": {}
23
23
  }
24
24
  };
25
- config.runtimeDataModel = JSON.parse("{\"models\":{\"User\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"email\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"password\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"phone\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"firstName\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"lastName\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"isActive\",\"kind\":\"scalar\",\"type\":\"Boolean\"},{\"name\":\"isEmailVerified\",\"kind\":\"scalar\",\"type\":\"Boolean\"},{\"name\":\"googleId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"avatar\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"tenantId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"tenant\",\"kind\":\"object\",\"type\":\"Tenant\",\"relationName\":\"TenantToUser\"},{\"name\":\"userRoles\",\"kind\":\"object\",\"type\":\"UserRole\",\"relationName\":\"UserToUserRole\"},{\"name\":\"walletId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"wallet\",\"kind\":\"object\",\"type\":\"Wallet\",\"relationName\":\"UserToWallet\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"emailVerifiedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"emailVerificationToken\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"lastLoginAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"refreshTokens\",\"kind\":\"object\",\"type\":\"RefreshToken\",\"relationName\":\"RefreshTokenToUser\"},{\"name\":\"passwordResets\",\"kind\":\"object\",\"type\":\"PasswordReset\",\"relationName\":\"PasswordResetToUser\"},{\"name\":\"suspensions\",\"kind\":\"object\",\"type\":\"UserSuspension\",\"relationName\":\"UserToUserSuspension\"},{\"name\":\"emailPreferences\",\"kind\":\"object\",\"type\":\"EmailPreference\",\"relationName\":\"EmailPreferenceToUser\"},{\"name\":\"deviceEndpoints\",\"kind\":\"object\",\"type\":\"DeviceEndpoint\",\"relationName\":\"DeviceEndpointToUser\"},{\"name\":\"socials\",\"kind\":\"object\",\"type\":\"Social\",\"relationName\":\"SocialToUser\"},{\"name\":\"properties\",\"kind\":\"object\",\"type\":\"Property\",\"relationName\":\"PropertyToUser\"},{\"name\":\"mortgages\",\"kind\":\"object\",\"type\":\"Mortgage\",\"relationName\":\"MortgageBorrower\"},{\"name\":\"paymentPlans\",\"kind\":\"object\",\"type\":\"PaymentPlan\",\"relationName\":\"PaymentPlanToUser\"},{\"name\":\"contracts\",\"kind\":\"object\",\"type\":\"Contract\",\"relationName\":\"ContractBuyer\"},{\"name\":\"soldContracts\",\"kind\":\"object\",\"type\":\"Contract\",\"relationName\":\"ContractSeller\"},{\"name\":\"payments\",\"kind\":\"object\",\"type\":\"Payment\",\"relationName\":\"PaymentToUser\"}],\"dbName\":\"users\"},\"Role\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"name\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"description\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"userRoles\",\"kind\":\"object\",\"type\":\"UserRole\",\"relationName\":\"RoleToUserRole\"},{\"name\":\"permissions\",\"kind\":\"object\",\"type\":\"RolePermission\",\"relationName\":\"RoleToRolePermission\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"}],\"dbName\":\"roles\"},\"Permission\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"name\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"description\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"resource\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"action\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"roles\",\"kind\":\"object\",\"type\":\"RolePermission\",\"relationName\":\"PermissionToRolePermission\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"}],\"dbName\":\"permissions\"},\"RolePermission\":{\"fields\":[{\"name\":\"roleId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"permissionId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"role\",\"kind\":\"object\",\"type\":\"Role\",\"relationName\":\"RoleToRolePermission\"},{\"name\":\"permission\",\"kind\":\"object\",\"type\":\"Permission\",\"relationName\":\"PermissionToRolePermission\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"}],\"dbName\":\"role_permissions\"},\"UserRole\":{\"fields\":[{\"name\":\"userId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"roleId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"user\",\"kind\":\"object\",\"type\":\"User\",\"relationName\":\"UserToUserRole\"},{\"name\":\"role\",\"kind\":\"object\",\"type\":\"Role\",\"relationName\":\"RoleToUserRole\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"}],\"dbName\":\"user_roles\"},\"Tenant\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"name\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"subdomain\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"isActive\",\"kind\":\"scalar\",\"type\":\"Boolean\"},{\"name\":\"users\",\"kind\":\"object\",\"type\":\"User\",\"relationName\":\"TenantToUser\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"}],\"dbName\":\"tenants\"},\"RefreshToken\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"tokenHash\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"token\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"userId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"user\",\"kind\":\"object\",\"type\":\"User\",\"relationName\":\"RefreshTokenToUser\"},{\"name\":\"expiresAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"}],\"dbName\":\"refresh_tokens\"},\"PasswordReset\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"token\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"userId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"user\",\"kind\":\"object\",\"type\":\"User\",\"relationName\":\"PasswordResetToUser\"},{\"name\":\"expiresAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"usedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"}],\"dbName\":\"password_resets\"},\"UserSuspension\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"userId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"user\",\"kind\":\"object\",\"type\":\"User\",\"relationName\":\"UserToUserSuspension\"},{\"name\":\"reason\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"suspendedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"expiresAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"liftedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"}],\"dbName\":\"user_suspensions\"},\"EmailPreference\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"userId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"user\",\"kind\":\"object\",\"type\":\"User\",\"relationName\":\"EmailPreferenceToUser\"},{\"name\":\"marketingEmails\",\"kind\":\"scalar\",\"type\":\"Boolean\"},{\"name\":\"transactionalEmails\",\"kind\":\"scalar\",\"type\":\"Boolean\"},{\"name\":\"propertyAlerts\",\"kind\":\"scalar\",\"type\":\"Boolean\"},{\"name\":\"paymentReminders\",\"kind\":\"scalar\",\"type\":\"Boolean\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"}],\"dbName\":\"email_preferences\"},\"DeviceEndpoint\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"userId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"user\",\"kind\":\"object\",\"type\":\"User\",\"relationName\":\"DeviceEndpointToUser\"},{\"name\":\"endpoint\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"platform\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"isActive\",\"kind\":\"scalar\",\"type\":\"Boolean\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"}],\"dbName\":\"device_endpoints\"},\"Social\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"userId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"user\",\"kind\":\"object\",\"type\":\"User\",\"relationName\":\"SocialToUser\"},{\"name\":\"provider\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"socialId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"}],\"dbName\":\"socials\"},\"OAuthState\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"state\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"expiresAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"}],\"dbName\":\"oauth_states\"},\"Wallet\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"balance\",\"kind\":\"scalar\",\"type\":\"Float\"},{\"name\":\"currency\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"user\",\"kind\":\"object\",\"type\":\"User\",\"relationName\":\"UserToWallet\"},{\"name\":\"transactions\",\"kind\":\"object\",\"type\":\"Transaction\",\"relationName\":\"TransactionToWallet\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"}],\"dbName\":\"wallets\"},\"Transaction\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"walletId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"wallet\",\"kind\":\"object\",\"type\":\"Wallet\",\"relationName\":\"TransactionToWallet\"},{\"name\":\"amount\",\"kind\":\"scalar\",\"type\":\"Float\"},{\"name\":\"type\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"status\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"reference\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"description\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"}],\"dbName\":\"transactions\"},\"Settings\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"key\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"value\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"category\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"}],\"dbName\":\"settings\"},\"Property\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"userId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"user\",\"kind\":\"object\",\"type\":\"User\",\"relationName\":\"PropertyToUser\"},{\"name\":\"title\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"category\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"propertyType\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"country\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"currency\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"city\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"district\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"zipCode\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"streetAddress\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"nBedrooms\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"nBathrooms\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"nParkingSpots\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"price\",\"kind\":\"scalar\",\"type\":\"Float\"},{\"name\":\"longitude\",\"kind\":\"scalar\",\"type\":\"Float\"},{\"name\":\"latitude\",\"kind\":\"scalar\",\"type\":\"Float\"},{\"name\":\"area\",\"kind\":\"scalar\",\"type\":\"Float\"},{\"name\":\"status\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"description\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"displayImageId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"displayImage\",\"kind\":\"object\",\"type\":\"PropertyMedia\",\"relationName\":\"DisplayImage\"},{\"name\":\"isPublished\",\"kind\":\"scalar\",\"type\":\"Boolean\"},{\"name\":\"publishedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"documents\",\"kind\":\"object\",\"type\":\"PropertyDocument\",\"relationName\":\"PropertyToPropertyDocument\"},{\"name\":\"media\",\"kind\":\"object\",\"type\":\"PropertyMedia\",\"relationName\":\"PropertyMedia\"},{\"name\":\"amenities\",\"kind\":\"object\",\"type\":\"PropertyAmenity\",\"relationName\":\"PropertyToPropertyAmenity\"},{\"name\":\"mortgages\",\"kind\":\"object\",\"type\":\"Mortgage\",\"relationName\":\"MortgageToProperty\"},{\"name\":\"paymentPlans\",\"kind\":\"object\",\"type\":\"PaymentPlan\",\"relationName\":\"PaymentPlanToProperty\"},{\"name\":\"contracts\",\"kind\":\"object\",\"type\":\"Contract\",\"relationName\":\"ContractToProperty\"}],\"dbName\":\"properties\"},\"PropertyMedia\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"propertyId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"property\",\"kind\":\"object\",\"type\":\"Property\",\"relationName\":\"PropertyMedia\"},{\"name\":\"url\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"type\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"caption\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"order\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"displayForProperties\",\"kind\":\"object\",\"type\":\"Property\",\"relationName\":\"DisplayImage\"}],\"dbName\":\"property_media\"},\"PropertyDocument\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"propertyId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"property\",\"kind\":\"object\",\"type\":\"Property\",\"relationName\":\"PropertyToPropertyDocument\"},{\"name\":\"name\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"url\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"type\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"}],\"dbName\":\"property_documents\"},\"Amenity\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"name\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"properties\",\"kind\":\"object\",\"type\":\"PropertyAmenity\",\"relationName\":\"AmenityToPropertyAmenity\"}],\"dbName\":\"amenities\"},\"PropertyAmenity\":{\"fields\":[{\"name\":\"propertyId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"amenityId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"property\",\"kind\":\"object\",\"type\":\"Property\",\"relationName\":\"PropertyToPropertyAmenity\"},{\"name\":\"amenity\",\"kind\":\"object\",\"type\":\"Amenity\",\"relationName\":\"AmenityToPropertyAmenity\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"}],\"dbName\":\"property_amenities\"},\"Mortgage\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"propertyId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"property\",\"kind\":\"object\",\"type\":\"Property\",\"relationName\":\"MortgageToProperty\"},{\"name\":\"borrowerId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"borrower\",\"kind\":\"object\",\"type\":\"User\",\"relationName\":\"MortgageBorrower\"},{\"name\":\"mortgageTypeId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"mortgageType\",\"kind\":\"object\",\"type\":\"MortgageType\",\"relationName\":\"MortgageToMortgageType\"},{\"name\":\"downpaymentPlanId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"downpaymentPlan\",\"kind\":\"object\",\"type\":\"MortgageDownpaymentPlan\",\"relationName\":\"MortgageToMortgageDownpaymentPlan\"},{\"name\":\"principal\",\"kind\":\"scalar\",\"type\":\"Float\"},{\"name\":\"downPayment\",\"kind\":\"scalar\",\"type\":\"Float\"},{\"name\":\"downPaymentPaid\",\"kind\":\"scalar\",\"type\":\"Float\"},{\"name\":\"termMonths\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"interestRate\",\"kind\":\"scalar\",\"type\":\"Float\"},{\"name\":\"monthlyPayment\",\"kind\":\"scalar\",\"type\":\"Float\"},{\"name\":\"status\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"state\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"stateMetadata\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"lastReminderSentAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"documents\",\"kind\":\"object\",\"type\":\"MortgageDocument\",\"relationName\":\"MortgageToMortgageDocument\"},{\"name\":\"steps\",\"kind\":\"object\",\"type\":\"MortgageStep\",\"relationName\":\"MortgageToMortgageStep\"},{\"name\":\"transitions\",\"kind\":\"object\",\"type\":\"MortgageTransition\",\"relationName\":\"MortgageToMortgageTransition\"},{\"name\":\"transitionEvents\",\"kind\":\"object\",\"type\":\"MortgageTransitionEvent\",\"relationName\":\"MortgageToMortgageTransitionEvent\"}],\"dbName\":\"mortgages\"},\"MortgageType\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"name\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"description\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"mortgages\",\"kind\":\"object\",\"type\":\"Mortgage\",\"relationName\":\"MortgageToMortgageType\"}],\"dbName\":\"mortgage_types\"},\"MortgageDocument\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"mortgageId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"mortgage\",\"kind\":\"object\",\"type\":\"Mortgage\",\"relationName\":\"MortgageToMortgageDocument\"},{\"name\":\"name\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"url\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"type\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"}],\"dbName\":\"mortgage_documents\"},\"MortgageStep\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"mortgageId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"mortgage\",\"kind\":\"object\",\"type\":\"Mortgage\",\"relationName\":\"MortgageToMortgageStep\"},{\"name\":\"name\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"description\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"order\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"isCompleted\",\"kind\":\"scalar\",\"type\":\"Boolean\"},{\"name\":\"completedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"}],\"dbName\":\"mortgage_steps\"},\"MortgageDownpaymentPlan\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"totalAmount\",\"kind\":\"scalar\",\"type\":\"Float\"},{\"name\":\"paidAmount\",\"kind\":\"scalar\",\"type\":\"Float\"},{\"name\":\"status\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"startDate\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"endDate\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"mortgages\",\"kind\":\"object\",\"type\":\"Mortgage\",\"relationName\":\"MortgageToMortgageDownpaymentPlan\"},{\"name\":\"installments\",\"kind\":\"object\",\"type\":\"MortgageDownpaymentInstallment\",\"relationName\":\"MortgageDownpaymentInstallmentToMortgageDownpaymentPlan\"},{\"name\":\"payments\",\"kind\":\"object\",\"type\":\"MortgageDownpaymentPayment\",\"relationName\":\"MortgageDownpaymentPaymentToMortgageDownpaymentPlan\"}],\"dbName\":\"mortgage_downpayment_plans\"},\"MortgageDownpaymentInstallment\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"planId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"plan\",\"kind\":\"object\",\"type\":\"MortgageDownpaymentPlan\",\"relationName\":\"MortgageDownpaymentInstallmentToMortgageDownpaymentPlan\"},{\"name\":\"amount\",\"kind\":\"scalar\",\"type\":\"Float\"},{\"name\":\"dueDate\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"isPaid\",\"kind\":\"scalar\",\"type\":\"Boolean\"},{\"name\":\"paidDate\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"}],\"dbName\":\"mortgage_downpayment_installments\"},\"MortgageDownpaymentPayment\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"planId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"plan\",\"kind\":\"object\",\"type\":\"MortgageDownpaymentPlan\",\"relationName\":\"MortgageDownpaymentPaymentToMortgageDownpaymentPlan\"},{\"name\":\"amount\",\"kind\":\"scalar\",\"type\":\"Float\"},{\"name\":\"paymentMethod\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"reference\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"status\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"}],\"dbName\":\"mortgage_downpayment_payments\"},\"MortgageTransition\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"mortgageId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"mortgage\",\"kind\":\"object\",\"type\":\"Mortgage\",\"relationName\":\"MortgageToMortgageTransition\"},{\"name\":\"fromState\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"toState\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"trigger\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"metadata\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"transitionedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"}],\"dbName\":\"mortgage_transitions\"},\"MortgageTransitionEvent\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"mortgageId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"mortgage\",\"kind\":\"object\",\"type\":\"Mortgage\",\"relationName\":\"MortgageToMortgageTransitionEvent\"},{\"name\":\"event\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"data\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"}],\"dbName\":\"mortgage_transition_events\"},\"PaymentPlan\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"propertyId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"property\",\"kind\":\"object\",\"type\":\"Property\",\"relationName\":\"PaymentPlanToProperty\"},{\"name\":\"buyerId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"buyer\",\"kind\":\"object\",\"type\":\"User\",\"relationName\":\"PaymentPlanToUser\"},{\"name\":\"planType\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"name\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"description\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"totalAmount\",\"kind\":\"scalar\",\"type\":\"Float\"},{\"name\":\"downPaymentAmount\",\"kind\":\"scalar\",\"type\":\"Float\"},{\"name\":\"downPaymentPaid\",\"kind\":\"scalar\",\"type\":\"Float\"},{\"name\":\"principalAmount\",\"kind\":\"scalar\",\"type\":\"Float\"},{\"name\":\"interestRate\",\"kind\":\"scalar\",\"type\":\"Float\"},{\"name\":\"totalInterest\",\"kind\":\"scalar\",\"type\":\"Float\"},{\"name\":\"state\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"stateMetadata\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"contract\",\"kind\":\"object\",\"type\":\"Contract\",\"relationName\":\"ContractToPaymentPlan\"},{\"name\":\"schedules\",\"kind\":\"object\",\"type\":\"PaymentSchedule\",\"relationName\":\"PaymentPlanToPaymentSchedule\"},{\"name\":\"payments\",\"kind\":\"object\",\"type\":\"Payment\",\"relationName\":\"PaymentToPaymentPlan\"}],\"dbName\":\"payment_plans\"},\"PaymentSchedule\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"planId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"plan\",\"kind\":\"object\",\"type\":\"PaymentPlan\",\"relationName\":\"PaymentPlanToPaymentSchedule\"},{\"name\":\"name\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"frequency\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"startDate\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"endDate\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"isActive\",\"kind\":\"scalar\",\"type\":\"Boolean\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"installments\",\"kind\":\"object\",\"type\":\"PaymentInstallment\",\"relationName\":\"PaymentInstallmentToPaymentSchedule\"},{\"name\":\"payments\",\"kind\":\"object\",\"type\":\"Payment\",\"relationName\":\"PaymentToPaymentSchedule\"}],\"dbName\":\"payment_schedules\"},\"PaymentInstallment\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"scheduleId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"schedule\",\"kind\":\"object\",\"type\":\"PaymentSchedule\",\"relationName\":\"PaymentInstallmentToPaymentSchedule\"},{\"name\":\"installmentNumber\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"amount\",\"kind\":\"scalar\",\"type\":\"Float\"},{\"name\":\"principalAmount\",\"kind\":\"scalar\",\"type\":\"Float\"},{\"name\":\"interestAmount\",\"kind\":\"scalar\",\"type\":\"Float\"},{\"name\":\"dueDate\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"status\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"paidAmount\",\"kind\":\"scalar\",\"type\":\"Float\"},{\"name\":\"paidDate\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"lateFee\",\"kind\":\"scalar\",\"type\":\"Float\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"payments\",\"kind\":\"object\",\"type\":\"Payment\",\"relationName\":\"PaymentToPaymentInstallment\"}],\"dbName\":\"payment_installments\"},\"Payment\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"planId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"plan\",\"kind\":\"object\",\"type\":\"PaymentPlan\",\"relationName\":\"PaymentToPaymentPlan\"},{\"name\":\"scheduleId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"schedule\",\"kind\":\"object\",\"type\":\"PaymentSchedule\",\"relationName\":\"PaymentToPaymentSchedule\"},{\"name\":\"installmentId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"installment\",\"kind\":\"object\",\"type\":\"PaymentInstallment\",\"relationName\":\"PaymentToPaymentInstallment\"},{\"name\":\"payerId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"payer\",\"kind\":\"object\",\"type\":\"User\",\"relationName\":\"PaymentToUser\"},{\"name\":\"amount\",\"kind\":\"scalar\",\"type\":\"Float\"},{\"name\":\"principalAmount\",\"kind\":\"scalar\",\"type\":\"Float\"},{\"name\":\"interestAmount\",\"kind\":\"scalar\",\"type\":\"Float\"},{\"name\":\"lateFeeAmount\",\"kind\":\"scalar\",\"type\":\"Float\"},{\"name\":\"paymentMethod\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"status\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"reference\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"gatewayResponse\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"processedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"}],\"dbName\":\"payments\"},\"Contract\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"propertyId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"property\",\"kind\":\"object\",\"type\":\"Property\",\"relationName\":\"ContractToProperty\"},{\"name\":\"paymentPlanId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"paymentPlan\",\"kind\":\"object\",\"type\":\"PaymentPlan\",\"relationName\":\"ContractToPaymentPlan\"},{\"name\":\"buyerId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"buyer\",\"kind\":\"object\",\"type\":\"User\",\"relationName\":\"ContractBuyer\"},{\"name\":\"sellerId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"seller\",\"kind\":\"object\",\"type\":\"User\",\"relationName\":\"ContractSeller\"},{\"name\":\"contractType\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"contractNumber\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"title\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"description\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"status\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"startDate\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"endDate\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"signedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"terminatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"documents\",\"kind\":\"object\",\"type\":\"ContractDocument\",\"relationName\":\"ContractToContractDocument\"}],\"dbName\":\"contracts\"},\"ContractDocument\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"contractId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"contract\",\"kind\":\"object\",\"type\":\"Contract\",\"relationName\":\"ContractToContractDocument\"},{\"name\":\"name\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"url\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"type\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"}],\"dbName\":\"contract_documents\"}},\"enums\":{},\"types\":{}}");
25
+ config.runtimeDataModel = JSON.parse("{\"models\":{\"User\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"email\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"password\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"phone\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"firstName\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"lastName\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"isActive\",\"kind\":\"scalar\",\"type\":\"Boolean\"},{\"name\":\"isEmailVerified\",\"kind\":\"scalar\",\"type\":\"Boolean\"},{\"name\":\"googleId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"avatar\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"tenantId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"tenant\",\"kind\":\"object\",\"type\":\"Tenant\",\"relationName\":\"TenantToUser\"},{\"name\":\"userRoles\",\"kind\":\"object\",\"type\":\"UserRole\",\"relationName\":\"UserToUserRole\"},{\"name\":\"walletId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"wallet\",\"kind\":\"object\",\"type\":\"Wallet\",\"relationName\":\"UserToWallet\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"emailVerifiedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"emailVerificationToken\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"lastLoginAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"refreshTokens\",\"kind\":\"object\",\"type\":\"RefreshToken\",\"relationName\":\"RefreshTokenToUser\"},{\"name\":\"passwordResets\",\"kind\":\"object\",\"type\":\"PasswordReset\",\"relationName\":\"PasswordResetToUser\"},{\"name\":\"suspensions\",\"kind\":\"object\",\"type\":\"UserSuspension\",\"relationName\":\"UserToUserSuspension\"},{\"name\":\"emailPreferences\",\"kind\":\"object\",\"type\":\"EmailPreference\",\"relationName\":\"EmailPreferenceToUser\"},{\"name\":\"deviceEndpoints\",\"kind\":\"object\",\"type\":\"DeviceEndpoint\",\"relationName\":\"DeviceEndpointToUser\"},{\"name\":\"socials\",\"kind\":\"object\",\"type\":\"Social\",\"relationName\":\"SocialToUser\"},{\"name\":\"properties\",\"kind\":\"object\",\"type\":\"Property\",\"relationName\":\"PropertyToUser\"},{\"name\":\"mortgages\",\"kind\":\"object\",\"type\":\"Mortgage\",\"relationName\":\"MortgageBorrower\"},{\"name\":\"paymentPlans\",\"kind\":\"object\",\"type\":\"PaymentPlan\",\"relationName\":\"PaymentPlanToUser\"},{\"name\":\"contracts\",\"kind\":\"object\",\"type\":\"Contract\",\"relationName\":\"ContractBuyer\"},{\"name\":\"soldContracts\",\"kind\":\"object\",\"type\":\"Contract\",\"relationName\":\"ContractSeller\"},{\"name\":\"payments\",\"kind\":\"object\",\"type\":\"Payment\",\"relationName\":\"PaymentToUser\"}],\"dbName\":\"users\"},\"Role\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"name\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"description\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"userRoles\",\"kind\":\"object\",\"type\":\"UserRole\",\"relationName\":\"RoleToUserRole\"},{\"name\":\"permissions\",\"kind\":\"object\",\"type\":\"RolePermission\",\"relationName\":\"RoleToRolePermission\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"}],\"dbName\":\"roles\"},\"Permission\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"name\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"description\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"resource\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"action\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"roles\",\"kind\":\"object\",\"type\":\"RolePermission\",\"relationName\":\"PermissionToRolePermission\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"}],\"dbName\":\"permissions\"},\"RolePermission\":{\"fields\":[{\"name\":\"roleId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"permissionId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"role\",\"kind\":\"object\",\"type\":\"Role\",\"relationName\":\"RoleToRolePermission\"},{\"name\":\"permission\",\"kind\":\"object\",\"type\":\"Permission\",\"relationName\":\"PermissionToRolePermission\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"}],\"dbName\":\"role_permissions\"},\"UserRole\":{\"fields\":[{\"name\":\"userId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"roleId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"user\",\"kind\":\"object\",\"type\":\"User\",\"relationName\":\"UserToUserRole\"},{\"name\":\"role\",\"kind\":\"object\",\"type\":\"Role\",\"relationName\":\"RoleToUserRole\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"}],\"dbName\":\"user_roles\"},\"Tenant\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"name\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"subdomain\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"isActive\",\"kind\":\"scalar\",\"type\":\"Boolean\"},{\"name\":\"users\",\"kind\":\"object\",\"type\":\"User\",\"relationName\":\"TenantToUser\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"}],\"dbName\":\"tenants\"},\"RefreshToken\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"jti\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"token\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"userId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"user\",\"kind\":\"object\",\"type\":\"User\",\"relationName\":\"RefreshTokenToUser\"},{\"name\":\"expiresAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"}],\"dbName\":\"refresh_tokens\"},\"PasswordReset\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"token\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"userId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"user\",\"kind\":\"object\",\"type\":\"User\",\"relationName\":\"PasswordResetToUser\"},{\"name\":\"expiresAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"usedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"}],\"dbName\":\"password_resets\"},\"UserSuspension\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"userId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"user\",\"kind\":\"object\",\"type\":\"User\",\"relationName\":\"UserToUserSuspension\"},{\"name\":\"reason\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"suspendedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"expiresAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"liftedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"}],\"dbName\":\"user_suspensions\"},\"EmailPreference\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"userId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"user\",\"kind\":\"object\",\"type\":\"User\",\"relationName\":\"EmailPreferenceToUser\"},{\"name\":\"marketingEmails\",\"kind\":\"scalar\",\"type\":\"Boolean\"},{\"name\":\"transactionalEmails\",\"kind\":\"scalar\",\"type\":\"Boolean\"},{\"name\":\"propertyAlerts\",\"kind\":\"scalar\",\"type\":\"Boolean\"},{\"name\":\"paymentReminders\",\"kind\":\"scalar\",\"type\":\"Boolean\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"}],\"dbName\":\"email_preferences\"},\"DeviceEndpoint\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"userId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"user\",\"kind\":\"object\",\"type\":\"User\",\"relationName\":\"DeviceEndpointToUser\"},{\"name\":\"endpoint\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"platform\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"isActive\",\"kind\":\"scalar\",\"type\":\"Boolean\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"}],\"dbName\":\"device_endpoints\"},\"Social\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"userId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"user\",\"kind\":\"object\",\"type\":\"User\",\"relationName\":\"SocialToUser\"},{\"name\":\"provider\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"socialId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"}],\"dbName\":\"socials\"},\"OAuthState\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"state\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"expiresAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"}],\"dbName\":\"oauth_states\"},\"Wallet\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"balance\",\"kind\":\"scalar\",\"type\":\"Float\"},{\"name\":\"currency\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"user\",\"kind\":\"object\",\"type\":\"User\",\"relationName\":\"UserToWallet\"},{\"name\":\"transactions\",\"kind\":\"object\",\"type\":\"Transaction\",\"relationName\":\"TransactionToWallet\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"}],\"dbName\":\"wallets\"},\"Transaction\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"walletId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"wallet\",\"kind\":\"object\",\"type\":\"Wallet\",\"relationName\":\"TransactionToWallet\"},{\"name\":\"amount\",\"kind\":\"scalar\",\"type\":\"Float\"},{\"name\":\"type\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"status\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"reference\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"description\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"}],\"dbName\":\"transactions\"},\"Settings\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"key\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"value\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"category\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"}],\"dbName\":\"settings\"},\"Property\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"userId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"user\",\"kind\":\"object\",\"type\":\"User\",\"relationName\":\"PropertyToUser\"},{\"name\":\"title\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"category\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"propertyType\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"country\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"currency\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"city\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"district\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"zipCode\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"streetAddress\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"nBedrooms\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"nBathrooms\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"nParkingSpots\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"price\",\"kind\":\"scalar\",\"type\":\"Float\"},{\"name\":\"longitude\",\"kind\":\"scalar\",\"type\":\"Float\"},{\"name\":\"latitude\",\"kind\":\"scalar\",\"type\":\"Float\"},{\"name\":\"area\",\"kind\":\"scalar\",\"type\":\"Float\"},{\"name\":\"status\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"description\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"displayImageId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"displayImage\",\"kind\":\"object\",\"type\":\"PropertyMedia\",\"relationName\":\"DisplayImage\"},{\"name\":\"isPublished\",\"kind\":\"scalar\",\"type\":\"Boolean\"},{\"name\":\"publishedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"documents\",\"kind\":\"object\",\"type\":\"PropertyDocument\",\"relationName\":\"PropertyToPropertyDocument\"},{\"name\":\"media\",\"kind\":\"object\",\"type\":\"PropertyMedia\",\"relationName\":\"PropertyMedia\"},{\"name\":\"amenities\",\"kind\":\"object\",\"type\":\"PropertyAmenity\",\"relationName\":\"PropertyToPropertyAmenity\"},{\"name\":\"mortgages\",\"kind\":\"object\",\"type\":\"Mortgage\",\"relationName\":\"MortgageToProperty\"},{\"name\":\"paymentPlans\",\"kind\":\"object\",\"type\":\"PaymentPlan\",\"relationName\":\"PaymentPlanToProperty\"},{\"name\":\"contracts\",\"kind\":\"object\",\"type\":\"Contract\",\"relationName\":\"ContractToProperty\"}],\"dbName\":\"properties\"},\"PropertyMedia\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"propertyId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"property\",\"kind\":\"object\",\"type\":\"Property\",\"relationName\":\"PropertyMedia\"},{\"name\":\"url\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"type\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"caption\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"order\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"displayForProperties\",\"kind\":\"object\",\"type\":\"Property\",\"relationName\":\"DisplayImage\"}],\"dbName\":\"property_media\"},\"PropertyDocument\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"propertyId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"property\",\"kind\":\"object\",\"type\":\"Property\",\"relationName\":\"PropertyToPropertyDocument\"},{\"name\":\"name\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"url\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"type\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"}],\"dbName\":\"property_documents\"},\"Amenity\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"name\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"properties\",\"kind\":\"object\",\"type\":\"PropertyAmenity\",\"relationName\":\"AmenityToPropertyAmenity\"}],\"dbName\":\"amenities\"},\"PropertyAmenity\":{\"fields\":[{\"name\":\"propertyId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"amenityId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"property\",\"kind\":\"object\",\"type\":\"Property\",\"relationName\":\"PropertyToPropertyAmenity\"},{\"name\":\"amenity\",\"kind\":\"object\",\"type\":\"Amenity\",\"relationName\":\"AmenityToPropertyAmenity\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"}],\"dbName\":\"property_amenities\"},\"Mortgage\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"propertyId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"property\",\"kind\":\"object\",\"type\":\"Property\",\"relationName\":\"MortgageToProperty\"},{\"name\":\"borrowerId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"borrower\",\"kind\":\"object\",\"type\":\"User\",\"relationName\":\"MortgageBorrower\"},{\"name\":\"mortgageTypeId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"mortgageType\",\"kind\":\"object\",\"type\":\"MortgageType\",\"relationName\":\"MortgageToMortgageType\"},{\"name\":\"downpaymentPlanId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"downpaymentPlan\",\"kind\":\"object\",\"type\":\"MortgageDownpaymentPlan\",\"relationName\":\"MortgageToMortgageDownpaymentPlan\"},{\"name\":\"principal\",\"kind\":\"scalar\",\"type\":\"Float\"},{\"name\":\"downPayment\",\"kind\":\"scalar\",\"type\":\"Float\"},{\"name\":\"downPaymentPaid\",\"kind\":\"scalar\",\"type\":\"Float\"},{\"name\":\"termMonths\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"interestRate\",\"kind\":\"scalar\",\"type\":\"Float\"},{\"name\":\"monthlyPayment\",\"kind\":\"scalar\",\"type\":\"Float\"},{\"name\":\"status\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"state\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"stateMetadata\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"lastReminderSentAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"documents\",\"kind\":\"object\",\"type\":\"MortgageDocument\",\"relationName\":\"MortgageToMortgageDocument\"},{\"name\":\"steps\",\"kind\":\"object\",\"type\":\"MortgageStep\",\"relationName\":\"MortgageToMortgageStep\"},{\"name\":\"transitions\",\"kind\":\"object\",\"type\":\"MortgageTransition\",\"relationName\":\"MortgageToMortgageTransition\"},{\"name\":\"transitionEvents\",\"kind\":\"object\",\"type\":\"MortgageTransitionEvent\",\"relationName\":\"MortgageToMortgageTransitionEvent\"}],\"dbName\":\"mortgages\"},\"MortgageType\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"name\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"description\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"mortgages\",\"kind\":\"object\",\"type\":\"Mortgage\",\"relationName\":\"MortgageToMortgageType\"}],\"dbName\":\"mortgage_types\"},\"MortgageDocument\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"mortgageId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"mortgage\",\"kind\":\"object\",\"type\":\"Mortgage\",\"relationName\":\"MortgageToMortgageDocument\"},{\"name\":\"name\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"url\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"type\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"}],\"dbName\":\"mortgage_documents\"},\"MortgageStep\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"mortgageId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"mortgage\",\"kind\":\"object\",\"type\":\"Mortgage\",\"relationName\":\"MortgageToMortgageStep\"},{\"name\":\"name\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"description\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"order\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"isCompleted\",\"kind\":\"scalar\",\"type\":\"Boolean\"},{\"name\":\"completedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"}],\"dbName\":\"mortgage_steps\"},\"MortgageDownpaymentPlan\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"totalAmount\",\"kind\":\"scalar\",\"type\":\"Float\"},{\"name\":\"paidAmount\",\"kind\":\"scalar\",\"type\":\"Float\"},{\"name\":\"status\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"startDate\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"endDate\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"mortgages\",\"kind\":\"object\",\"type\":\"Mortgage\",\"relationName\":\"MortgageToMortgageDownpaymentPlan\"},{\"name\":\"installments\",\"kind\":\"object\",\"type\":\"MortgageDownpaymentInstallment\",\"relationName\":\"MortgageDownpaymentInstallmentToMortgageDownpaymentPlan\"},{\"name\":\"payments\",\"kind\":\"object\",\"type\":\"MortgageDownpaymentPayment\",\"relationName\":\"MortgageDownpaymentPaymentToMortgageDownpaymentPlan\"}],\"dbName\":\"mortgage_downpayment_plans\"},\"MortgageDownpaymentInstallment\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"planId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"plan\",\"kind\":\"object\",\"type\":\"MortgageDownpaymentPlan\",\"relationName\":\"MortgageDownpaymentInstallmentToMortgageDownpaymentPlan\"},{\"name\":\"amount\",\"kind\":\"scalar\",\"type\":\"Float\"},{\"name\":\"dueDate\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"isPaid\",\"kind\":\"scalar\",\"type\":\"Boolean\"},{\"name\":\"paidDate\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"}],\"dbName\":\"mortgage_downpayment_installments\"},\"MortgageDownpaymentPayment\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"planId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"plan\",\"kind\":\"object\",\"type\":\"MortgageDownpaymentPlan\",\"relationName\":\"MortgageDownpaymentPaymentToMortgageDownpaymentPlan\"},{\"name\":\"amount\",\"kind\":\"scalar\",\"type\":\"Float\"},{\"name\":\"paymentMethod\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"reference\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"status\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"}],\"dbName\":\"mortgage_downpayment_payments\"},\"MortgageTransition\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"mortgageId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"mortgage\",\"kind\":\"object\",\"type\":\"Mortgage\",\"relationName\":\"MortgageToMortgageTransition\"},{\"name\":\"fromState\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"toState\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"trigger\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"metadata\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"transitionedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"}],\"dbName\":\"mortgage_transitions\"},\"MortgageTransitionEvent\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"mortgageId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"mortgage\",\"kind\":\"object\",\"type\":\"Mortgage\",\"relationName\":\"MortgageToMortgageTransitionEvent\"},{\"name\":\"event\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"data\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"}],\"dbName\":\"mortgage_transition_events\"},\"PaymentPlan\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"propertyId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"property\",\"kind\":\"object\",\"type\":\"Property\",\"relationName\":\"PaymentPlanToProperty\"},{\"name\":\"buyerId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"buyer\",\"kind\":\"object\",\"type\":\"User\",\"relationName\":\"PaymentPlanToUser\"},{\"name\":\"planType\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"name\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"description\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"totalAmount\",\"kind\":\"scalar\",\"type\":\"Float\"},{\"name\":\"downPaymentAmount\",\"kind\":\"scalar\",\"type\":\"Float\"},{\"name\":\"downPaymentPaid\",\"kind\":\"scalar\",\"type\":\"Float\"},{\"name\":\"principalAmount\",\"kind\":\"scalar\",\"type\":\"Float\"},{\"name\":\"interestRate\",\"kind\":\"scalar\",\"type\":\"Float\"},{\"name\":\"totalInterest\",\"kind\":\"scalar\",\"type\":\"Float\"},{\"name\":\"state\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"stateMetadata\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"contract\",\"kind\":\"object\",\"type\":\"Contract\",\"relationName\":\"ContractToPaymentPlan\"},{\"name\":\"schedules\",\"kind\":\"object\",\"type\":\"PaymentSchedule\",\"relationName\":\"PaymentPlanToPaymentSchedule\"},{\"name\":\"payments\",\"kind\":\"object\",\"type\":\"Payment\",\"relationName\":\"PaymentToPaymentPlan\"}],\"dbName\":\"payment_plans\"},\"PaymentSchedule\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"planId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"plan\",\"kind\":\"object\",\"type\":\"PaymentPlan\",\"relationName\":\"PaymentPlanToPaymentSchedule\"},{\"name\":\"name\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"frequency\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"startDate\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"endDate\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"isActive\",\"kind\":\"scalar\",\"type\":\"Boolean\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"installments\",\"kind\":\"object\",\"type\":\"PaymentInstallment\",\"relationName\":\"PaymentInstallmentToPaymentSchedule\"},{\"name\":\"payments\",\"kind\":\"object\",\"type\":\"Payment\",\"relationName\":\"PaymentToPaymentSchedule\"}],\"dbName\":\"payment_schedules\"},\"PaymentInstallment\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"scheduleId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"schedule\",\"kind\":\"object\",\"type\":\"PaymentSchedule\",\"relationName\":\"PaymentInstallmentToPaymentSchedule\"},{\"name\":\"installmentNumber\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"amount\",\"kind\":\"scalar\",\"type\":\"Float\"},{\"name\":\"principalAmount\",\"kind\":\"scalar\",\"type\":\"Float\"},{\"name\":\"interestAmount\",\"kind\":\"scalar\",\"type\":\"Float\"},{\"name\":\"dueDate\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"status\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"paidAmount\",\"kind\":\"scalar\",\"type\":\"Float\"},{\"name\":\"paidDate\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"lateFee\",\"kind\":\"scalar\",\"type\":\"Float\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"payments\",\"kind\":\"object\",\"type\":\"Payment\",\"relationName\":\"PaymentToPaymentInstallment\"}],\"dbName\":\"payment_installments\"},\"Payment\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"planId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"plan\",\"kind\":\"object\",\"type\":\"PaymentPlan\",\"relationName\":\"PaymentToPaymentPlan\"},{\"name\":\"scheduleId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"schedule\",\"kind\":\"object\",\"type\":\"PaymentSchedule\",\"relationName\":\"PaymentToPaymentSchedule\"},{\"name\":\"installmentId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"installment\",\"kind\":\"object\",\"type\":\"PaymentInstallment\",\"relationName\":\"PaymentToPaymentInstallment\"},{\"name\":\"payerId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"payer\",\"kind\":\"object\",\"type\":\"User\",\"relationName\":\"PaymentToUser\"},{\"name\":\"amount\",\"kind\":\"scalar\",\"type\":\"Float\"},{\"name\":\"principalAmount\",\"kind\":\"scalar\",\"type\":\"Float\"},{\"name\":\"interestAmount\",\"kind\":\"scalar\",\"type\":\"Float\"},{\"name\":\"lateFeeAmount\",\"kind\":\"scalar\",\"type\":\"Float\"},{\"name\":\"paymentMethod\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"status\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"reference\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"gatewayResponse\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"processedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"}],\"dbName\":\"payments\"},\"Contract\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"propertyId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"property\",\"kind\":\"object\",\"type\":\"Property\",\"relationName\":\"ContractToProperty\"},{\"name\":\"paymentPlanId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"paymentPlan\",\"kind\":\"object\",\"type\":\"PaymentPlan\",\"relationName\":\"ContractToPaymentPlan\"},{\"name\":\"buyerId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"buyer\",\"kind\":\"object\",\"type\":\"User\",\"relationName\":\"ContractBuyer\"},{\"name\":\"sellerId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"seller\",\"kind\":\"object\",\"type\":\"User\",\"relationName\":\"ContractSeller\"},{\"name\":\"contractType\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"contractNumber\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"title\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"description\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"status\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"startDate\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"endDate\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"signedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"terminatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"documents\",\"kind\":\"object\",\"type\":\"ContractDocument\",\"relationName\":\"ContractToContractDocument\"}],\"dbName\":\"contracts\"},\"ContractDocument\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"contractId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"contract\",\"kind\":\"object\",\"type\":\"Contract\",\"relationName\":\"ContractToContractDocument\"},{\"name\":\"name\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"url\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"type\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"}],\"dbName\":\"contract_documents\"}},\"enums\":{},\"types\":{}}");
26
26
  async function decodeBase64AsWasm(wasmBase64) {
27
27
  const { Buffer } = await import('node:buffer');
28
28
  const wasmArray = Buffer.from(wasmBase64, 'base64');
@@ -2754,7 +2754,7 @@ export declare const TenantScalarFieldEnum: {
2754
2754
  export type TenantScalarFieldEnum = (typeof TenantScalarFieldEnum)[keyof typeof TenantScalarFieldEnum];
2755
2755
  export declare const RefreshTokenScalarFieldEnum: {
2756
2756
  readonly id: "id";
2757
- readonly tokenHash: "tokenHash";
2757
+ readonly jti: "jti";
2758
2758
  readonly token: "token";
2759
2759
  readonly userId: "userId";
2760
2760
  readonly expiresAt: "expiresAt";
@@ -3159,7 +3159,7 @@ export declare const TenantOrderByRelevanceFieldEnum: {
3159
3159
  export type TenantOrderByRelevanceFieldEnum = (typeof TenantOrderByRelevanceFieldEnum)[keyof typeof TenantOrderByRelevanceFieldEnum];
3160
3160
  export declare const RefreshTokenOrderByRelevanceFieldEnum: {
3161
3161
  readonly id: "id";
3162
- readonly tokenHash: "tokenHash";
3162
+ readonly jti: "jti";
3163
3163
  readonly token: "token";
3164
3164
  readonly userId: "userId";
3165
3165
  };
@@ -168,7 +168,7 @@ export const TenantScalarFieldEnum = {
168
168
  };
169
169
  export const RefreshTokenScalarFieldEnum = {
170
170
  id: 'id',
171
- tokenHash: 'tokenHash',
171
+ jti: 'jti',
172
172
  token: 'token',
173
173
  userId: 'userId',
174
174
  expiresAt: 'expiresAt',
@@ -535,7 +535,7 @@ export const TenantOrderByRelevanceFieldEnum = {
535
535
  };
536
536
  export const RefreshTokenOrderByRelevanceFieldEnum = {
537
537
  id: 'id',
538
- tokenHash: 'tokenHash',
538
+ jti: 'jti',
539
539
  token: 'token',
540
540
  userId: 'userId'
541
541
  };
@@ -132,7 +132,7 @@ export declare const TenantScalarFieldEnum: {
132
132
  export type TenantScalarFieldEnum = (typeof TenantScalarFieldEnum)[keyof typeof TenantScalarFieldEnum];
133
133
  export declare const RefreshTokenScalarFieldEnum: {
134
134
  readonly id: "id";
135
- readonly tokenHash: "tokenHash";
135
+ readonly jti: "jti";
136
136
  readonly token: "token";
137
137
  readonly userId: "userId";
138
138
  readonly expiresAt: "expiresAt";
@@ -537,7 +537,7 @@ export declare const TenantOrderByRelevanceFieldEnum: {
537
537
  export type TenantOrderByRelevanceFieldEnum = (typeof TenantOrderByRelevanceFieldEnum)[keyof typeof TenantOrderByRelevanceFieldEnum];
538
538
  export declare const RefreshTokenOrderByRelevanceFieldEnum: {
539
539
  readonly id: "id";
540
- readonly tokenHash: "tokenHash";
540
+ readonly jti: "jti";
541
541
  readonly token: "token";
542
542
  readonly userId: "userId";
543
543
  };
@@ -140,7 +140,7 @@ export const TenantScalarFieldEnum = {
140
140
  };
141
141
  export const RefreshTokenScalarFieldEnum = {
142
142
  id: 'id',
143
- tokenHash: 'tokenHash',
143
+ jti: 'jti',
144
144
  token: 'token',
145
145
  userId: 'userId',
146
146
  expiresAt: 'expiresAt',
@@ -507,7 +507,7 @@ export const TenantOrderByRelevanceFieldEnum = {
507
507
  };
508
508
  export const RefreshTokenOrderByRelevanceFieldEnum = {
509
509
  id: 'id',
510
- tokenHash: 'tokenHash',
510
+ jti: 'jti',
511
511
  token: 'token',
512
512
  userId: 'userId'
513
513
  };
@@ -12,7 +12,7 @@ export type AggregateRefreshToken = {
12
12
  };
13
13
  export type RefreshTokenMinAggregateOutputType = {
14
14
  id: string | null;
15
- tokenHash: string | null;
15
+ jti: string | null;
16
16
  token: string | null;
17
17
  userId: string | null;
18
18
  expiresAt: Date | null;
@@ -20,7 +20,7 @@ export type RefreshTokenMinAggregateOutputType = {
20
20
  };
21
21
  export type RefreshTokenMaxAggregateOutputType = {
22
22
  id: string | null;
23
- tokenHash: string | null;
23
+ jti: string | null;
24
24
  token: string | null;
25
25
  userId: string | null;
26
26
  expiresAt: Date | null;
@@ -28,7 +28,7 @@ export type RefreshTokenMaxAggregateOutputType = {
28
28
  };
29
29
  export type RefreshTokenCountAggregateOutputType = {
30
30
  id: number;
31
- tokenHash: number;
31
+ jti: number;
32
32
  token: number;
33
33
  userId: number;
34
34
  expiresAt: number;
@@ -37,7 +37,7 @@ export type RefreshTokenCountAggregateOutputType = {
37
37
  };
38
38
  export type RefreshTokenMinAggregateInputType = {
39
39
  id?: true;
40
- tokenHash?: true;
40
+ jti?: true;
41
41
  token?: true;
42
42
  userId?: true;
43
43
  expiresAt?: true;
@@ -45,7 +45,7 @@ export type RefreshTokenMinAggregateInputType = {
45
45
  };
46
46
  export type RefreshTokenMaxAggregateInputType = {
47
47
  id?: true;
48
- tokenHash?: true;
48
+ jti?: true;
49
49
  token?: true;
50
50
  userId?: true;
51
51
  expiresAt?: true;
@@ -53,7 +53,7 @@ export type RefreshTokenMaxAggregateInputType = {
53
53
  };
54
54
  export type RefreshTokenCountAggregateInputType = {
55
55
  id?: true;
56
- tokenHash?: true;
56
+ jti?: true;
57
57
  token?: true;
58
58
  userId?: true;
59
59
  expiresAt?: true;
@@ -124,7 +124,7 @@ export type RefreshTokenGroupByArgs<ExtArgs extends runtime.Types.Extensions.Int
124
124
  };
125
125
  export type RefreshTokenGroupByOutputType = {
126
126
  id: string;
127
- tokenHash: string;
127
+ jti: string | null;
128
128
  token: string | null;
129
129
  userId: string;
130
130
  expiresAt: Date;
@@ -141,7 +141,7 @@ export type RefreshTokenWhereInput = {
141
141
  OR?: Prisma.RefreshTokenWhereInput[];
142
142
  NOT?: Prisma.RefreshTokenWhereInput | Prisma.RefreshTokenWhereInput[];
143
143
  id?: Prisma.StringFilter<"RefreshToken"> | string;
144
- tokenHash?: Prisma.StringFilter<"RefreshToken"> | string;
144
+ jti?: Prisma.StringNullableFilter<"RefreshToken"> | string | null;
145
145
  token?: Prisma.StringNullableFilter<"RefreshToken"> | string | null;
146
146
  userId?: Prisma.StringFilter<"RefreshToken"> | string;
147
147
  expiresAt?: Prisma.DateTimeFilter<"RefreshToken"> | Date | string;
@@ -150,7 +150,7 @@ export type RefreshTokenWhereInput = {
150
150
  };
151
151
  export type RefreshTokenOrderByWithRelationInput = {
152
152
  id?: Prisma.SortOrder;
153
- tokenHash?: Prisma.SortOrder;
153
+ jti?: Prisma.SortOrderInput | Prisma.SortOrder;
154
154
  token?: Prisma.SortOrderInput | Prisma.SortOrder;
155
155
  userId?: Prisma.SortOrder;
156
156
  expiresAt?: Prisma.SortOrder;
@@ -160,7 +160,7 @@ export type RefreshTokenOrderByWithRelationInput = {
160
160
  };
161
161
  export type RefreshTokenWhereUniqueInput = Prisma.AtLeast<{
162
162
  id?: string;
163
- tokenHash?: string;
163
+ jti?: string;
164
164
  AND?: Prisma.RefreshTokenWhereInput | Prisma.RefreshTokenWhereInput[];
165
165
  OR?: Prisma.RefreshTokenWhereInput[];
166
166
  NOT?: Prisma.RefreshTokenWhereInput | Prisma.RefreshTokenWhereInput[];
@@ -169,10 +169,10 @@ export type RefreshTokenWhereUniqueInput = Prisma.AtLeast<{
169
169
  expiresAt?: Prisma.DateTimeFilter<"RefreshToken"> | Date | string;
170
170
  createdAt?: Prisma.DateTimeFilter<"RefreshToken"> | Date | string;
171
171
  user?: Prisma.XOR<Prisma.UserScalarRelationFilter, Prisma.UserWhereInput>;
172
- }, "id" | "tokenHash">;
172
+ }, "id" | "jti">;
173
173
  export type RefreshTokenOrderByWithAggregationInput = {
174
174
  id?: Prisma.SortOrder;
175
- tokenHash?: Prisma.SortOrder;
175
+ jti?: Prisma.SortOrderInput | Prisma.SortOrder;
176
176
  token?: Prisma.SortOrderInput | Prisma.SortOrder;
177
177
  userId?: Prisma.SortOrder;
178
178
  expiresAt?: Prisma.SortOrder;
@@ -186,7 +186,7 @@ export type RefreshTokenScalarWhereWithAggregatesInput = {
186
186
  OR?: Prisma.RefreshTokenScalarWhereWithAggregatesInput[];
187
187
  NOT?: Prisma.RefreshTokenScalarWhereWithAggregatesInput | Prisma.RefreshTokenScalarWhereWithAggregatesInput[];
188
188
  id?: Prisma.StringWithAggregatesFilter<"RefreshToken"> | string;
189
- tokenHash?: Prisma.StringWithAggregatesFilter<"RefreshToken"> | string;
189
+ jti?: Prisma.StringNullableWithAggregatesFilter<"RefreshToken"> | string | null;
190
190
  token?: Prisma.StringNullableWithAggregatesFilter<"RefreshToken"> | string | null;
191
191
  userId?: Prisma.StringWithAggregatesFilter<"RefreshToken"> | string;
192
192
  expiresAt?: Prisma.DateTimeWithAggregatesFilter<"RefreshToken"> | Date | string;
@@ -194,7 +194,7 @@ export type RefreshTokenScalarWhereWithAggregatesInput = {
194
194
  };
195
195
  export type RefreshTokenCreateInput = {
196
196
  id?: string;
197
- tokenHash: string;
197
+ jti?: string | null;
198
198
  token?: string | null;
199
199
  expiresAt: Date | string;
200
200
  createdAt?: Date | string;
@@ -202,7 +202,7 @@ export type RefreshTokenCreateInput = {
202
202
  };
203
203
  export type RefreshTokenUncheckedCreateInput = {
204
204
  id?: string;
205
- tokenHash: string;
205
+ jti?: string | null;
206
206
  token?: string | null;
207
207
  userId: string;
208
208
  expiresAt: Date | string;
@@ -210,7 +210,7 @@ export type RefreshTokenUncheckedCreateInput = {
210
210
  };
211
211
  export type RefreshTokenUpdateInput = {
212
212
  id?: Prisma.StringFieldUpdateOperationsInput | string;
213
- tokenHash?: Prisma.StringFieldUpdateOperationsInput | string;
213
+ jti?: Prisma.NullableStringFieldUpdateOperationsInput | string | null;
214
214
  token?: Prisma.NullableStringFieldUpdateOperationsInput | string | null;
215
215
  expiresAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string;
216
216
  createdAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string;
@@ -218,7 +218,7 @@ export type RefreshTokenUpdateInput = {
218
218
  };
219
219
  export type RefreshTokenUncheckedUpdateInput = {
220
220
  id?: Prisma.StringFieldUpdateOperationsInput | string;
221
- tokenHash?: Prisma.StringFieldUpdateOperationsInput | string;
221
+ jti?: Prisma.NullableStringFieldUpdateOperationsInput | string | null;
222
222
  token?: Prisma.NullableStringFieldUpdateOperationsInput | string | null;
223
223
  userId?: Prisma.StringFieldUpdateOperationsInput | string;
224
224
  expiresAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string;
@@ -226,7 +226,7 @@ export type RefreshTokenUncheckedUpdateInput = {
226
226
  };
227
227
  export type RefreshTokenCreateManyInput = {
228
228
  id?: string;
229
- tokenHash: string;
229
+ jti?: string | null;
230
230
  token?: string | null;
231
231
  userId: string;
232
232
  expiresAt: Date | string;
@@ -234,14 +234,14 @@ export type RefreshTokenCreateManyInput = {
234
234
  };
235
235
  export type RefreshTokenUpdateManyMutationInput = {
236
236
  id?: Prisma.StringFieldUpdateOperationsInput | string;
237
- tokenHash?: Prisma.StringFieldUpdateOperationsInput | string;
237
+ jti?: Prisma.NullableStringFieldUpdateOperationsInput | string | null;
238
238
  token?: Prisma.NullableStringFieldUpdateOperationsInput | string | null;
239
239
  expiresAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string;
240
240
  createdAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string;
241
241
  };
242
242
  export type RefreshTokenUncheckedUpdateManyInput = {
243
243
  id?: Prisma.StringFieldUpdateOperationsInput | string;
244
- tokenHash?: Prisma.StringFieldUpdateOperationsInput | string;
244
+ jti?: Prisma.NullableStringFieldUpdateOperationsInput | string | null;
245
245
  token?: Prisma.NullableStringFieldUpdateOperationsInput | string | null;
246
246
  userId?: Prisma.StringFieldUpdateOperationsInput | string;
247
247
  expiresAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string;
@@ -262,7 +262,7 @@ export type RefreshTokenOrderByRelevanceInput = {
262
262
  };
263
263
  export type RefreshTokenCountOrderByAggregateInput = {
264
264
  id?: Prisma.SortOrder;
265
- tokenHash?: Prisma.SortOrder;
265
+ jti?: Prisma.SortOrder;
266
266
  token?: Prisma.SortOrder;
267
267
  userId?: Prisma.SortOrder;
268
268
  expiresAt?: Prisma.SortOrder;
@@ -270,7 +270,7 @@ export type RefreshTokenCountOrderByAggregateInput = {
270
270
  };
271
271
  export type RefreshTokenMaxOrderByAggregateInput = {
272
272
  id?: Prisma.SortOrder;
273
- tokenHash?: Prisma.SortOrder;
273
+ jti?: Prisma.SortOrder;
274
274
  token?: Prisma.SortOrder;
275
275
  userId?: Prisma.SortOrder;
276
276
  expiresAt?: Prisma.SortOrder;
@@ -278,7 +278,7 @@ export type RefreshTokenMaxOrderByAggregateInput = {
278
278
  };
279
279
  export type RefreshTokenMinOrderByAggregateInput = {
280
280
  id?: Prisma.SortOrder;
281
- tokenHash?: Prisma.SortOrder;
281
+ jti?: Prisma.SortOrder;
282
282
  token?: Prisma.SortOrder;
283
283
  userId?: Prisma.SortOrder;
284
284
  expiresAt?: Prisma.SortOrder;
@@ -324,14 +324,14 @@ export type RefreshTokenUncheckedUpdateManyWithoutUserNestedInput = {
324
324
  };
325
325
  export type RefreshTokenCreateWithoutUserInput = {
326
326
  id?: string;
327
- tokenHash: string;
327
+ jti?: string | null;
328
328
  token?: string | null;
329
329
  expiresAt: Date | string;
330
330
  createdAt?: Date | string;
331
331
  };
332
332
  export type RefreshTokenUncheckedCreateWithoutUserInput = {
333
333
  id?: string;
334
- tokenHash: string;
334
+ jti?: string | null;
335
335
  token?: string | null;
336
336
  expiresAt: Date | string;
337
337
  createdAt?: Date | string;
@@ -362,7 +362,7 @@ export type RefreshTokenScalarWhereInput = {
362
362
  OR?: Prisma.RefreshTokenScalarWhereInput[];
363
363
  NOT?: Prisma.RefreshTokenScalarWhereInput | Prisma.RefreshTokenScalarWhereInput[];
364
364
  id?: Prisma.StringFilter<"RefreshToken"> | string;
365
- tokenHash?: Prisma.StringFilter<"RefreshToken"> | string;
365
+ jti?: Prisma.StringNullableFilter<"RefreshToken"> | string | null;
366
366
  token?: Prisma.StringNullableFilter<"RefreshToken"> | string | null;
367
367
  userId?: Prisma.StringFilter<"RefreshToken"> | string;
368
368
  expiresAt?: Prisma.DateTimeFilter<"RefreshToken"> | Date | string;
@@ -370,35 +370,35 @@ export type RefreshTokenScalarWhereInput = {
370
370
  };
371
371
  export type RefreshTokenCreateManyUserInput = {
372
372
  id?: string;
373
- tokenHash: string;
373
+ jti?: string | null;
374
374
  token?: string | null;
375
375
  expiresAt: Date | string;
376
376
  createdAt?: Date | string;
377
377
  };
378
378
  export type RefreshTokenUpdateWithoutUserInput = {
379
379
  id?: Prisma.StringFieldUpdateOperationsInput | string;
380
- tokenHash?: Prisma.StringFieldUpdateOperationsInput | string;
380
+ jti?: Prisma.NullableStringFieldUpdateOperationsInput | string | null;
381
381
  token?: Prisma.NullableStringFieldUpdateOperationsInput | string | null;
382
382
  expiresAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string;
383
383
  createdAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string;
384
384
  };
385
385
  export type RefreshTokenUncheckedUpdateWithoutUserInput = {
386
386
  id?: Prisma.StringFieldUpdateOperationsInput | string;
387
- tokenHash?: Prisma.StringFieldUpdateOperationsInput | string;
387
+ jti?: Prisma.NullableStringFieldUpdateOperationsInput | string | null;
388
388
  token?: Prisma.NullableStringFieldUpdateOperationsInput | string | null;
389
389
  expiresAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string;
390
390
  createdAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string;
391
391
  };
392
392
  export type RefreshTokenUncheckedUpdateManyWithoutUserInput = {
393
393
  id?: Prisma.StringFieldUpdateOperationsInput | string;
394
- tokenHash?: Prisma.StringFieldUpdateOperationsInput | string;
394
+ jti?: Prisma.NullableStringFieldUpdateOperationsInput | string | null;
395
395
  token?: Prisma.NullableStringFieldUpdateOperationsInput | string | null;
396
396
  expiresAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string;
397
397
  createdAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string;
398
398
  };
399
399
  export type RefreshTokenSelect<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs> = runtime.Types.Extensions.GetSelect<{
400
400
  id?: boolean;
401
- tokenHash?: boolean;
401
+ jti?: boolean;
402
402
  token?: boolean;
403
403
  userId?: boolean;
404
404
  expiresAt?: boolean;
@@ -407,13 +407,13 @@ export type RefreshTokenSelect<ExtArgs extends runtime.Types.Extensions.Internal
407
407
  }, ExtArgs["result"]["refreshToken"]>;
408
408
  export type RefreshTokenSelectScalar = {
409
409
  id?: boolean;
410
- tokenHash?: boolean;
410
+ jti?: boolean;
411
411
  token?: boolean;
412
412
  userId?: boolean;
413
413
  expiresAt?: boolean;
414
414
  createdAt?: boolean;
415
415
  };
416
- export type RefreshTokenOmit<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs> = runtime.Types.Extensions.GetOmit<"id" | "tokenHash" | "token" | "userId" | "expiresAt" | "createdAt", ExtArgs["result"]["refreshToken"]>;
416
+ export type RefreshTokenOmit<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs> = runtime.Types.Extensions.GetOmit<"id" | "jti" | "token" | "userId" | "expiresAt" | "createdAt", ExtArgs["result"]["refreshToken"]>;
417
417
  export type RefreshTokenInclude<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs> = {
418
418
  user?: boolean | Prisma.UserDefaultArgs<ExtArgs>;
419
419
  };
@@ -424,7 +424,7 @@ export type $RefreshTokenPayload<ExtArgs extends runtime.Types.Extensions.Intern
424
424
  };
425
425
  scalars: runtime.Types.Extensions.GetPayloadResult<{
426
426
  id: string;
427
- tokenHash: string;
427
+ jti: string | null;
428
428
  token: string | null;
429
429
  userId: string;
430
430
  expiresAt: Date;
@@ -733,7 +733,7 @@ export interface Prisma__RefreshTokenClient<T, Null = never, ExtArgs extends run
733
733
  */
734
734
  export interface RefreshTokenFieldRefs {
735
735
  readonly id: Prisma.FieldRef<"RefreshToken", 'String'>;
736
- readonly tokenHash: Prisma.FieldRef<"RefreshToken", 'String'>;
736
+ readonly jti: Prisma.FieldRef<"RefreshToken", 'String'>;
737
737
  readonly token: Prisma.FieldRef<"RefreshToken", 'String'>;
738
738
  readonly userId: Prisma.FieldRef<"RefreshToken", 'String'>;
739
739
  readonly expiresAt: Prisma.FieldRef<"RefreshToken", 'DateTime'>;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@valentine-efagene/qshelter-common",
3
- "version": "2.0.14",
3
+ "version": "2.0.15",
4
4
  "description": "Shared database schemas and utilities for QShelter services",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -0,0 +1,16 @@
1
+ /*
2
+ Warnings:
3
+
4
+ - You are about to drop the column `tokenHash` on the `refresh_tokens` table. All the data in the column will be lost.
5
+ - A unique constraint covering the columns `[jti]` on the table `refresh_tokens` will be added. If there are existing duplicate values, this will fail.
6
+
7
+ */
8
+ -- DropIndex
9
+ DROP INDEX `refresh_tokens_tokenHash_key` ON `refresh_tokens`;
10
+
11
+ -- AlterTable
12
+ ALTER TABLE `refresh_tokens` DROP COLUMN `tokenHash`,
13
+ ADD COLUMN `jti` VARCHAR(255) NULL;
14
+
15
+ -- CreateIndex
16
+ CREATE UNIQUE INDEX `refresh_tokens_jti_key` ON `refresh_tokens`(`jti`);
@@ -124,8 +124,8 @@ model Tenant {
124
124
 
125
125
  model RefreshToken {
126
126
  id String @id @default(cuid())
127
- // Store a fixed-length hash for lookup/indexing and keep the raw JWT (optional)
128
- tokenHash String @unique @db.VarChar(64)
127
+ // Use the JWT `jti` for indexed lookups and keep the raw JWT (optional)
128
+ jti String? @unique @db.VarChar(255)
129
129
  token String? @db.LongText
130
130
  userId String
131
131
  user User @relation(fields: [userId], references: [id], onDelete: Cascade)