organization.prisma 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162
  1. model AppSetting {
  2. id String @id @default(cuid())
  3. key String
  4. value String
  5. userId String
  6. user User @relation(fields: [userId], references: [id], onDelete: Cascade)
  7. organizationId String?
  8. organization Organization? @relation(fields: [organizationId], references: [id], onDelete: Cascade)
  9. @@unique([organizationId, key])
  10. @@index([organizationId])
  11. @@map("app_settings")
  12. }
  13. /// A user-defined dashboard card: a named, filtered table over one entity.
  14. /// The config shape (entity, filters, columns, limit) is validated against
  15. /// the field registry in customCardActions — nothing here reaches SQL raw.
  16. model DashboardWidget {
  17. id String @id @default(cuid())
  18. name String
  19. config Json
  20. userId String
  21. user User @relation(fields: [userId], references: [id], onDelete: Cascade)
  22. organizationId String
  23. createdAt DateTime @default(now())
  24. updatedAt DateTime @updatedAt
  25. @@index([userId, organizationId])
  26. @@map("dashboard_widgets")
  27. }
  28. model Organization {
  29. id String @id @default(cuid())
  30. name String
  31. portalSlug String? @unique
  32. createdAt DateTime @default(now())
  33. updatedAt DateTime @updatedAt
  34. members OrganizationMember[]
  35. roles Role[]
  36. vehicles Vehicle[]
  37. serviceRecords ServiceRecord[]
  38. reminders Reminder[]
  39. customers Customer[]
  40. quotes Quote[]
  41. inventoryParts InventoryPart[]
  42. laborPresets LaborPreset[]
  43. customFieldDefinitions CustomFieldDefinition[]
  44. settings AppSetting[]
  45. subscription Subscription?
  46. invitations TeamInvitation[]
  47. inspectionTemplates InspectionTemplate[]
  48. smsMessages SmsMessage[]
  49. telegramMessages TelegramMessage[]
  50. whatsappMessages WhatsappMessage[]
  51. technicians Technician[]
  52. workBays WorkBay[]
  53. timeEntries TimeEntry[]
  54. pushDevices PushDevice[]
  55. appSetupCodes TechnicianSetupCode[]
  56. technicianLoginCodes TechnicianLoginCode[]
  57. auditLogs AuditLog[]
  58. statusReports StatusReport[]
  59. reportSchedules ReportSchedule[]
  60. scheduledMessages ScheduledMessage[]
  61. webhooks Webhook[]
  62. stockMovements StockMovement[]
  63. tireWarehouses TireWarehouse[]
  64. tireLocations TireLocation[]
  65. tireSets TireSet[]
  66. tireSetAttachments TireSetAttachment[]
  67. tireMovements TireMovement[]
  68. tireTreatments TireTreatment[]
  69. integrationConnections IntegrationConnection[]
  70. externalCalendarEvents ExternalCalendarEvent[]
  71. importBatches ImportBatch[]
  72. vehicleInspectionStatuses VehicleInspectionStatus[]
  73. inspectionReminderCampaigns InspectionReminderCampaign[]
  74. inspectionReminderSends InspectionReminderSend[]
  75. documentDesigns DocumentDesign[]
  76. documentDesignSnapshots DocumentDesignSnapshot[]
  77. documentAssetSnapshots DocumentAssetSnapshot[]
  78. @@map("organizations")
  79. }
  80. model OrganizationMember {
  81. id String @id @default(cuid())
  82. role String @default("member")
  83. userId String
  84. user User @relation(fields: [userId], references: [id], onDelete: Cascade)
  85. organizationId String
  86. organization Organization @relation(fields: [organizationId], references: [id], onDelete: Cascade)
  87. roleId String?
  88. customRole Role? @relation(fields: [roleId], references: [id], onDelete: SetNull)
  89. @@unique([userId, organizationId])
  90. @@map("organization_members")
  91. }
  92. model Role {
  93. id String @id @default(cuid())
  94. name String
  95. isAdmin Boolean @default(false)
  96. createdAt DateTime @default(now())
  97. updatedAt DateTime @updatedAt
  98. organizationId String
  99. organization Organization @relation(fields: [organizationId], references: [id], onDelete: Cascade)
  100. permissions Permission[]
  101. members OrganizationMember[]
  102. teamInvitations TeamInvitation[]
  103. @@unique([organizationId, name])
  104. @@map("roles")
  105. }
  106. model Permission {
  107. id String @id @default(cuid())
  108. action String
  109. subject String
  110. roleId String
  111. role Role @relation(fields: [roleId], references: [id], onDelete: Cascade)
  112. @@unique([roleId, action, subject])
  113. @@index([roleId])
  114. @@map("permissions")
  115. }
  116. model SystemSetting {
  117. id String @id @default(cuid())
  118. key String @unique
  119. value String
  120. @@map("system_settings")
  121. }
  122. model TeamInvitation {
  123. id String @id @default(cuid())
  124. email String
  125. role String @default("member")
  126. token String @unique
  127. status String @default("pending") // pending | accepted | cancelled
  128. expiresAt DateTime
  129. createdAt DateTime @default(now())
  130. organizationId String
  131. organization Organization @relation(fields: [organizationId], references: [id], onDelete: Cascade)
  132. invitedById String
  133. roleId String?
  134. customRole Role? @relation(fields: [roleId], references: [id], onDelete: SetNull)
  135. @@unique([email, organizationId])
  136. @@index([token])
  137. @@map("team_invitations")
  138. }