@trycompai/db 1.0.9 → 1.1.1

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.
Files changed (236) hide show
  1. package/INTEGRATION_GUIDE.md +360 -0
  2. package/README.md +14 -2
  3. package/dist/index.d.mts +2 -5
  4. package/dist/index.d.ts +2 -5
  5. package/dist/index.js +3 -9
  6. package/dist/index.mjs +1 -4
  7. package/dist/prisma/schema.prisma +810 -0
  8. package/package.json +18 -18
  9. package/scripts/setup-consumer.sh +7 -2
  10. package/dist/prisma/migrations/20250403163138_init/migration.sql +0 -611
  11. package/dist/prisma/migrations/20250403165218_archived_on_its_own/migration.sql +0 -29
  12. package/dist/prisma/migrations/20250403194504_risk_assignee/migration.sql +0 -18
  13. package/dist/prisma/migrations/20250403201319_tasks_use_asignee/migration.sql +0 -16
  14. package/dist/prisma/migrations/20250403205655_vendor_assignee/migration.sql +0 -22
  15. package/dist/prisma/migrations/20250403205840_oops_optional/migration.sql +0 -2
  16. package/dist/prisma/migrations/20250403210049_task_assignee_optional_too/migration.sql +0 -8
  17. package/dist/prisma/migrations/20250404004853_stripecustomerid/migration.sql +0 -2
  18. package/dist/prisma/migrations/20250406004306_added_common_comment_table/migration.sql +0 -20
  19. package/dist/prisma/migrations/20250410193847_add_unique_constraint_to_artifact_t_table/migration.sql +0 -30
  20. package/dist/prisma/migrations/20250410193857_remove_published_field_from_evidence/migration.sql +0 -12
  21. package/dist/prisma/migrations/20250414191353_onboarding_experience/migration.sql +0 -25
  22. package/dist/prisma/migrations/20250414203443_added_evidence_to_onboarding/migration.sql +0 -2
  23. package/dist/prisma/migrations/20250417205622_add_global_vendors/migration.sql +0 -26
  24. package/dist/prisma/migrations/20250417205625_update_task_table_and_comments_and_attachments/migration.sql +0 -86
  25. package/dist/prisma/migrations/20250417205627_remove_evidence_table/migration.sql +0 -109
  26. package/dist/prisma/migrations/20250417205629_frequency_task_is_optional/migration.sql +0 -2
  27. package/dist/prisma/migrations/20250418151856_add_comment_relationship_to_attachment_and_vice_versa/migration.sql +0 -8
  28. package/dist/prisma/migrations/20250423154259_make_role_string/migration.sql +0 -9
  29. package/dist/prisma/migrations/20250424165055_update_onboarding_to_use_tasks/migration.sql +0 -9
  30. package/dist/prisma/migrations/20250424170518_remove_evidence_artifact_type/migration.sql +0 -14
  31. package/dist/prisma/migrations/20250428202144_add_website_to_organization/migration.sql +0 -2
  32. package/dist/prisma/migrations/20250429155419_add_company_details_to_onboarding/migration.sql +0 -2
  33. package/dist/prisma/migrations/20250509160401_added_framework_editor/migration.sql +0 -8
  34. package/dist/prisma/migrations/20250509162708_init_framework_editor_tables/migration.sql +0 -122
  35. package/dist/prisma/migrations/20250509172401_drop_slug/migration.sql +0 -11
  36. package/dist/prisma/migrations/20250509232122_trust_portal/migration.sql +0 -24
  37. package/dist/prisma/migrations/20250511040043_add_custom_domain_to_trust_portal/migration.sql +0 -2
  38. package/dist/prisma/migrations/20250511042943_trust_portal_domain_verified/migration.sql +0 -2
  39. package/dist/prisma/migrations/20250512004633_added_identifier/migration.sql +0 -5
  40. package/dist/prisma/migrations/20250512115717_added_framework_status/migration.sql +0 -7
  41. package/dist/prisma/migrations/20250512163351_add_contact_details_trust_portal/migration.sql +0 -2
  42. package/dist/prisma/migrations/20250514143147_remove_unique_constraint_on_integration_name/migration.sql +0 -2
  43. package/dist/prisma/migrations/20250514144228_add_vercel_check/migration.sql +0 -2
  44. package/dist/prisma/migrations/20250514150021_add_vercel_verification/migration.sql +0 -2
  45. package/dist/prisma/migrations/20250514161440_add_dates_to_framework_editor_tables/migration.sql +0 -23
  46. package/dist/prisma/migrations/20250515123635_trust_portal_friendly_url/migration.sql +0 -21
  47. package/dist/prisma/migrations/20250515124040_fix_trust_constraints/migration.sql +0 -11
  48. package/dist/prisma/migrations/20250516125758_patch_framework_id_in_editor/migration.sql +0 -6
  49. package/dist/prisma/migrations/20250516132431_add_many_to_many_support_to_tasks/migration.sql +0 -69
  50. package/dist/prisma/migrations/20250516142234_make_entity_optional/migration.sql +0 -3
  51. package/dist/prisma/migrations/20250516145149_drop_entity_and_entity_type/migration.sql +0 -16
  52. package/dist/prisma/migrations/20250516150558_drop_task_type/migration.sql +0 -2
  53. package/dist/prisma/migrations/20250516160714_insert_hardcoded_framework_to_db/migration.sql +0 -37
  54. package/dist/prisma/migrations/20250516161852_cast_framework_id_and_requirement_id_to_string/migration.sql +0 -5
  55. package/dist/prisma/migrations/20250516162324_convert_ids_to_new_format/migration.sql +0 -31
  56. package/dist/prisma/migrations/20250516162730_convert_framework_id/migration.sql +0 -5
  57. package/dist/prisma/migrations/20250516163156_added_relation_to_framework_and_requirement_maps/migration.sql +0 -5
  58. package/dist/prisma/migrations/20250516164307_drop_enums/migration.sql +0 -5
  59. package/dist/prisma/migrations/20250516194123_add_cal_option/migration.sql +0 -2
  60. package/dist/prisma/migrations/20250518133218_add_booking_details/migration.sql +0 -2
  61. package/dist/prisma/migrations/20250519141733_change_framework_id_to_string/migration.sql +0 -3
  62. package/dist/prisma/migrations/20250519141735_drop_enum_on_requirements_map/migration.sql +0 -2
  63. package/dist/prisma/migrations/20250519142913_add_template_references_to_instances/migration.sql +0 -17
  64. package/dist/prisma/migrations/20250519172353_drop_artifacts/migration.sql +0 -56
  65. package/dist/prisma/migrations/20250519204449_drop_relation_between_controls_and_framewrok_instance/migration.sql +0 -14
  66. package/dist/prisma/migrations/20250519212347_add_visibility_toggle_to_framework_editor/migration.sql +0 -2
  67. package/dist/prisma/migrations/20250520152548_add_approver_to_policy/migration.sql +0 -5
  68. package/dist/prisma/migrations/20250520175109_add_description_to_audit_log_for_convenience/migration.sql +0 -2
  69. package/dist/prisma/migrations/20250520175523_add_member_id_to_log_table/migration.sql +0 -8
  70. package/dist/prisma/migrations/20250521140239_add_entity_type_and_id_for_audit_logs_for_easy_filtering/migration.sql +0 -9
  71. package/dist/prisma/migrations/20250603135046_add_v2_onboarding_requirements/migration.sql +0 -36
  72. package/dist/prisma/migrations/20250604155610_add_job_id_column_to_onboarding/migration.sql +0 -2
  73. package/dist/prisma/migrations/20250605151521_make_framework_visibility_false/migration.sql +0 -2
  74. package/dist/prisma/migrations/20250605184738_add_cascade_to_entities_owned_by_org/migration.sql +0 -29
  75. package/dist/prisma/migrations/20250605184740_add_device_agent_details_to_org/migration.sql +0 -18
  76. package/dist/prisma/migrations/20250609130129_add_not_relevant/migration.sql +0 -2
  77. package/dist/prisma/migrations/20250610215328_add_fleet_label_to_employees/migration.sql +0 -2
  78. package/dist/prisma/migrations/20250611144654_add_is_fleet_setup_flag/migration.sql +0 -2
  79. package/dist/prisma/migrations/20250612160731_remove_unused_cols/migration.sql +0 -10
  80. package/dist/prisma/migrations/20250618001304_add_default_slug/migration.sql +0 -3
  81. package/dist/prisma/migrations/20250623184529_add_subscription_type/migration.sql +0 -12
  82. package/dist/prisma/migrations/20250626021946_add_starter_subscription_type/migration.sql +0 -27
  83. package/dist/prisma/migrations/20250626030206_added_new_subscription_type/migration.sql +0 -2
  84. package/dist/prisma/migrations/20250627180331_add_onboaridng_field/migration.sql +0 -5
  85. package/dist/prisma/migrations/20250627180828_rename_completed_col/migration.sql +0 -15
  86. package/dist/prisma/migrations/20250708152414_add_had_call_col/migration.sql +0 -2
  87. package/dist/prisma/migrations/20250711201749_update_retool_role_to_edit_had_call_column_in_organization_table/migration.sql +0 -7
  88. package/dist/prisma/migrations/20250711204234_add_read_permission_for_where_clause_on_retool_role/migration.sql +0 -8
  89. package/dist/prisma/migrations/20250714153009_remove_stripe_and_add_has_access/migration.sql +0 -31
  90. package/dist/prisma/migrations/20250715200054_add_perms_for_has_access_for_retool/migration.sql +0 -7
  91. package/dist/prisma/migrations/migration_lock.toml +0 -3
  92. package/dist/prisma/schema/attachments.prisma +0 -35
  93. package/dist/prisma/schema/auth.prisma +0 -122
  94. package/dist/prisma/schema/comment.prisma +0 -27
  95. package/dist/prisma/schema/context.prisma +0 -18
  96. package/dist/prisma/schema/control.prisma +0 -21
  97. package/dist/prisma/schema/framework-editor.prisma +0 -96
  98. package/dist/prisma/schema/framework.prisma +0 -14
  99. package/dist/prisma/schema/integration.prisma +0 -32
  100. package/dist/prisma/schema/onboarding.prisma +0 -18
  101. package/dist/prisma/schema/organization.prisma +0 -34
  102. package/dist/prisma/schema/policy.prisma +0 -32
  103. package/dist/prisma/schema/requirement.prisma +0 -15
  104. package/dist/prisma/schema/risk.prisma +0 -57
  105. package/dist/prisma/schema/shared.prisma +0 -104
  106. package/dist/prisma/schema/task.prisma +0 -41
  107. package/dist/prisma/schema/trust.prisma +0 -37
  108. package/dist/prisma/schema/vendor.prisma +0 -56
  109. package/dist/prisma/seed/frameworkEditorSchemas.js +0 -136
  110. package/dist/prisma/seed/frameworkEditorSchemas.ts +0 -178
  111. package/dist/prisma/seed/primitives/FrameworkEditorControlTemplate.json +0 -296
  112. package/dist/prisma/seed/primitives/FrameworkEditorFramework.json +0 -101
  113. package/dist/prisma/seed/primitives/FrameworkEditorPolicyTemplate.json +0 -6057
  114. package/dist/prisma/seed/primitives/FrameworkEditorRequirement.json +0 -7841
  115. package/dist/prisma/seed/primitives/FrameworkEditorTaskTemplate.json +0 -308
  116. package/dist/prisma/seed/primitives/FrameworkEditorVideo.json +0 -47
  117. package/dist/prisma/seed/relations/_FrameworkEditorControlTemplateToFrameworkEditorPolicyTemplate.json +0 -178
  118. package/dist/prisma/seed/relations/_FrameworkEditorControlTemplateToFrameworkEditorRequirement.json +0 -470
  119. package/dist/prisma/seed/relations/_FrameworkEditorControlTemplateToFrameworkEditorTaskTemplate.json +0 -142
  120. package/dist/prisma/seed/seed.js +0 -160
  121. package/dist/prisma/seed/seed.ts +0 -192
  122. package/prisma/functionDefinition.sql +0 -18
  123. package/prisma/migrations/20250403163138_init/migration.sql +0 -611
  124. package/prisma/migrations/20250403165218_archived_on_its_own/migration.sql +0 -29
  125. package/prisma/migrations/20250403194504_risk_assignee/migration.sql +0 -18
  126. package/prisma/migrations/20250403201319_tasks_use_asignee/migration.sql +0 -16
  127. package/prisma/migrations/20250403205655_vendor_assignee/migration.sql +0 -22
  128. package/prisma/migrations/20250403205840_oops_optional/migration.sql +0 -2
  129. package/prisma/migrations/20250403210049_task_assignee_optional_too/migration.sql +0 -8
  130. package/prisma/migrations/20250404004853_stripecustomerid/migration.sql +0 -2
  131. package/prisma/migrations/20250406004306_added_common_comment_table/migration.sql +0 -20
  132. package/prisma/migrations/20250410193847_add_unique_constraint_to_artifact_t_table/migration.sql +0 -30
  133. package/prisma/migrations/20250410193857_remove_published_field_from_evidence/migration.sql +0 -12
  134. package/prisma/migrations/20250414191353_onboarding_experience/migration.sql +0 -25
  135. package/prisma/migrations/20250414203443_added_evidence_to_onboarding/migration.sql +0 -2
  136. package/prisma/migrations/20250417205622_add_global_vendors/migration.sql +0 -26
  137. package/prisma/migrations/20250417205625_update_task_table_and_comments_and_attachments/migration.sql +0 -86
  138. package/prisma/migrations/20250417205627_remove_evidence_table/migration.sql +0 -109
  139. package/prisma/migrations/20250417205629_frequency_task_is_optional/migration.sql +0 -2
  140. package/prisma/migrations/20250418151856_add_comment_relationship_to_attachment_and_vice_versa/migration.sql +0 -8
  141. package/prisma/migrations/20250423154259_make_role_string/migration.sql +0 -9
  142. package/prisma/migrations/20250424165055_update_onboarding_to_use_tasks/migration.sql +0 -9
  143. package/prisma/migrations/20250424170518_remove_evidence_artifact_type/migration.sql +0 -14
  144. package/prisma/migrations/20250428202144_add_website_to_organization/migration.sql +0 -2
  145. package/prisma/migrations/20250429155419_add_company_details_to_onboarding/migration.sql +0 -2
  146. package/prisma/migrations/20250509160401_added_framework_editor/migration.sql +0 -8
  147. package/prisma/migrations/20250509162708_init_framework_editor_tables/migration.sql +0 -122
  148. package/prisma/migrations/20250509172401_drop_slug/migration.sql +0 -11
  149. package/prisma/migrations/20250509232122_trust_portal/migration.sql +0 -24
  150. package/prisma/migrations/20250511040043_add_custom_domain_to_trust_portal/migration.sql +0 -2
  151. package/prisma/migrations/20250511042943_trust_portal_domain_verified/migration.sql +0 -2
  152. package/prisma/migrations/20250512004633_added_identifier/migration.sql +0 -5
  153. package/prisma/migrations/20250512115717_added_framework_status/migration.sql +0 -7
  154. package/prisma/migrations/20250512163351_add_contact_details_trust_portal/migration.sql +0 -2
  155. package/prisma/migrations/20250514143147_remove_unique_constraint_on_integration_name/migration.sql +0 -2
  156. package/prisma/migrations/20250514144228_add_vercel_check/migration.sql +0 -2
  157. package/prisma/migrations/20250514150021_add_vercel_verification/migration.sql +0 -2
  158. package/prisma/migrations/20250514161440_add_dates_to_framework_editor_tables/migration.sql +0 -23
  159. package/prisma/migrations/20250515123635_trust_portal_friendly_url/migration.sql +0 -21
  160. package/prisma/migrations/20250515124040_fix_trust_constraints/migration.sql +0 -11
  161. package/prisma/migrations/20250516125758_patch_framework_id_in_editor/migration.sql +0 -6
  162. package/prisma/migrations/20250516132431_add_many_to_many_support_to_tasks/migration.sql +0 -69
  163. package/prisma/migrations/20250516142234_make_entity_optional/migration.sql +0 -3
  164. package/prisma/migrations/20250516145149_drop_entity_and_entity_type/migration.sql +0 -16
  165. package/prisma/migrations/20250516150558_drop_task_type/migration.sql +0 -2
  166. package/prisma/migrations/20250516160714_insert_hardcoded_framework_to_db/migration.sql +0 -37
  167. package/prisma/migrations/20250516161852_cast_framework_id_and_requirement_id_to_string/migration.sql +0 -5
  168. package/prisma/migrations/20250516162324_convert_ids_to_new_format/migration.sql +0 -31
  169. package/prisma/migrations/20250516162730_convert_framework_id/migration.sql +0 -5
  170. package/prisma/migrations/20250516163156_added_relation_to_framework_and_requirement_maps/migration.sql +0 -5
  171. package/prisma/migrations/20250516164307_drop_enums/migration.sql +0 -5
  172. package/prisma/migrations/20250516194123_add_cal_option/migration.sql +0 -2
  173. package/prisma/migrations/20250518133218_add_booking_details/migration.sql +0 -2
  174. package/prisma/migrations/20250519141733_change_framework_id_to_string/migration.sql +0 -3
  175. package/prisma/migrations/20250519141735_drop_enum_on_requirements_map/migration.sql +0 -2
  176. package/prisma/migrations/20250519142913_add_template_references_to_instances/migration.sql +0 -17
  177. package/prisma/migrations/20250519172353_drop_artifacts/migration.sql +0 -56
  178. package/prisma/migrations/20250519204449_drop_relation_between_controls_and_framewrok_instance/migration.sql +0 -14
  179. package/prisma/migrations/20250519212347_add_visibility_toggle_to_framework_editor/migration.sql +0 -2
  180. package/prisma/migrations/20250520152548_add_approver_to_policy/migration.sql +0 -5
  181. package/prisma/migrations/20250520175109_add_description_to_audit_log_for_convenience/migration.sql +0 -2
  182. package/prisma/migrations/20250520175523_add_member_id_to_log_table/migration.sql +0 -8
  183. package/prisma/migrations/20250521140239_add_entity_type_and_id_for_audit_logs_for_easy_filtering/migration.sql +0 -9
  184. package/prisma/migrations/20250603135046_add_v2_onboarding_requirements/migration.sql +0 -36
  185. package/prisma/migrations/20250604155610_add_job_id_column_to_onboarding/migration.sql +0 -2
  186. package/prisma/migrations/20250605151521_make_framework_visibility_false/migration.sql +0 -2
  187. package/prisma/migrations/20250605184738_add_cascade_to_entities_owned_by_org/migration.sql +0 -29
  188. package/prisma/migrations/20250605184740_add_device_agent_details_to_org/migration.sql +0 -18
  189. package/prisma/migrations/20250609130129_add_not_relevant/migration.sql +0 -2
  190. package/prisma/migrations/20250610215328_add_fleet_label_to_employees/migration.sql +0 -2
  191. package/prisma/migrations/20250611144654_add_is_fleet_setup_flag/migration.sql +0 -2
  192. package/prisma/migrations/20250612160731_remove_unused_cols/migration.sql +0 -10
  193. package/prisma/migrations/20250618001304_add_default_slug/migration.sql +0 -3
  194. package/prisma/migrations/20250623184529_add_subscription_type/migration.sql +0 -12
  195. package/prisma/migrations/20250626021946_add_starter_subscription_type/migration.sql +0 -27
  196. package/prisma/migrations/20250626030206_added_new_subscription_type/migration.sql +0 -2
  197. package/prisma/migrations/20250627180331_add_onboaridng_field/migration.sql +0 -5
  198. package/prisma/migrations/20250627180828_rename_completed_col/migration.sql +0 -15
  199. package/prisma/migrations/20250708152414_add_had_call_col/migration.sql +0 -2
  200. package/prisma/migrations/20250711201749_update_retool_role_to_edit_had_call_column_in_organization_table/migration.sql +0 -7
  201. package/prisma/migrations/20250711204234_add_read_permission_for_where_clause_on_retool_role/migration.sql +0 -8
  202. package/prisma/migrations/20250714153009_remove_stripe_and_add_has_access/migration.sql +0 -31
  203. package/prisma/migrations/20250715200054_add_perms_for_has_access_for_retool/migration.sql +0 -7
  204. package/prisma/migrations/migration_lock.toml +0 -3
  205. package/prisma/randomSecret.sql +0 -12
  206. package/prisma/schema/attachments.prisma +0 -35
  207. package/prisma/schema/auth.prisma +0 -122
  208. package/prisma/schema/comment.prisma +0 -27
  209. package/prisma/schema/context.prisma +0 -18
  210. package/prisma/schema/control.prisma +0 -21
  211. package/prisma/schema/framework-editor.prisma +0 -96
  212. package/prisma/schema/framework.prisma +0 -14
  213. package/prisma/schema/integration.prisma +0 -32
  214. package/prisma/schema/onboarding.prisma +0 -18
  215. package/prisma/schema/organization.prisma +0 -34
  216. package/prisma/schema/policy.prisma +0 -32
  217. package/prisma/schema/requirement.prisma +0 -15
  218. package/prisma/schema/risk.prisma +0 -57
  219. package/prisma/schema/shared.prisma +0 -104
  220. package/prisma/schema/task.prisma +0 -41
  221. package/prisma/schema/trust.prisma +0 -37
  222. package/prisma/schema/vendor.prisma +0 -56
  223. package/prisma/schema.prisma +0 -12
  224. package/prisma/seed/frameworkEditorSchemas.js +0 -136
  225. package/prisma/seed/frameworkEditorSchemas.ts +0 -178
  226. package/prisma/seed/primitives/FrameworkEditorControlTemplate.json +0 -296
  227. package/prisma/seed/primitives/FrameworkEditorFramework.json +0 -101
  228. package/prisma/seed/primitives/FrameworkEditorPolicyTemplate.json +0 -6057
  229. package/prisma/seed/primitives/FrameworkEditorRequirement.json +0 -7841
  230. package/prisma/seed/primitives/FrameworkEditorTaskTemplate.json +0 -308
  231. package/prisma/seed/primitives/FrameworkEditorVideo.json +0 -47
  232. package/prisma/seed/relations/_FrameworkEditorControlTemplateToFrameworkEditorPolicyTemplate.json +0 -178
  233. package/prisma/seed/relations/_FrameworkEditorControlTemplateToFrameworkEditorRequirement.json +0 -470
  234. package/prisma/seed/relations/_FrameworkEditorControlTemplateToFrameworkEditorTaskTemplate.json +0 -142
  235. package/prisma/seed/seed.js +0 -160
  236. package/prisma/seed/seed.ts +0 -192
