organization.prisma 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164
  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. emailTemplates EmailTemplate[]
  46. subscription Subscription?
  47. invitations TeamInvitation[]
  48. inspectionTemplates InspectionTemplate[]
  49. smsMessages SmsMessage[]
  50. telegramMessages TelegramMessage[]
  51. whatsappMessages WhatsappMessage[]
  52. technicians Technician[]
  53. workBays WorkBay[]
  54. timeEntries TimeEntry[]
  55. pushDevices PushDevice[]
  56. appSetupCodes TechnicianSetupCode[]
  57. technicianLoginCodes TechnicianLoginCode[]
  58. auditLogs AuditLog[]
  59. statusReports StatusReport[]
  60. reportSchedules ReportSchedule[]
  61. scheduledMessages ScheduledMessage[]
  62. webhooks Webhook[]
  63. stockMovements StockMovement[]
  64. tireWarehouses TireWarehouse[]
  65. tireLocations TireLocation[]
  66. tireSets TireSet[]
  67. workOrderStatuses WorkOrderStatus[]
  68. tireSetAttachments TireSetAttachment[]
  69. tireMovements TireMovement[]
  70. tireTreatments TireTreatment[]
  71. integrationConnections IntegrationConnection[]
  72. externalCalendarEvents ExternalCalendarEvent[]
  73. importBatches ImportBatch[]
  74. vehicleInspectionStatuses VehicleInspectionStatus[]
  75. inspectionReminderCampaigns InspectionReminderCampaign[]
  76. inspectionReminderSends InspectionReminderSend[]
  77. documentDesigns DocumentDesign[]
  78. documentDesignSnapshots DocumentDesignSnapshot[]
  79. documentAssetSnapshots DocumentAssetSnapshot[]
  80. @@map("organizations")
  81. }
  82. model OrganizationMember {
  83. id String @id @default(cuid())
  84. role String @default("member")
  85. userId String
  86. user User @relation(fields: [userId], references: [id], onDelete: Cascade)
  87. organizationId String
  88. organization Organization @relation(fields: [organizationId], references: [id], onDelete: Cascade)
  89. roleId String?
  90. customRole Role? @relation(fields: [roleId], references: [id], onDelete: SetNull)
  91. @@unique([userId, organizationId])
  92. @@map("organization_members")
  93. }
  94. model Role {
  95. id String @id @default(cuid())
  96. name String
  97. isAdmin Boolean @default(false)
  98. createdAt DateTime @default(now())
  99. updatedAt DateTime @updatedAt
  100. organizationId String
  101. organization Organization @relation(fields: [organizationId], references: [id], onDelete: Cascade)
  102. permissions Permission[]
  103. members OrganizationMember[]
  104. teamInvitations TeamInvitation[]
  105. @@unique([organizationId, name])
  106. @@map("roles")
  107. }
  108. model Permission {
  109. id String @id @default(cuid())
  110. action String
  111. subject String
  112. roleId String
  113. role Role @relation(fields: [roleId], references: [id], onDelete: Cascade)
  114. @@unique([roleId, action, subject])
  115. @@index([roleId])
  116. @@map("permissions")
  117. }
  118. model SystemSetting {
  119. id String @id @default(cuid())
  120. key String @unique
  121. value String
  122. @@map("system_settings")
  123. }
  124. model TeamInvitation {
  125. id String @id @default(cuid())
  126. email String
  127. role String @default("member")
  128. token String @unique
  129. status String @default("pending") // pending | accepted | cancelled
  130. expiresAt DateTime
  131. createdAt DateTime @default(now())
  132. organizationId String
  133. organization Organization @relation(fields: [organizationId], references: [id], onDelete: Cascade)
  134. invitedById String
  135. roleId String?
  136. customRole Role? @relation(fields: [roleId], references: [id], onDelete: SetNull)
  137. @@unique([email, organizationId])
  138. @@index([token])
  139. @@map("team_invitations")
  140. }