organization.prisma 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163
  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. tireSetAttachments TireSetAttachment[]
  68. tireMovements TireMovement[]
  69. tireTreatments TireTreatment[]
  70. integrationConnections IntegrationConnection[]
  71. externalCalendarEvents ExternalCalendarEvent[]
  72. importBatches ImportBatch[]
  73. vehicleInspectionStatuses VehicleInspectionStatus[]
  74. inspectionReminderCampaigns InspectionReminderCampaign[]
  75. inspectionReminderSends InspectionReminderSend[]
  76. documentDesigns DocumentDesign[]
  77. documentDesignSnapshots DocumentDesignSnapshot[]
  78. documentAssetSnapshots DocumentAssetSnapshot[]
  79. @@map("organizations")
  80. }
  81. model OrganizationMember {
  82. id String @id @default(cuid())
  83. role String @default("member")
  84. userId String
  85. user User @relation(fields: [userId], references: [id], onDelete: Cascade)
  86. organizationId String
  87. organization Organization @relation(fields: [organizationId], references: [id], onDelete: Cascade)
  88. roleId String?
  89. customRole Role? @relation(fields: [roleId], references: [id], onDelete: SetNull)
  90. @@unique([userId, organizationId])
  91. @@map("organization_members")
  92. }
  93. model Role {
  94. id String @id @default(cuid())
  95. name String
  96. isAdmin Boolean @default(false)
  97. createdAt DateTime @default(now())
  98. updatedAt DateTime @updatedAt
  99. organizationId String
  100. organization Organization @relation(fields: [organizationId], references: [id], onDelete: Cascade)
  101. permissions Permission[]
  102. members OrganizationMember[]
  103. teamInvitations TeamInvitation[]
  104. @@unique([organizationId, name])
  105. @@map("roles")
  106. }
  107. model Permission {
  108. id String @id @default(cuid())
  109. action String
  110. subject String
  111. roleId String
  112. role Role @relation(fields: [roleId], references: [id], onDelete: Cascade)
  113. @@unique([roleId, action, subject])
  114. @@index([roleId])
  115. @@map("permissions")
  116. }
  117. model SystemSetting {
  118. id String @id @default(cuid())
  119. key String @unique
  120. value String
  121. @@map("system_settings")
  122. }
  123. model TeamInvitation {
  124. id String @id @default(cuid())
  125. email String
  126. role String @default("member")
  127. token String @unique
  128. status String @default("pending") // pending | accepted | cancelled
  129. expiresAt DateTime
  130. createdAt DateTime @default(now())
  131. organizationId String
  132. organization Organization @relation(fields: [organizationId], references: [id], onDelete: Cascade)
  133. invitedById String
  134. roleId String?
  135. customRole Role? @relation(fields: [roleId], references: [id], onDelete: SetNull)
  136. @@unique([email, organizationId])
  137. @@index([token])
  138. @@map("team_invitations")
  139. }