@@ -10,3 +10,813 @@ datasource db {
10
10
  directUrl = env("DATABASE_URL")
11
11
  extensions = [pgcrypto]
12
12
  }
13
+
14
+
15
+ // ===== attachments.prisma =====
16
+ model Attachment {
17
+ id String @id @default(dbgenerated("generate_prefixed_cuid('att'::text)"))
18
+ name String
19
+ url String
20
+ type AttachmentType
21
+ entityId String
22
+ entityType AttachmentEntityType
23
+
24
+ // Dates
25
+ createdAt DateTime @default(now())
26
+ updatedAt DateTime @updatedAt
27
+
28
+ // Relationships
29
+ organizationId String
30
+ organization Organization @relation(fields: [organizationId], references: [id], onDelete: Cascade)
31
+ comment Comment? @relation(fields: [commentId], references: [id])
32
+ commentId String?
33
+
34
+ @@index([entityId, entityType])
35
+ }
36
+
37
+ enum AttachmentEntityType {
38
+ task
39
+ vendor
40
+ risk
41
+ comment
42
+ }
43
+
44
+ enum AttachmentType {
45
+ image
46
+ video
47
+ audio
48
+ document
49
+ other
50
+ }
51
+
52
+
53
+ // ===== auth.prisma =====
54
+ model User {
55
+ id String @id @default(dbgenerated("generate_prefixed_cuid('usr'::text)"))
56
+ name String
57
+ email String
58
+ emailVerified Boolean
59
+ image String?
60
+ createdAt DateTime @default(now())
61
+ updatedAt DateTime @updatedAt
62
+ lastLogin DateTime?
63
+
64
+ accounts Account[]
65
+ auditLog AuditLog[]
66
+ integrationResults IntegrationResult[]
67
+ invitations Invitation[]
68
+ members Member[]
69
+ sessions Session[]
70
+
71
+ @@unique([email])
72
+ }
73
+
74
+ model EmployeeTrainingVideoCompletion {
75
+ id String @id @default(dbgenerated("generate_prefixed_cuid('evc'::text)"))
76
+ completedAt DateTime?
77
+ videoId String
78
+
79
+ memberId String
80
+ member Member @relation(fields: [memberId], references: [id], onDelete: Cascade)
81
+
82
+ @@unique([memberId, videoId])
83
+ @@index([memberId])
84
+ }
85
+
86
+ model Session {
87
+ id String @id @default(dbgenerated("generate_prefixed_cuid('ses'::text)"))
88
+ expiresAt DateTime
89
+ token String
90
+ createdAt DateTime @default(now())
91
+ updatedAt DateTime @updatedAt
92
+ ipAddress String?
93
+ userAgent String?
94
+ userId String
95
+ activeOrganizationId String?
96
+ user User @relation(fields: [userId], references: [id], onDelete: Cascade)
97
+
98
+ @@unique([token])
99
+ }
100
+
101
+ model Account {
102
+ id String @id @default(dbgenerated("generate_prefixed_cuid('acc'::text)"))
103
+ accountId String
104
+ providerId String
105
+ userId String
106
+ user User @relation(fields: [userId], references: [id], onDelete: Cascade)
107
+ accessToken String?
108
+ refreshToken String?
109
+ idToken String?
110
+ accessTokenExpiresAt DateTime?
111
+ refreshTokenExpiresAt DateTime?
112
+ scope String?
113
+ password String?
114
+ createdAt DateTime
115
+ updatedAt DateTime
116
+ }
117
+
118
+ model Verification {
119
+ id String @id @default(dbgenerated("generate_prefixed_cuid('ver'::text)"))
120
+ identifier String
121
+ value String
122
+ expiresAt DateTime
123
+ createdAt DateTime @default(now())
124
+ updatedAt DateTime @updatedAt
125
+ }
126
+
127
+ model Member {
128
+ id String @id @default(dbgenerated("generate_prefixed_cuid('mem'::text)"))
129
+ organizationId String
130
+ organization Organization @relation(fields: [organizationId], references: [id], onDelete: Cascade)
131
+ userId String
132
+ user User @relation(fields: [userId], references: [id], onDelete: Cascade)
133
+ role String // Purposefully a string, since BetterAuth doesn't support enums this way
134
+ createdAt DateTime @default(now())
135
+
136
+ department Departments @default(none)
137
+ isActive Boolean @default(true)
138
+ employeeTrainingVideoCompletion EmployeeTrainingVideoCompletion[]
139
+ fleetDmLabelId Int?
140
+
141
+ assignedPolicies Policy[] @relation("PolicyAssignee") // Policies where this member is an assignee
142
+ approvedPolicies Policy[] @relation("PolicyApprover") // Policies where this member is an approver
143
+ risks Risk[]
144
+ tasks Task[]
145
+ vendors Vendor[]
146
+ comments Comment[]
147
+ auditLogs AuditLog[]
148
+ }
149
+
150
+ model Invitation {
151
+ id String @id @default(dbgenerated("generate_prefixed_cuid('inv'::text)"))
152
+ organizationId String
153
+ organization Organization @relation(fields: [organizationId], references: [id], onDelete: Cascade)
154
+ email String
155
+ role String // Purposefully a string, since BetterAuth doesn't support enums this way
156
+ status String
157
+ expiresAt DateTime
158
+ inviterId String
159
+ user User @relation(fields: [inviterId], references: [id], onDelete: Cascade)
160
+ }
161
+
162
+ // This is only for the app to consume, shouldn't be enforced by DB
163
+ // Otherwise it won't work with Better Auth, as per https://www.better-auth.com/docs/plugins/organization#access-control
164
+ enum Role {
165
+ owner
166
+ admin
167
+ auditor
168
+ employee
169
+ }
170
+
171
+ enum PolicyStatus {
172
+ draft
173
+ published
174
+ needs_review
175
+ }
176
+
177
+
178
+ // ===== comment.prisma =====
179
+ model Comment {
180
+ id String @id @default(dbgenerated("generate_prefixed_cuid('cmt'::text)"))
181
+ content String
182
+ entityId String
183
+ entityType CommentEntityType
184
+
185
+ // Dates
186
+ createdAt DateTime @default(now())
187
+
188
+ // Relationships
189
+ authorId String
190
+ author Member @relation(fields: [authorId], references: [id])
191
+ organizationId String
192
+ organization Organization @relation(fields: [organizationId], references: [id], onDelete: Cascade)
193
+
194
+ // Relation to Attachments
195
+ attachments Attachment[]
196
+
197
+ @@index([entityId])
198
+ }
199
+
200
+ enum CommentEntityType {
201
+ task
202
+ vendor
203
+ risk
204
+ policy
205
+ }
206
+
207
+
208
+ // ===== context.prisma =====
209
+ model Context {
210
+ id String @id @default(dbgenerated("generate_prefixed_cuid('ctx'::text)"))
211
+ organizationId String
212
+ organization Organization @relation(fields: [organizationId], references: [id], onDelete: Cascade)
213
+
214
+ question String
215
+ answer String
216
+
217
+ tags String[]
218
+
219
+ createdAt DateTime @default(now())
220
+ updatedAt DateTime @updatedAt
221
+
222
+ @@index([organizationId])
223
+ @@index([question])
224
+ @@index([answer])
225
+ @@index([tags])
226
+ }
227
+
228
+
229
+ // ===== control.prisma =====
230
+ model Control {
231
+ // Metadata
232
+ id String @id @default(dbgenerated("generate_prefixed_cuid('ctl'::text)"))
233
+ name String
234
+ description String
235
+
236
+ // Review dates
237
+ lastReviewDate DateTime?
238
+ nextReviewDate DateTime?
239
+
240
+ // Relationships
241
+ organization Organization @relation(fields: [organizationId], references: [id], onDelete: Cascade)
242
+ organizationId String
243
+ requirementsMapped RequirementMap[]
244
+ tasks Task[]
245
+ policies Policy[]
246
+ controlTemplateId String?
247
+ controlTemplate FrameworkEditorControlTemplate? @relation(fields: [controlTemplateId], references: [id])
248
+
249
+ @@index([organizationId])
250
+ }
251
+
252
+
253
+ // ===== framework-editor.prisma =====
254
+ // --- Data for Framework Editor ---
255
+ model FrameworkEditorVideo {
256
+ id String @id @default(dbgenerated("generate_prefixed_cuid('frk_vi'::text)"))
257
+ title String
258
+ description String
259
+ youtubeId String
260
+ url String
261
+
262
+ // Dates
263
+ createdAt DateTime @default(now())
264
+ updatedAt DateTime @default(now()) @updatedAt
265
+ }
266
+
267
+ model FrameworkEditorFramework {
268
+ id String @id @default(dbgenerated("generate_prefixed_cuid('frk'::text)"))
269
+ name String // e.g., "soc2", "iso27001"
270
+ version String
271
+ description String
272
+ visible Boolean @default(false)
273
+
274
+ requirements FrameworkEditorRequirement[]
275
+ frameworkInstances FrameworkInstance[]
276
+
277
+ // Dates
278
+ createdAt DateTime @default(now())
279
+ updatedAt DateTime @default(now()) @updatedAt
280
+ }
281
+
282
+ model FrameworkEditorRequirement {
283
+ id String @id @default(dbgenerated("generate_prefixed_cuid('frk_rq'::text)"))
284
+ frameworkId String
285
+ framework FrameworkEditorFramework @relation(fields: [frameworkId], references: [id])
286
+
287
+ name String // Original requirement ID within that framework, e.g., "Privacy"
288
+ identifier String @default("") // Unique identifier for the requirement, e.g., "cc1-1"
289
+ description String
290
+
291
+ controlTemplates FrameworkEditorControlTemplate[]
292
+ requirementMaps RequirementMap[]
293
+
294
+ // Dates
295
+ createdAt DateTime @default(now())
296
+ updatedAt DateTime @default(now()) @updatedAt
297
+ }
298
+
299
+ model FrameworkEditorPolicyTemplate {
300
+ id String @id @default(dbgenerated("generate_prefixed_cuid('frk_pt'::text)"))
301
+ name String
302
+ description String
303
+ frequency Frequency // Using the enum from shared.prisma
304
+ department Departments // Using the enum from shared.prisma
305
+ content Json
306
+
307
+ controlTemplates FrameworkEditorControlTemplate[]
308
+
309
+ // Dates
310
+ createdAt DateTime @default(now())
311
+ updatedAt DateTime @default(now()) @updatedAt
312
+
313
+ // Instances
314
+ policies Policy[]
315
+ }
316
+
317
+ model FrameworkEditorTaskTemplate {
318
+ id String @id @default(dbgenerated("generate_prefixed_cuid('frk_tt'::text)"))
319
+ name String
320
+ description String
321
+ frequency Frequency // Using the enum from shared.prisma
322
+ department Departments // Using the enum from shared.prisma
323
+
324
+ controlTemplates FrameworkEditorControlTemplate[]
325
+
326
+ // Dates
327
+ createdAt DateTime @default(now())
328
+ updatedAt DateTime @default(now()) @updatedAt
329
+
330
+ // Instances
331
+ tasks Task[]
332
+ }
333
+
334
+ model FrameworkEditorControlTemplate {
335
+ id String @id @default(dbgenerated("generate_prefixed_cuid('frk_ct'::text)"))
336
+ name String
337
+ description String
338
+
339
+ policyTemplates FrameworkEditorPolicyTemplate[]
340
+ requirements FrameworkEditorRequirement[]
341
+ taskTemplates FrameworkEditorTaskTemplate[]
342
+
343
+ // Dates
344
+ createdAt DateTime @default(now())
345
+ updatedAt DateTime @default(now()) @updatedAt
346
+
347
+ // Instances
348
+ controls Control[]
349
+ }
350
+
351
+
352
+ // ===== framework.prisma =====
353
+ model FrameworkInstance {
354
+ // Metadata
355
+ id String @id @default(dbgenerated("generate_prefixed_cuid('frm'::text)"))
356
+ organizationId String
357
+
358
+ frameworkId String
359
+ framework FrameworkEditorFramework @relation(fields: [frameworkId], references: [id], onDelete: Cascade)
360
+
361
+ // Relationships
362
+ organization Organization @relation(fields: [organizationId], references: [id], onDelete: Cascade)
363
+ requirementsMapped RequirementMap[]
364
+
365
+ @@unique([organizationId, frameworkId])
366
+ }
367
+
368
+
369
+ // ===== integration.prisma =====
370
+ model Integration {
371
+ id String @id @default(dbgenerated("generate_prefixed_cuid('int'::text)"))
372
+ name String
373
+ integrationId String
374
+ settings Json
375
+ userSettings Json
376
+ organizationId String
377
+ lastRunAt DateTime?
378
+ organization Organization @relation(fields: [organizationId], references: [id], onDelete: Cascade)
379
+ results IntegrationResult[]
380
+
381
+ @@index([organizationId])
382
+ }
383
+
384
+ model IntegrationResult {
385
+ id String @id @default(dbgenerated("generate_prefixed_cuid('itr'::text)"))
386
+ title String?
387
+ description String?
388
+ remediation String?
389
+ status String?
390
+ severity String?
391
+ resultDetails Json?
392
+ completedAt DateTime? @default(now())
393
+ integrationId String
394
+ organizationId String
395
+ assignedUserId String?
396
+
397
+ assignedUser User? @relation(fields: [assignedUserId], references: [id], onDelete: Cascade)
398
+ integration Integration @relation(fields: [integrationId], references: [id], onDelete: Cascade)
399
+
400
+ @@index([integrationId])
401
+ }
402
+
403
+
404
+ // ===== onboarding.prisma =====
405
+ model Onboarding {
406
+ organizationId String @id
407
+ organization Organization @relation(fields: [organizationId], references: [id], onDelete: Cascade)
408
+ policies Boolean @default(false)
409
+ employees Boolean @default(false)
410
+ vendors Boolean @default(false)
411
+ integrations Boolean @default(false)
412
+ risk Boolean @default(false)
413
+ team Boolean @default(false)
414
+ tasks Boolean @default(false)
415
+ callBooked Boolean @default(false)
416
+ companyBookingDetails Json?
417
+ companyDetails Json?
418
+ triggerJobId String?
419
+ triggerJobCompleted Boolean @default(false)
420
+
421
+ @@index([organizationId])
422
+ }
423
+
424
+
425
+ // ===== organization.prisma =====
426
+ model Organization {
427
+ id String @id @default(dbgenerated("generate_prefixed_cuid('org'::text)"))
428
+ name String
429
+ slug String @unique @default(dbgenerated("generate_prefixed_cuid('slug'::text)"))
430
+ logo String?
431
+ createdAt DateTime @default(now())
432
+ metadata String?
433
+ onboarding Onboarding?
434
+ website String?
435
+ onboardingCompleted Boolean @default(false)
436
+ hasAccess Boolean @default(false)
437
+
438
+ // FleetDM
439
+ fleetDmLabelId Int?
440
+ isFleetSetupCompleted Boolean @default(false)
441
+
442
+ apiKeys ApiKey[]
443
+ auditLog AuditLog[]
444
+ controls Control[]
445
+ frameworkInstances FrameworkInstance[]
446
+ integrations Integration[]
447
+ invitations Invitation[]
448
+ members Member[]
449
+ policy Policy[]
450
+ risk Risk[]
451
+ vendors Vendor[]
452
+ tasks Task[]
453
+ comments Comment[]
454
+ attachments Attachment[]
455
+ trust Trust[]
456
+ context Context[]
457
+
458
+ @@index([slug])
459
+ }
460
+
461
+
462
+ // ===== policy.prisma =====
463
+ model Policy {
464
+ id String @id @default(dbgenerated("generate_prefixed_cuid('pol'::text)"))
465
+ name String
466
+ description String?
467
+ status PolicyStatus @default(draft)
468
+ content Json[]
469
+ frequency Frequency?
470
+ department Departments?
471
+ isRequiredToSign Boolean @default(false)
472
+ signedBy String[] @default([])
473
+ reviewDate DateTime?
474
+ isArchived Boolean @default(false)
475
+
476
+ // Dates
477
+ createdAt DateTime @default(now())
478
+ updatedAt DateTime @updatedAt
479
+ lastArchivedAt DateTime?
480
+ lastPublishedAt DateTime?
481
+
482
+ // Relationships
483
+ organizationId String
484
+ organization Organization @relation(fields: [organizationId], references: [id], onDelete: Cascade)
485
+ assigneeId String?
486
+ assignee Member? @relation("PolicyAssignee", fields: [assigneeId], references: [id], onDelete: SetNull, onUpdate: Cascade)
487
+ approverId String?
488
+ approver Member? @relation("PolicyApprover", fields: [approverId], references: [id], onDelete: SetNull, onUpdate: Cascade)
489
+ policyTemplateId String?
490
+ policyTemplate FrameworkEditorPolicyTemplate? @relation(fields: [policyTemplateId], references: [id])
491
+ controls Control[]
492
+
493
+ @@index([organizationId])
494
+ }
495
+
496
+
497
+ // ===== requirement.prisma =====
498
+ model RequirementMap {
499
+ id String @id @default(dbgenerated("generate_prefixed_cuid('req'::text)"))
500
+
501
+ requirementId String
502
+ requirement FrameworkEditorRequirement @relation(fields: [requirementId], references: [id], onDelete: Cascade)
503
+
504
+ controlId String
505
+ control Control @relation(fields: [controlId], references: [id], onDelete: Cascade)
506
+
507
+ frameworkInstanceId String
508
+ frameworkInstance FrameworkInstance @relation(fields: [frameworkInstanceId], references: [id], onDelete: Cascade)
509
+
510
+ @@unique([controlId, frameworkInstanceId, requirementId])
511
+ @@index([requirementId, frameworkInstanceId])
512
+ }
513
+
514
+
515
+ // ===== risk.prisma =====
516
+ model Risk {
517
+ // Metadata
518
+ id String @id @default(dbgenerated("generate_prefixed_cuid('rsk'::text)"))
519
+ title String
520
+ description String
521
+ category RiskCategory
522
+ department Departments?
523
+ status RiskStatus @default(open)
524
+ likelihood Likelihood @default(very_unlikely)
525
+ impact Impact @default(insignificant)
526
+ residualLikelihood Likelihood @default(very_unlikely)
527
+ residualImpact Impact @default(insignificant)
528
+ treatmentStrategyDescription String?
529
+ treatmentStrategy RiskTreatmentType @default(accept)
530
+
531
+ // Dates
532
+ createdAt DateTime @default(now())
533
+ updatedAt DateTime @updatedAt
534
+
535
+ // Relationships
536
+ organizationId String
537
+ organization Organization @relation(fields: [organizationId], references: [id], onDelete: Cascade)
538
+ assigneeId String?
539
+ assignee Member? @relation(fields: [assigneeId], references: [id])
540
+ tasks Task[]
541
+
542
+ @@index([organizationId])
543
+ @@index([category])
544
+ @@index([status])
545
+ }
546
+
547
+ enum RiskTreatmentType {
548
+ accept
549
+ avoid
550
+ mitigate
551
+ transfer
552
+ }
553
+
554
+ enum RiskCategory {
555
+ customer
556
+ governance
557
+ operations
558
+ other
559
+ people
560
+ regulatory
561
+ reporting
562
+ resilience
563
+ technology
564
+ vendor_management
565
+ }
566
+
567
+ enum RiskStatus {
568
+ open
569
+ pending
570
+ closed
571
+ archived
572
+ }
573
+
574
+
575
+ // ===== shared.prisma =====
576
+ model ApiKey {
577
+ id String @id @default(dbgenerated("generate_prefixed_cuid('apk'::text)"))
578
+ name String
579
+ key String @unique
580
+ salt String?
581
+ createdAt DateTime @default(now())
582
+ expiresAt DateTime?
583
+ lastUsedAt DateTime?
584
+ isActive Boolean @default(true)
585
+
586
+ organization Organization @relation(fields: [organizationId], references: [id], onDelete: Cascade)
587
+ organizationId String
588
+
589
+ @@index([organizationId])
590
+ @@index([key])
591
+ }
592
+
593
+ model AuditLog {
594
+ id String @id @default(dbgenerated("generate_prefixed_cuid('aud'::text)"))
595
+ timestamp DateTime @default(now())
596
+ organizationId String
597
+ userId String
598
+ memberId String?
599
+ data Json
600
+ description String?
601
+ entityId String?
602
+ entityType AuditLogEntityType?
603
+
604
+ organization Organization @relation(fields: [organizationId], references: [id], onDelete: Cascade)
605
+ user User @relation(fields: [userId], references: [id], onDelete: Cascade)
606
+ member Member? @relation(fields: [memberId], references: [id], onDelete: Cascade)
607
+
608
+ @@index([userId])
609
+ @@index([organizationId])
610
+ @@index([memberId])
611
+ @@index([entityType])
612
+ }
613
+
614
+ enum AuditLogEntityType {
615
+ organization
616
+ framework
617
+ requirement
618
+ control
619
+ policy
620
+ task
621
+ people
622
+ risk
623
+ vendor
624
+ tests
625
+ integration
626
+ }
627
+
628
+ model GlobalVendors {
629
+ website String @id @unique
630
+ company_name String?
631
+ legal_name String?
632
+ company_description String?
633
+ company_hq_address String?
634
+ privacy_policy_url String?
635
+ terms_of_service_url String?
636
+ service_level_agreement_url String?
637
+ security_page_url String?
638
+ trust_page_url String?
639
+ security_certifications String[]
640
+ subprocessors String[]
641
+ type_of_company String?
642
+
643
+ approved Boolean @default(false)
644
+ createdAt DateTime @default(now())
645
+
646
+ @@index([website])
647
+ }
648
+
649
+ enum Departments {
650
+ none
651
+ admin
652
+ gov
653
+ hr
654
+ it
655
+ itsm
656
+ qms
657
+ }
658
+
659
+ enum Frequency {
660
+ monthly
661
+ quarterly
662
+ yearly
663
+ }
664
+
665
+ enum Likelihood {
666
+ very_unlikely
667
+ unlikely
668
+ possible
669
+ likely
670
+ very_likely
671
+ }
672
+
673
+ enum Impact {
674
+ insignificant
675
+ minor
676
+ moderate
677
+ major
678
+ severe
679
+ }
680
+
681
+
682
+ // ===== task.prisma =====
683
+ model Task {
684
+ // Metadata
685
+ id String @id @default(dbgenerated("generate_prefixed_cuid('tsk'::text)"))
686
+ title String
687
+ description String
688
+ status TaskStatus @default(todo)
689
+ frequency TaskFrequency?
690
+ department Departments? @default(none)
691
+ order Int @default(0)
692
+
693
+ // Dates
694
+ createdAt DateTime @default(now())
695
+ updatedAt DateTime @updatedAt
696
+ lastCompletedAt DateTime?
697
+
698
+ // Relationships
699
+ controls Control[]
700
+ vendors Vendor[]
701
+ risks Risk[]
702
+ assigneeId String?
703
+ assignee Member? @relation(fields: [assigneeId], references: [id])
704
+ organizationId String
705
+ organization Organization @relation(fields: [organizationId], references: [id], onDelete: Cascade)
706
+ taskTemplateId String?
707
+ taskTemplate FrameworkEditorTaskTemplate? @relation(fields: [taskTemplateId], references: [id])
708
+ }
709
+
710
+ enum TaskStatus {
711
+ todo
712
+ in_progress
713
+ done
714
+ not_relevant
715
+ }
716
+
717
+ enum TaskFrequency {
718
+ daily
719
+ weekly
720
+ monthly
721
+ quarterly
722
+ yearly
723
+ }
724
+
725
+
726
+ // ===== trust.prisma =====
727
+ model Trust {
728
+ organizationId String
729
+ organization Organization @relation(fields: [organizationId], references: [id], onDelete: Cascade)
730
+ friendlyUrl String? @unique
731
+ domain String?
732
+ domainVerified Boolean @default(false)
733
+ isVercelDomain Boolean @default(false)
734
+ vercelVerification String?
735
+ status TrustStatus @default(draft)
736
+ contactEmail String?
737
+
738
+ email String?
739
+ privacyPolicy String?
740
+ soc2 Boolean @default(false)
741
+ iso27001 Boolean @default(false)
742
+ gdpr Boolean @default(false)
743
+
744
+ soc2_status FrameworkStatus @default(started)
745
+ iso27001_status FrameworkStatus @default(started)
746
+ gdpr_status FrameworkStatus @default(started)
747
+
748
+ @@id([status, organizationId])
749
+ @@unique([organizationId])
750
+ @@index([organizationId])
751
+ @@index([friendlyUrl])
752
+ }
753
+
754
+ enum TrustStatus {
755
+ draft
756
+ published
757
+ }
758
+
759
+ enum FrameworkStatus {
760
+ started
761
+ in_progress
762
+ compliant
763
+ }
764
+
765
+
766
+ // ===== vendor.prisma =====
767
+ model Vendor {
768
+ id String @id @default(dbgenerated("generate_prefixed_cuid('vnd'::text)"))
769
+ name String
770
+ description String
771
+ category VendorCategory @default(other)
772
+ status VendorStatus @default(not_assessed)
773
+ inherentProbability Likelihood @default(very_unlikely)
774
+ inherentImpact Impact @default(insignificant)
775
+ residualProbability Likelihood @default(very_unlikely)
776
+ residualImpact Impact @default(insignificant)
777
+ website String?
778
+
779
+ createdAt DateTime @default(now())
780
+ updatedAt DateTime @updatedAt
781
+
782
+ organizationId String
783
+ organization Organization @relation(fields: [organizationId], references: [id], onDelete: Cascade)
784
+ assigneeId String?
785
+ assignee Member? @relation(fields: [assigneeId], references: [id], onDelete: Cascade)
786
+ contacts VendorContact[]
787
+ tasks Task[]
788
+
789
+ @@index([organizationId])
790
+ @@index([assigneeId])
791
+ @@index([category])
792
+ }
793
+
794
+ model VendorContact {
795
+ id String @id @default(dbgenerated("generate_prefixed_cuid('vct'::text)"))
796
+ vendorId String
797
+ name String
798
+ email String
799
+ phone String
800
+ createdAt DateTime @default(now())
801
+ updatedAt DateTime @updatedAt
802
+ Vendor Vendor @relation(fields: [vendorId], references: [id], onDelete: Cascade)
803
+
804
+ @@index([vendorId])
805
+ }
806
+
807
+ enum VendorCategory {
808
+ cloud
809
+ infrastructure
810
+ software_as_a_service
811
+ finance
812
+ marketing
813
+ sales
814
+ hr
815
+ other
816
+ }
817
+
818
+ enum VendorStatus {
819
+ not_assessed
820
+ in_progress
821
+ assessed
822
+ }