@trycompai/db 1.2.5 → 1.2.7
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.
- package/dist/generated/prisma/edge.js +3 -3
- package/dist/generated/prisma/index.js +7 -3
- package/dist/generated/prisma/libquery_engine-rhel-openssl-3.0.x.so.node +0 -0
- package/dist/generated/prisma/package.json +1 -1
- package/dist/generated/prisma/schema.prisma +1 -1
- package/dist/schema.prisma +1 -1
- package/package.json +4 -4
|
@@ -721,7 +721,7 @@ const config = {
|
|
|
721
721
|
},
|
|
722
722
|
{
|
|
723
723
|
"fromEnvVar": null,
|
|
724
|
-
"value": "
|
|
724
|
+
"value": "rhel-openssl-3.0.x"
|
|
725
725
|
},
|
|
726
726
|
{
|
|
727
727
|
"fromEnvVar": null,
|
|
@@ -758,8 +758,8 @@ const config = {
|
|
|
758
758
|
}
|
|
759
759
|
}
|
|
760
760
|
},
|
|
761
|
-
"inlineSchema": "model Attachment {\n id String @id @default(dbgenerated(\"generate_prefixed_cuid('att'::text)\"))\n name String\n url String\n type AttachmentType\n entityId String\n entityType AttachmentEntityType\n\n // Dates\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n\n // Relationships\n organizationId String\n organization Organization @relation(fields: [organizationId], references: [id], onDelete: Cascade)\n comment Comment? @relation(fields: [commentId], references: [id])\n commentId String?\n\n @@index([entityId, entityType])\n}\n\nenum AttachmentEntityType {\n task\n vendor\n risk\n comment\n}\n\nenum AttachmentType {\n image\n video\n audio\n document\n other\n}\n\nmodel User {\n id String @id @default(dbgenerated(\"generate_prefixed_cuid('usr'::text)\"))\n name String\n email String\n emailVerified Boolean\n image String?\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n lastLogin DateTime?\n\n accounts Account[]\n auditLog AuditLog[]\n integrationResults IntegrationResult[]\n invitations Invitation[]\n members Member[]\n sessions Session[]\n\n @@unique([email])\n}\n\nmodel EmployeeTrainingVideoCompletion {\n id String @id @default(dbgenerated(\"generate_prefixed_cuid('evc'::text)\"))\n completedAt DateTime?\n videoId String\n\n memberId String\n member Member @relation(fields: [memberId], references: [id], onDelete: Cascade)\n\n @@unique([memberId, videoId])\n @@index([memberId])\n}\n\nmodel Session {\n id String @id @default(dbgenerated(\"generate_prefixed_cuid('ses'::text)\"))\n expiresAt DateTime\n token String\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n ipAddress String?\n userAgent String?\n userId String\n activeOrganizationId String?\n user User @relation(fields: [userId], references: [id], onDelete: Cascade)\n\n @@unique([token])\n}\n\nmodel Account {\n id String @id @default(dbgenerated(\"generate_prefixed_cuid('acc'::text)\"))\n accountId String\n providerId String\n userId String\n user User @relation(fields: [userId], references: [id], onDelete: Cascade)\n accessToken String?\n refreshToken String?\n idToken String?\n accessTokenExpiresAt DateTime?\n refreshTokenExpiresAt DateTime?\n scope String?\n password String?\n createdAt DateTime\n updatedAt DateTime\n}\n\nmodel Verification {\n id String @id @default(dbgenerated(\"generate_prefixed_cuid('ver'::text)\"))\n identifier String\n value String\n expiresAt DateTime\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n}\n\nmodel Member {\n id String @id @default(dbgenerated(\"generate_prefixed_cuid('mem'::text)\"))\n organizationId String\n organization Organization @relation(fields: [organizationId], references: [id], onDelete: Cascade)\n userId String\n user User @relation(fields: [userId], references: [id], onDelete: Cascade)\n role String // Purposefully a string, since BetterAuth doesn't support enums this way\n createdAt DateTime @default(now())\n\n department Departments @default(none)\n isActive Boolean @default(true)\n employeeTrainingVideoCompletion EmployeeTrainingVideoCompletion[]\n fleetDmLabelId Int?\n\n assignedPolicies Policy[] @relation(\"PolicyAssignee\") // Policies where this member is an assignee\n approvedPolicies Policy[] @relation(\"PolicyApprover\") // Policies where this member is an approver\n risks Risk[]\n tasks Task[]\n vendors Vendor[]\n comments Comment[]\n auditLogs AuditLog[]\n}\n\nmodel Invitation {\n id String @id @default(dbgenerated(\"generate_prefixed_cuid('inv'::text)\"))\n organizationId String\n organization Organization @relation(fields: [organizationId], references: [id], onDelete: Cascade)\n email String\n role String // Purposefully a string, since BetterAuth doesn't support enums this way\n status String\n expiresAt DateTime\n inviterId String\n user User @relation(fields: [inviterId], references: [id], onDelete: Cascade)\n}\n\n// This is only for the app to consume, shouldn't be enforced by DB\n// Otherwise it won't work with Better Auth, as per https://www.better-auth.com/docs/plugins/organization#access-control\nenum Role {\n owner\n admin\n auditor\n employee\n}\n\nenum PolicyStatus {\n draft\n published\n needs_review\n}\n\nmodel Comment {\n id String @id @default(dbgenerated(\"generate_prefixed_cuid('cmt'::text)\"))\n content String\n entityId String\n entityType CommentEntityType\n\n // Dates\n createdAt DateTime @default(now())\n\n // Relationships\n authorId String\n author Member @relation(fields: [authorId], references: [id])\n organizationId String\n organization Organization @relation(fields: [organizationId], references: [id], onDelete: Cascade)\n\n // Relation to Attachments\n attachments Attachment[]\n\n @@index([entityId])\n}\n\nenum CommentEntityType {\n task\n vendor\n risk\n policy\n}\n\nmodel Context {\n id String @id @default(dbgenerated(\"generate_prefixed_cuid('ctx'::text)\"))\n organizationId String\n organization Organization @relation(fields: [organizationId], references: [id], onDelete: Cascade)\n\n question String\n answer String\n\n tags String[]\n\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n\n @@index([organizationId])\n @@index([question])\n @@index([answer])\n @@index([tags])\n}\n\nmodel Control {\n // Metadata\n id String @id @default(dbgenerated(\"generate_prefixed_cuid('ctl'::text)\"))\n name String\n description String\n\n // Review dates\n lastReviewDate DateTime?\n nextReviewDate DateTime?\n\n // Relationships\n organization Organization @relation(fields: [organizationId], references: [id], onDelete: Cascade)\n organizationId String\n requirementsMapped RequirementMap[]\n tasks Task[]\n policies Policy[]\n controlTemplateId String?\n controlTemplate FrameworkEditorControlTemplate? @relation(fields: [controlTemplateId], references: [id])\n\n @@index([organizationId])\n}\n\n// --- Data for Framework Editor ---\nmodel FrameworkEditorVideo {\n id String @id @default(dbgenerated(\"generate_prefixed_cuid('frk_vi'::text)\"))\n title String\n description String\n youtubeId String\n url String\n\n // Dates\n createdAt DateTime @default(now())\n updatedAt DateTime @default(now()) @updatedAt\n}\n\nmodel FrameworkEditorFramework {\n id String @id @default(dbgenerated(\"generate_prefixed_cuid('frk'::text)\"))\n name String // e.g., \"soc2\", \"iso27001\"\n version String\n description String\n visible Boolean @default(false)\n\n requirements FrameworkEditorRequirement[]\n frameworkInstances FrameworkInstance[]\n\n // Dates\n createdAt DateTime @default(now())\n updatedAt DateTime @default(now()) @updatedAt\n}\n\nmodel FrameworkEditorRequirement {\n id String @id @default(dbgenerated(\"generate_prefixed_cuid('frk_rq'::text)\"))\n frameworkId String\n framework FrameworkEditorFramework @relation(fields: [frameworkId], references: [id])\n\n name String // Original requirement ID within that framework, e.g., \"Privacy\"\n identifier String @default(\"\") // Unique identifier for the requirement, e.g., \"cc1-1\"\n description String\n\n controlTemplates FrameworkEditorControlTemplate[]\n requirementMaps RequirementMap[]\n\n // Dates\n createdAt DateTime @default(now())\n updatedAt DateTime @default(now()) @updatedAt\n}\n\nmodel FrameworkEditorPolicyTemplate {\n id String @id @default(dbgenerated(\"generate_prefixed_cuid('frk_pt'::text)\"))\n name String\n description String\n frequency Frequency // Using the enum from shared.prisma\n department Departments // Using the enum from shared.prisma\n content Json\n\n controlTemplates FrameworkEditorControlTemplate[]\n\n // Dates\n createdAt DateTime @default(now())\n updatedAt DateTime @default(now()) @updatedAt\n\n // Instances\n policies Policy[]\n}\n\nmodel FrameworkEditorTaskTemplate {\n id String @id @default(dbgenerated(\"generate_prefixed_cuid('frk_tt'::text)\"))\n name String\n description String\n frequency Frequency // Using the enum from shared.prisma\n department Departments // Using the enum from shared.prisma\n\n controlTemplates FrameworkEditorControlTemplate[]\n\n // Dates\n createdAt DateTime @default(now())\n updatedAt DateTime @default(now()) @updatedAt\n\n // Instances\n tasks Task[]\n}\n\nmodel FrameworkEditorControlTemplate {\n id String @id @default(dbgenerated(\"generate_prefixed_cuid('frk_ct'::text)\"))\n name String\n description String\n\n policyTemplates FrameworkEditorPolicyTemplate[]\n requirements FrameworkEditorRequirement[]\n taskTemplates FrameworkEditorTaskTemplate[]\n\n // Dates\n createdAt DateTime @default(now())\n updatedAt DateTime @default(now()) @updatedAt\n\n // Instances\n controls Control[]\n}\n\nmodel FrameworkInstance {\n // Metadata\n id String @id @default(dbgenerated(\"generate_prefixed_cuid('frm'::text)\"))\n organizationId String\n\n frameworkId String\n framework FrameworkEditorFramework @relation(fields: [frameworkId], references: [id], onDelete: Cascade)\n\n // Relationships\n organization Organization @relation(fields: [organizationId], references: [id], onDelete: Cascade)\n requirementsMapped RequirementMap[]\n\n @@unique([organizationId, frameworkId])\n}\n\nmodel Integration {\n id String @id @default(dbgenerated(\"generate_prefixed_cuid('int'::text)\"))\n name String\n integrationId String\n settings Json\n userSettings Json\n organizationId String\n lastRunAt DateTime?\n organization Organization @relation(fields: [organizationId], references: [id], onDelete: Cascade)\n results IntegrationResult[]\n\n @@index([organizationId])\n}\n\nmodel IntegrationResult {\n id String @id @default(dbgenerated(\"generate_prefixed_cuid('itr'::text)\"))\n title String?\n description String?\n remediation String?\n status String?\n severity String?\n resultDetails Json?\n completedAt DateTime? @default(now())\n integrationId String\n organizationId String\n assignedUserId String?\n\n assignedUser User? @relation(fields: [assignedUserId], references: [id], onDelete: Cascade)\n integration Integration @relation(fields: [integrationId], references: [id], onDelete: Cascade)\n\n @@index([integrationId])\n}\n\nmodel Onboarding {\n organizationId String @id\n organization Organization @relation(fields: [organizationId], references: [id], onDelete: Cascade)\n policies Boolean @default(false)\n employees Boolean @default(false)\n vendors Boolean @default(false)\n integrations Boolean @default(false)\n risk Boolean @default(false)\n team Boolean @default(false)\n tasks Boolean @default(false)\n callBooked Boolean @default(false)\n companyBookingDetails Json?\n companyDetails Json?\n triggerJobId String?\n triggerJobCompleted Boolean @default(false)\n\n @@index([organizationId])\n}\n\nmodel Organization {\n id String @id @default(dbgenerated(\"generate_prefixed_cuid('org'::text)\"))\n name String\n slug String @unique @default(dbgenerated(\"generate_prefixed_cuid('slug'::text)\"))\n logo String?\n createdAt DateTime @default(now())\n metadata String?\n onboarding Onboarding?\n website String?\n onboardingCompleted Boolean @default(false)\n hasAccess Boolean @default(false)\n\n // FleetDM\n fleetDmLabelId Int?\n isFleetSetupCompleted Boolean @default(false)\n\n apiKeys ApiKey[]\n auditLog AuditLog[]\n controls Control[]\n frameworkInstances FrameworkInstance[]\n integrations Integration[]\n invitations Invitation[]\n members Member[]\n policy Policy[]\n risk Risk[]\n vendors Vendor[]\n tasks Task[]\n comments Comment[]\n attachments Attachment[]\n trust Trust[]\n context Context[]\n\n @@index([slug])\n}\n\nmodel Policy {\n id String @id @default(dbgenerated(\"generate_prefixed_cuid('pol'::text)\"))\n name String\n description String?\n status PolicyStatus @default(draft)\n content Json[]\n frequency Frequency?\n department Departments?\n isRequiredToSign Boolean @default(false)\n signedBy String[] @default([])\n reviewDate DateTime?\n isArchived Boolean @default(false)\n\n // Dates\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n lastArchivedAt DateTime?\n lastPublishedAt DateTime?\n\n // Relationships\n organizationId String\n organization Organization @relation(fields: [organizationId], references: [id], onDelete: Cascade)\n assigneeId String?\n assignee Member? @relation(\"PolicyAssignee\", fields: [assigneeId], references: [id], onDelete: SetNull, onUpdate: Cascade)\n approverId String?\n approver Member? @relation(\"PolicyApprover\", fields: [approverId], references: [id], onDelete: SetNull, onUpdate: Cascade)\n policyTemplateId String?\n policyTemplate FrameworkEditorPolicyTemplate? @relation(fields: [policyTemplateId], references: [id])\n controls Control[]\n\n @@index([organizationId])\n}\n\nmodel RequirementMap {\n id String @id @default(dbgenerated(\"generate_prefixed_cuid('req'::text)\"))\n\n requirementId String\n requirement FrameworkEditorRequirement @relation(fields: [requirementId], references: [id], onDelete: Cascade)\n\n controlId String\n control Control @relation(fields: [controlId], references: [id], onDelete: Cascade)\n\n frameworkInstanceId String\n frameworkInstance FrameworkInstance @relation(fields: [frameworkInstanceId], references: [id], onDelete: Cascade)\n\n @@unique([controlId, frameworkInstanceId, requirementId])\n @@index([requirementId, frameworkInstanceId])\n}\n\nmodel Risk {\n // Metadata\n id String @id @default(dbgenerated(\"generate_prefixed_cuid('rsk'::text)\"))\n title String\n description String\n category RiskCategory\n department Departments?\n status RiskStatus @default(open)\n likelihood Likelihood @default(very_unlikely)\n impact Impact @default(insignificant)\n residualLikelihood Likelihood @default(very_unlikely)\n residualImpact Impact @default(insignificant)\n treatmentStrategyDescription String?\n treatmentStrategy RiskTreatmentType @default(accept)\n\n // Dates\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n\n // Relationships\n organizationId String\n organization Organization @relation(fields: [organizationId], references: [id], onDelete: Cascade)\n assigneeId String?\n assignee Member? @relation(fields: [assigneeId], references: [id])\n tasks Task[]\n\n @@index([organizationId])\n @@index([category])\n @@index([status])\n}\n\nenum RiskTreatmentType {\n accept\n avoid\n mitigate\n transfer\n}\n\nenum RiskCategory {\n customer\n governance\n operations\n other\n people\n regulatory\n reporting\n resilience\n technology\n vendor_management\n}\n\nenum RiskStatus {\n open\n pending\n closed\n archived\n}\n\nmodel ApiKey {\n id String @id @default(dbgenerated(\"generate_prefixed_cuid('apk'::text)\"))\n name String\n key String @unique\n salt String?\n createdAt DateTime @default(now())\n expiresAt DateTime?\n lastUsedAt DateTime?\n isActive Boolean @default(true)\n\n organization Organization @relation(fields: [organizationId], references: [id], onDelete: Cascade)\n organizationId String\n\n @@index([organizationId])\n @@index([key])\n}\n\nmodel AuditLog {\n id String @id @default(dbgenerated(\"generate_prefixed_cuid('aud'::text)\"))\n timestamp DateTime @default(now())\n organizationId String\n userId String\n memberId String?\n data Json\n description String?\n entityId String?\n entityType AuditLogEntityType?\n\n organization Organization @relation(fields: [organizationId], references: [id], onDelete: Cascade)\n user User @relation(fields: [userId], references: [id], onDelete: Cascade)\n member Member? @relation(fields: [memberId], references: [id], onDelete: Cascade)\n\n @@index([userId])\n @@index([organizationId])\n @@index([memberId])\n @@index([entityType])\n}\n\nenum AuditLogEntityType {\n organization\n framework\n requirement\n control\n policy\n task\n people\n risk\n vendor\n tests\n integration\n}\n\nmodel GlobalVendors {\n website String @id @unique\n company_name String?\n legal_name String?\n company_description String?\n company_hq_address String?\n privacy_policy_url String?\n terms_of_service_url String?\n service_level_agreement_url String?\n security_page_url String?\n trust_page_url String?\n security_certifications String[]\n subprocessors String[]\n type_of_company String?\n\n approved Boolean @default(false)\n createdAt DateTime @default(now())\n\n @@index([website])\n}\n\nenum Departments {\n none\n admin\n gov\n hr\n it\n itsm\n qms\n}\n\nenum Frequency {\n monthly\n quarterly\n yearly\n}\n\nenum Likelihood {\n very_unlikely\n unlikely\n possible\n likely\n very_likely\n}\n\nenum Impact {\n insignificant\n minor\n moderate\n major\n severe\n}\n\nmodel Task {\n // Metadata\n id String @id @default(dbgenerated(\"generate_prefixed_cuid('tsk'::text)\"))\n title String\n description String\n status TaskStatus @default(todo)\n frequency TaskFrequency?\n department Departments? @default(none)\n order Int @default(0)\n\n // Dates\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n lastCompletedAt DateTime?\n\n // Relationships\n controls Control[]\n vendors Vendor[]\n risks Risk[]\n assigneeId String?\n assignee Member? @relation(fields: [assigneeId], references: [id])\n organizationId String\n organization Organization @relation(fields: [organizationId], references: [id], onDelete: Cascade)\n taskTemplateId String?\n taskTemplate FrameworkEditorTaskTemplate? @relation(fields: [taskTemplateId], references: [id])\n}\n\nenum TaskStatus {\n todo\n in_progress\n done\n not_relevant\n}\n\nenum TaskFrequency {\n daily\n weekly\n monthly\n quarterly\n yearly\n}\n\nmodel Trust {\n organizationId String\n organization Organization @relation(fields: [organizationId], references: [id], onDelete: Cascade)\n friendlyUrl String? @unique\n domain String?\n domainVerified Boolean @default(false)\n isVercelDomain Boolean @default(false)\n vercelVerification String?\n status TrustStatus @default(draft)\n contactEmail String?\n\n email String?\n privacyPolicy String?\n soc2 Boolean @default(false)\n iso27001 Boolean @default(false)\n gdpr Boolean @default(false)\n\n soc2_status FrameworkStatus @default(started)\n iso27001_status FrameworkStatus @default(started)\n gdpr_status FrameworkStatus @default(started)\n\n @@id([status, organizationId])\n @@unique([organizationId])\n @@index([organizationId])\n @@index([friendlyUrl])\n}\n\nenum TrustStatus {\n draft\n published\n}\n\nenum FrameworkStatus {\n started\n in_progress\n compliant\n}\n\nmodel Vendor {\n id String @id @default(dbgenerated(\"generate_prefixed_cuid('vnd'::text)\"))\n name String\n description String\n category VendorCategory @default(other)\n status VendorStatus @default(not_assessed)\n inherentProbability Likelihood @default(very_unlikely)\n inherentImpact Impact @default(insignificant)\n residualProbability Likelihood @default(very_unlikely)\n residualImpact Impact @default(insignificant)\n website String?\n\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n\n organizationId String\n organization Organization @relation(fields: [organizationId], references: [id], onDelete: Cascade)\n assigneeId String?\n assignee Member? @relation(fields: [assigneeId], references: [id], onDelete: Cascade)\n contacts VendorContact[]\n tasks Task[]\n\n @@index([organizationId])\n @@index([assigneeId])\n @@index([category])\n}\n\nmodel VendorContact {\n id String @id @default(dbgenerated(\"generate_prefixed_cuid('vct'::text)\"))\n vendorId String\n name String\n email String\n phone String\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n Vendor Vendor @relation(fields: [vendorId], references: [id], onDelete: Cascade)\n\n @@index([vendorId])\n}\n\nenum VendorCategory {\n cloud\n infrastructure\n software_as_a_service\n finance\n marketing\n sales\n hr\n other\n}\n\nenum VendorStatus {\n not_assessed\n in_progress\n assessed\n}\n\ngenerator client {\n provider = \"prisma-client-js\"\n previewFeatures = [\"postgresqlExtensions\"]\n binaryTargets = [\"native\", \"darwin-arm64\", \"debian-openssl-3.0.x\", \"linux-musl-openssl-3.0.x\"]\n output = \"./generated/prisma\"\n}\n\ndatasource db {\n provider = \"postgresql\"\n url = env(\"DATABASE_URL\")\n directUrl = env(\"DATABASE_URL\")\n extensions = [pgcrypto]\n}\n",
|
|
762
|
-
"inlineSchemaHash": "
|
|
761
|
+
"inlineSchema": "model Attachment {\n id String @id @default(dbgenerated(\"generate_prefixed_cuid('att'::text)\"))\n name String\n url String\n type AttachmentType\n entityId String\n entityType AttachmentEntityType\n\n // Dates\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n\n // Relationships\n organizationId String\n organization Organization @relation(fields: [organizationId], references: [id], onDelete: Cascade)\n comment Comment? @relation(fields: [commentId], references: [id])\n commentId String?\n\n @@index([entityId, entityType])\n}\n\nenum AttachmentEntityType {\n task\n vendor\n risk\n comment\n}\n\nenum AttachmentType {\n image\n video\n audio\n document\n other\n}\n\nmodel User {\n id String @id @default(dbgenerated(\"generate_prefixed_cuid('usr'::text)\"))\n name String\n email String\n emailVerified Boolean\n image String?\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n lastLogin DateTime?\n\n accounts Account[]\n auditLog AuditLog[]\n integrationResults IntegrationResult[]\n invitations Invitation[]\n members Member[]\n sessions Session[]\n\n @@unique([email])\n}\n\nmodel EmployeeTrainingVideoCompletion {\n id String @id @default(dbgenerated(\"generate_prefixed_cuid('evc'::text)\"))\n completedAt DateTime?\n videoId String\n\n memberId String\n member Member @relation(fields: [memberId], references: [id], onDelete: Cascade)\n\n @@unique([memberId, videoId])\n @@index([memberId])\n}\n\nmodel Session {\n id String @id @default(dbgenerated(\"generate_prefixed_cuid('ses'::text)\"))\n expiresAt DateTime\n token String\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n ipAddress String?\n userAgent String?\n userId String\n activeOrganizationId String?\n user User @relation(fields: [userId], references: [id], onDelete: Cascade)\n\n @@unique([token])\n}\n\nmodel Account {\n id String @id @default(dbgenerated(\"generate_prefixed_cuid('acc'::text)\"))\n accountId String\n providerId String\n userId String\n user User @relation(fields: [userId], references: [id], onDelete: Cascade)\n accessToken String?\n refreshToken String?\n idToken String?\n accessTokenExpiresAt DateTime?\n refreshTokenExpiresAt DateTime?\n scope String?\n password String?\n createdAt DateTime\n updatedAt DateTime\n}\n\nmodel Verification {\n id String @id @default(dbgenerated(\"generate_prefixed_cuid('ver'::text)\"))\n identifier String\n value String\n expiresAt DateTime\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n}\n\nmodel Member {\n id String @id @default(dbgenerated(\"generate_prefixed_cuid('mem'::text)\"))\n organizationId String\n organization Organization @relation(fields: [organizationId], references: [id], onDelete: Cascade)\n userId String\n user User @relation(fields: [userId], references: [id], onDelete: Cascade)\n role String // Purposefully a string, since BetterAuth doesn't support enums this way\n createdAt DateTime @default(now())\n\n department Departments @default(none)\n isActive Boolean @default(true)\n employeeTrainingVideoCompletion EmployeeTrainingVideoCompletion[]\n fleetDmLabelId Int?\n\n assignedPolicies Policy[] @relation(\"PolicyAssignee\") // Policies where this member is an assignee\n approvedPolicies Policy[] @relation(\"PolicyApprover\") // Policies where this member is an approver\n risks Risk[]\n tasks Task[]\n vendors Vendor[]\n comments Comment[]\n auditLogs AuditLog[]\n}\n\nmodel Invitation {\n id String @id @default(dbgenerated(\"generate_prefixed_cuid('inv'::text)\"))\n organizationId String\n organization Organization @relation(fields: [organizationId], references: [id], onDelete: Cascade)\n email String\n role String // Purposefully a string, since BetterAuth doesn't support enums this way\n status String\n expiresAt DateTime\n inviterId String\n user User @relation(fields: [inviterId], references: [id], onDelete: Cascade)\n}\n\n// This is only for the app to consume, shouldn't be enforced by DB\n// Otherwise it won't work with Better Auth, as per https://www.better-auth.com/docs/plugins/organization#access-control\nenum Role {\n owner\n admin\n auditor\n employee\n}\n\nenum PolicyStatus {\n draft\n published\n needs_review\n}\n\nmodel Comment {\n id String @id @default(dbgenerated(\"generate_prefixed_cuid('cmt'::text)\"))\n content String\n entityId String\n entityType CommentEntityType\n\n // Dates\n createdAt DateTime @default(now())\n\n // Relationships\n authorId String\n author Member @relation(fields: [authorId], references: [id])\n organizationId String\n organization Organization @relation(fields: [organizationId], references: [id], onDelete: Cascade)\n\n // Relation to Attachments\n attachments Attachment[]\n\n @@index([entityId])\n}\n\nenum CommentEntityType {\n task\n vendor\n risk\n policy\n}\n\nmodel Context {\n id String @id @default(dbgenerated(\"generate_prefixed_cuid('ctx'::text)\"))\n organizationId String\n organization Organization @relation(fields: [organizationId], references: [id], onDelete: Cascade)\n\n question String\n answer String\n\n tags String[]\n\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n\n @@index([organizationId])\n @@index([question])\n @@index([answer])\n @@index([tags])\n}\n\nmodel Control {\n // Metadata\n id String @id @default(dbgenerated(\"generate_prefixed_cuid('ctl'::text)\"))\n name String\n description String\n\n // Review dates\n lastReviewDate DateTime?\n nextReviewDate DateTime?\n\n // Relationships\n organization Organization @relation(fields: [organizationId], references: [id], onDelete: Cascade)\n organizationId String\n requirementsMapped RequirementMap[]\n tasks Task[]\n policies Policy[]\n controlTemplateId String?\n controlTemplate FrameworkEditorControlTemplate? @relation(fields: [controlTemplateId], references: [id])\n\n @@index([organizationId])\n}\n\n// --- Data for Framework Editor ---\nmodel FrameworkEditorVideo {\n id String @id @default(dbgenerated(\"generate_prefixed_cuid('frk_vi'::text)\"))\n title String\n description String\n youtubeId String\n url String\n\n // Dates\n createdAt DateTime @default(now())\n updatedAt DateTime @default(now()) @updatedAt\n}\n\nmodel FrameworkEditorFramework {\n id String @id @default(dbgenerated(\"generate_prefixed_cuid('frk'::text)\"))\n name String // e.g., \"soc2\", \"iso27001\"\n version String\n description String\n visible Boolean @default(false)\n\n requirements FrameworkEditorRequirement[]\n frameworkInstances FrameworkInstance[]\n\n // Dates\n createdAt DateTime @default(now())\n updatedAt DateTime @default(now()) @updatedAt\n}\n\nmodel FrameworkEditorRequirement {\n id String @id @default(dbgenerated(\"generate_prefixed_cuid('frk_rq'::text)\"))\n frameworkId String\n framework FrameworkEditorFramework @relation(fields: [frameworkId], references: [id])\n\n name String // Original requirement ID within that framework, e.g., \"Privacy\"\n identifier String @default(\"\") // Unique identifier for the requirement, e.g., \"cc1-1\"\n description String\n\n controlTemplates FrameworkEditorControlTemplate[]\n requirementMaps RequirementMap[]\n\n // Dates\n createdAt DateTime @default(now())\n updatedAt DateTime @default(now()) @updatedAt\n}\n\nmodel FrameworkEditorPolicyTemplate {\n id String @id @default(dbgenerated(\"generate_prefixed_cuid('frk_pt'::text)\"))\n name String\n description String\n frequency Frequency // Using the enum from shared.prisma\n department Departments // Using the enum from shared.prisma\n content Json\n\n controlTemplates FrameworkEditorControlTemplate[]\n\n // Dates\n createdAt DateTime @default(now())\n updatedAt DateTime @default(now()) @updatedAt\n\n // Instances\n policies Policy[]\n}\n\nmodel FrameworkEditorTaskTemplate {\n id String @id @default(dbgenerated(\"generate_prefixed_cuid('frk_tt'::text)\"))\n name String\n description String\n frequency Frequency // Using the enum from shared.prisma\n department Departments // Using the enum from shared.prisma\n\n controlTemplates FrameworkEditorControlTemplate[]\n\n // Dates\n createdAt DateTime @default(now())\n updatedAt DateTime @default(now()) @updatedAt\n\n // Instances\n tasks Task[]\n}\n\nmodel FrameworkEditorControlTemplate {\n id String @id @default(dbgenerated(\"generate_prefixed_cuid('frk_ct'::text)\"))\n name String\n description String\n\n policyTemplates FrameworkEditorPolicyTemplate[]\n requirements FrameworkEditorRequirement[]\n taskTemplates FrameworkEditorTaskTemplate[]\n\n // Dates\n createdAt DateTime @default(now())\n updatedAt DateTime @default(now()) @updatedAt\n\n // Instances\n controls Control[]\n}\n\nmodel FrameworkInstance {\n // Metadata\n id String @id @default(dbgenerated(\"generate_prefixed_cuid('frm'::text)\"))\n organizationId String\n\n frameworkId String\n framework FrameworkEditorFramework @relation(fields: [frameworkId], references: [id], onDelete: Cascade)\n\n // Relationships\n organization Organization @relation(fields: [organizationId], references: [id], onDelete: Cascade)\n requirementsMapped RequirementMap[]\n\n @@unique([organizationId, frameworkId])\n}\n\nmodel Integration {\n id String @id @default(dbgenerated(\"generate_prefixed_cuid('int'::text)\"))\n name String\n integrationId String\n settings Json\n userSettings Json\n organizationId String\n lastRunAt DateTime?\n organization Organization @relation(fields: [organizationId], references: [id], onDelete: Cascade)\n results IntegrationResult[]\n\n @@index([organizationId])\n}\n\nmodel IntegrationResult {\n id String @id @default(dbgenerated(\"generate_prefixed_cuid('itr'::text)\"))\n title String?\n description String?\n remediation String?\n status String?\n severity String?\n resultDetails Json?\n completedAt DateTime? @default(now())\n integrationId String\n organizationId String\n assignedUserId String?\n\n assignedUser User? @relation(fields: [assignedUserId], references: [id], onDelete: Cascade)\n integration Integration @relation(fields: [integrationId], references: [id], onDelete: Cascade)\n\n @@index([integrationId])\n}\n\nmodel Onboarding {\n organizationId String @id\n organization Organization @relation(fields: [organizationId], references: [id], onDelete: Cascade)\n policies Boolean @default(false)\n employees Boolean @default(false)\n vendors Boolean @default(false)\n integrations Boolean @default(false)\n risk Boolean @default(false)\n team Boolean @default(false)\n tasks Boolean @default(false)\n callBooked Boolean @default(false)\n companyBookingDetails Json?\n companyDetails Json?\n triggerJobId String?\n triggerJobCompleted Boolean @default(false)\n\n @@index([organizationId])\n}\n\nmodel Organization {\n id String @id @default(dbgenerated(\"generate_prefixed_cuid('org'::text)\"))\n name String\n slug String @unique @default(dbgenerated(\"generate_prefixed_cuid('slug'::text)\"))\n logo String?\n createdAt DateTime @default(now())\n metadata String?\n onboarding Onboarding?\n website String?\n onboardingCompleted Boolean @default(false)\n hasAccess Boolean @default(false)\n\n // FleetDM\n fleetDmLabelId Int?\n isFleetSetupCompleted Boolean @default(false)\n\n apiKeys ApiKey[]\n auditLog AuditLog[]\n controls Control[]\n frameworkInstances FrameworkInstance[]\n integrations Integration[]\n invitations Invitation[]\n members Member[]\n policy Policy[]\n risk Risk[]\n vendors Vendor[]\n tasks Task[]\n comments Comment[]\n attachments Attachment[]\n trust Trust[]\n context Context[]\n\n @@index([slug])\n}\n\nmodel Policy {\n id String @id @default(dbgenerated(\"generate_prefixed_cuid('pol'::text)\"))\n name String\n description String?\n status PolicyStatus @default(draft)\n content Json[]\n frequency Frequency?\n department Departments?\n isRequiredToSign Boolean @default(false)\n signedBy String[] @default([])\n reviewDate DateTime?\n isArchived Boolean @default(false)\n\n // Dates\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n lastArchivedAt DateTime?\n lastPublishedAt DateTime?\n\n // Relationships\n organizationId String\n organization Organization @relation(fields: [organizationId], references: [id], onDelete: Cascade)\n assigneeId String?\n assignee Member? @relation(\"PolicyAssignee\", fields: [assigneeId], references: [id], onDelete: SetNull, onUpdate: Cascade)\n approverId String?\n approver Member? @relation(\"PolicyApprover\", fields: [approverId], references: [id], onDelete: SetNull, onUpdate: Cascade)\n policyTemplateId String?\n policyTemplate FrameworkEditorPolicyTemplate? @relation(fields: [policyTemplateId], references: [id])\n controls Control[]\n\n @@index([organizationId])\n}\n\nmodel RequirementMap {\n id String @id @default(dbgenerated(\"generate_prefixed_cuid('req'::text)\"))\n\n requirementId String\n requirement FrameworkEditorRequirement @relation(fields: [requirementId], references: [id], onDelete: Cascade)\n\n controlId String\n control Control @relation(fields: [controlId], references: [id], onDelete: Cascade)\n\n frameworkInstanceId String\n frameworkInstance FrameworkInstance @relation(fields: [frameworkInstanceId], references: [id], onDelete: Cascade)\n\n @@unique([controlId, frameworkInstanceId, requirementId])\n @@index([requirementId, frameworkInstanceId])\n}\n\nmodel Risk {\n // Metadata\n id String @id @default(dbgenerated(\"generate_prefixed_cuid('rsk'::text)\"))\n title String\n description String\n category RiskCategory\n department Departments?\n status RiskStatus @default(open)\n likelihood Likelihood @default(very_unlikely)\n impact Impact @default(insignificant)\n residualLikelihood Likelihood @default(very_unlikely)\n residualImpact Impact @default(insignificant)\n treatmentStrategyDescription String?\n treatmentStrategy RiskTreatmentType @default(accept)\n\n // Dates\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n\n // Relationships\n organizationId String\n organization Organization @relation(fields: [organizationId], references: [id], onDelete: Cascade)\n assigneeId String?\n assignee Member? @relation(fields: [assigneeId], references: [id])\n tasks Task[]\n\n @@index([organizationId])\n @@index([category])\n @@index([status])\n}\n\nenum RiskTreatmentType {\n accept\n avoid\n mitigate\n transfer\n}\n\nenum RiskCategory {\n customer\n governance\n operations\n other\n people\n regulatory\n reporting\n resilience\n technology\n vendor_management\n}\n\nenum RiskStatus {\n open\n pending\n closed\n archived\n}\n\nmodel ApiKey {\n id String @id @default(dbgenerated(\"generate_prefixed_cuid('apk'::text)\"))\n name String\n key String @unique\n salt String?\n createdAt DateTime @default(now())\n expiresAt DateTime?\n lastUsedAt DateTime?\n isActive Boolean @default(true)\n\n organization Organization @relation(fields: [organizationId], references: [id], onDelete: Cascade)\n organizationId String\n\n @@index([organizationId])\n @@index([key])\n}\n\nmodel AuditLog {\n id String @id @default(dbgenerated(\"generate_prefixed_cuid('aud'::text)\"))\n timestamp DateTime @default(now())\n organizationId String\n userId String\n memberId String?\n data Json\n description String?\n entityId String?\n entityType AuditLogEntityType?\n\n organization Organization @relation(fields: [organizationId], references: [id], onDelete: Cascade)\n user User @relation(fields: [userId], references: [id], onDelete: Cascade)\n member Member? @relation(fields: [memberId], references: [id], onDelete: Cascade)\n\n @@index([userId])\n @@index([organizationId])\n @@index([memberId])\n @@index([entityType])\n}\n\nenum AuditLogEntityType {\n organization\n framework\n requirement\n control\n policy\n task\n people\n risk\n vendor\n tests\n integration\n}\n\nmodel GlobalVendors {\n website String @id @unique\n company_name String?\n legal_name String?\n company_description String?\n company_hq_address String?\n privacy_policy_url String?\n terms_of_service_url String?\n service_level_agreement_url String?\n security_page_url String?\n trust_page_url String?\n security_certifications String[]\n subprocessors String[]\n type_of_company String?\n\n approved Boolean @default(false)\n createdAt DateTime @default(now())\n\n @@index([website])\n}\n\nenum Departments {\n none\n admin\n gov\n hr\n it\n itsm\n qms\n}\n\nenum Frequency {\n monthly\n quarterly\n yearly\n}\n\nenum Likelihood {\n very_unlikely\n unlikely\n possible\n likely\n very_likely\n}\n\nenum Impact {\n insignificant\n minor\n moderate\n major\n severe\n}\n\nmodel Task {\n // Metadata\n id String @id @default(dbgenerated(\"generate_prefixed_cuid('tsk'::text)\"))\n title String\n description String\n status TaskStatus @default(todo)\n frequency TaskFrequency?\n department Departments? @default(none)\n order Int @default(0)\n\n // Dates\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n lastCompletedAt DateTime?\n\n // Relationships\n controls Control[]\n vendors Vendor[]\n risks Risk[]\n assigneeId String?\n assignee Member? @relation(fields: [assigneeId], references: [id])\n organizationId String\n organization Organization @relation(fields: [organizationId], references: [id], onDelete: Cascade)\n taskTemplateId String?\n taskTemplate FrameworkEditorTaskTemplate? @relation(fields: [taskTemplateId], references: [id])\n}\n\nenum TaskStatus {\n todo\n in_progress\n done\n not_relevant\n}\n\nenum TaskFrequency {\n daily\n weekly\n monthly\n quarterly\n yearly\n}\n\nmodel Trust {\n organizationId String\n organization Organization @relation(fields: [organizationId], references: [id], onDelete: Cascade)\n friendlyUrl String? @unique\n domain String?\n domainVerified Boolean @default(false)\n isVercelDomain Boolean @default(false)\n vercelVerification String?\n status TrustStatus @default(draft)\n contactEmail String?\n\n email String?\n privacyPolicy String?\n soc2 Boolean @default(false)\n iso27001 Boolean @default(false)\n gdpr Boolean @default(false)\n\n soc2_status FrameworkStatus @default(started)\n iso27001_status FrameworkStatus @default(started)\n gdpr_status FrameworkStatus @default(started)\n\n @@id([status, organizationId])\n @@unique([organizationId])\n @@index([organizationId])\n @@index([friendlyUrl])\n}\n\nenum TrustStatus {\n draft\n published\n}\n\nenum FrameworkStatus {\n started\n in_progress\n compliant\n}\n\nmodel Vendor {\n id String @id @default(dbgenerated(\"generate_prefixed_cuid('vnd'::text)\"))\n name String\n description String\n category VendorCategory @default(other)\n status VendorStatus @default(not_assessed)\n inherentProbability Likelihood @default(very_unlikely)\n inherentImpact Impact @default(insignificant)\n residualProbability Likelihood @default(very_unlikely)\n residualImpact Impact @default(insignificant)\n website String?\n\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n\n organizationId String\n organization Organization @relation(fields: [organizationId], references: [id], onDelete: Cascade)\n assigneeId String?\n assignee Member? @relation(fields: [assigneeId], references: [id], onDelete: Cascade)\n contacts VendorContact[]\n tasks Task[]\n\n @@index([organizationId])\n @@index([assigneeId])\n @@index([category])\n}\n\nmodel VendorContact {\n id String @id @default(dbgenerated(\"generate_prefixed_cuid('vct'::text)\"))\n vendorId String\n name String\n email String\n phone String\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n Vendor Vendor @relation(fields: [vendorId], references: [id], onDelete: Cascade)\n\n @@index([vendorId])\n}\n\nenum VendorCategory {\n cloud\n infrastructure\n software_as_a_service\n finance\n marketing\n sales\n hr\n other\n}\n\nenum VendorStatus {\n not_assessed\n in_progress\n assessed\n}\n\ngenerator client {\n provider = \"prisma-client-js\"\n previewFeatures = [\"postgresqlExtensions\"]\n binaryTargets = [\"native\", \"rhel-openssl-3.0.x\", \"debian-openssl-3.0.x\", \"linux-musl-openssl-3.0.x\"]\n output = \"./generated/prisma\"\n}\n\ndatasource db {\n provider = \"postgresql\"\n url = env(\"DATABASE_URL\")\n directUrl = env(\"DATABASE_URL\")\n extensions = [pgcrypto]\n}\n",
|
|
762
|
+
"inlineSchemaHash": "3ef45e7de85b1aa788cc20d75ece4cab2ebe9f06937d23e5b1ef7020f5bb9d2c",
|
|
763
763
|
"copyEngine": true
|
|
764
764
|
}
|
|
765
765
|
config.dirname = '/'
|
|
@@ -722,7 +722,7 @@ const config = {
|
|
|
722
722
|
},
|
|
723
723
|
{
|
|
724
724
|
"fromEnvVar": null,
|
|
725
|
-
"value": "
|
|
725
|
+
"value": "rhel-openssl-3.0.x"
|
|
726
726
|
},
|
|
727
727
|
{
|
|
728
728
|
"fromEnvVar": null,
|
|
@@ -759,8 +759,8 @@ const config = {
|
|
|
759
759
|
}
|
|
760
760
|
}
|
|
761
761
|
},
|
|
762
|
-
"inlineSchema": "model Attachment {\n id String @id @default(dbgenerated(\"generate_prefixed_cuid('att'::text)\"))\n name String\n url String\n type AttachmentType\n entityId String\n entityType AttachmentEntityType\n\n // Dates\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n\n // Relationships\n organizationId String\n organization Organization @relation(fields: [organizationId], references: [id], onDelete: Cascade)\n comment Comment? @relation(fields: [commentId], references: [id])\n commentId String?\n\n @@index([entityId, entityType])\n}\n\nenum AttachmentEntityType {\n task\n vendor\n risk\n comment\n}\n\nenum AttachmentType {\n image\n video\n audio\n document\n other\n}\n\nmodel User {\n id String @id @default(dbgenerated(\"generate_prefixed_cuid('usr'::text)\"))\n name String\n email String\n emailVerified Boolean\n image String?\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n lastLogin DateTime?\n\n accounts Account[]\n auditLog AuditLog[]\n integrationResults IntegrationResult[]\n invitations Invitation[]\n members Member[]\n sessions Session[]\n\n @@unique([email])\n}\n\nmodel EmployeeTrainingVideoCompletion {\n id String @id @default(dbgenerated(\"generate_prefixed_cuid('evc'::text)\"))\n completedAt DateTime?\n videoId String\n\n memberId String\n member Member @relation(fields: [memberId], references: [id], onDelete: Cascade)\n\n @@unique([memberId, videoId])\n @@index([memberId])\n}\n\nmodel Session {\n id String @id @default(dbgenerated(\"generate_prefixed_cuid('ses'::text)\"))\n expiresAt DateTime\n token String\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n ipAddress String?\n userAgent String?\n userId String\n activeOrganizationId String?\n user User @relation(fields: [userId], references: [id], onDelete: Cascade)\n\n @@unique([token])\n}\n\nmodel Account {\n id String @id @default(dbgenerated(\"generate_prefixed_cuid('acc'::text)\"))\n accountId String\n providerId String\n userId String\n user User @relation(fields: [userId], references: [id], onDelete: Cascade)\n accessToken String?\n refreshToken String?\n idToken String?\n accessTokenExpiresAt DateTime?\n refreshTokenExpiresAt DateTime?\n scope String?\n password String?\n createdAt DateTime\n updatedAt DateTime\n}\n\nmodel Verification {\n id String @id @default(dbgenerated(\"generate_prefixed_cuid('ver'::text)\"))\n identifier String\n value String\n expiresAt DateTime\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n}\n\nmodel Member {\n id String @id @default(dbgenerated(\"generate_prefixed_cuid('mem'::text)\"))\n organizationId String\n organization Organization @relation(fields: [organizationId], references: [id], onDelete: Cascade)\n userId String\n user User @relation(fields: [userId], references: [id], onDelete: Cascade)\n role String // Purposefully a string, since BetterAuth doesn't support enums this way\n createdAt DateTime @default(now())\n\n department Departments @default(none)\n isActive Boolean @default(true)\n employeeTrainingVideoCompletion EmployeeTrainingVideoCompletion[]\n fleetDmLabelId Int?\n\n assignedPolicies Policy[] @relation(\"PolicyAssignee\") // Policies where this member is an assignee\n approvedPolicies Policy[] @relation(\"PolicyApprover\") // Policies where this member is an approver\n risks Risk[]\n tasks Task[]\n vendors Vendor[]\n comments Comment[]\n auditLogs AuditLog[]\n}\n\nmodel Invitation {\n id String @id @default(dbgenerated(\"generate_prefixed_cuid('inv'::text)\"))\n organizationId String\n organization Organization @relation(fields: [organizationId], references: [id], onDelete: Cascade)\n email String\n role String // Purposefully a string, since BetterAuth doesn't support enums this way\n status String\n expiresAt DateTime\n inviterId String\n user User @relation(fields: [inviterId], references: [id], onDelete: Cascade)\n}\n\n// This is only for the app to consume, shouldn't be enforced by DB\n// Otherwise it won't work with Better Auth, as per https://www.better-auth.com/docs/plugins/organization#access-control\nenum Role {\n owner\n admin\n auditor\n employee\n}\n\nenum PolicyStatus {\n draft\n published\n needs_review\n}\n\nmodel Comment {\n id String @id @default(dbgenerated(\"generate_prefixed_cuid('cmt'::text)\"))\n content String\n entityId String\n entityType CommentEntityType\n\n // Dates\n createdAt DateTime @default(now())\n\n // Relationships\n authorId String\n author Member @relation(fields: [authorId], references: [id])\n organizationId String\n organization Organization @relation(fields: [organizationId], references: [id], onDelete: Cascade)\n\n // Relation to Attachments\n attachments Attachment[]\n\n @@index([entityId])\n}\n\nenum CommentEntityType {\n task\n vendor\n risk\n policy\n}\n\nmodel Context {\n id String @id @default(dbgenerated(\"generate_prefixed_cuid('ctx'::text)\"))\n organizationId String\n organization Organization @relation(fields: [organizationId], references: [id], onDelete: Cascade)\n\n question String\n answer String\n\n tags String[]\n\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n\n @@index([organizationId])\n @@index([question])\n @@index([answer])\n @@index([tags])\n}\n\nmodel Control {\n // Metadata\n id String @id @default(dbgenerated(\"generate_prefixed_cuid('ctl'::text)\"))\n name String\n description String\n\n // Review dates\n lastReviewDate DateTime?\n nextReviewDate DateTime?\n\n // Relationships\n organization Organization @relation(fields: [organizationId], references: [id], onDelete: Cascade)\n organizationId String\n requirementsMapped RequirementMap[]\n tasks Task[]\n policies Policy[]\n controlTemplateId String?\n controlTemplate FrameworkEditorControlTemplate? @relation(fields: [controlTemplateId], references: [id])\n\n @@index([organizationId])\n}\n\n// --- Data for Framework Editor ---\nmodel FrameworkEditorVideo {\n id String @id @default(dbgenerated(\"generate_prefixed_cuid('frk_vi'::text)\"))\n title String\n description String\n youtubeId String\n url String\n\n // Dates\n createdAt DateTime @default(now())\n updatedAt DateTime @default(now()) @updatedAt\n}\n\nmodel FrameworkEditorFramework {\n id String @id @default(dbgenerated(\"generate_prefixed_cuid('frk'::text)\"))\n name String // e.g., \"soc2\", \"iso27001\"\n version String\n description String\n visible Boolean @default(false)\n\n requirements FrameworkEditorRequirement[]\n frameworkInstances FrameworkInstance[]\n\n // Dates\n createdAt DateTime @default(now())\n updatedAt DateTime @default(now()) @updatedAt\n}\n\nmodel FrameworkEditorRequirement {\n id String @id @default(dbgenerated(\"generate_prefixed_cuid('frk_rq'::text)\"))\n frameworkId String\n framework FrameworkEditorFramework @relation(fields: [frameworkId], references: [id])\n\n name String // Original requirement ID within that framework, e.g., \"Privacy\"\n identifier String @default(\"\") // Unique identifier for the requirement, e.g., \"cc1-1\"\n description String\n\n controlTemplates FrameworkEditorControlTemplate[]\n requirementMaps RequirementMap[]\n\n // Dates\n createdAt DateTime @default(now())\n updatedAt DateTime @default(now()) @updatedAt\n}\n\nmodel FrameworkEditorPolicyTemplate {\n id String @id @default(dbgenerated(\"generate_prefixed_cuid('frk_pt'::text)\"))\n name String\n description String\n frequency Frequency // Using the enum from shared.prisma\n department Departments // Using the enum from shared.prisma\n content Json\n\n controlTemplates FrameworkEditorControlTemplate[]\n\n // Dates\n createdAt DateTime @default(now())\n updatedAt DateTime @default(now()) @updatedAt\n\n // Instances\n policies Policy[]\n}\n\nmodel FrameworkEditorTaskTemplate {\n id String @id @default(dbgenerated(\"generate_prefixed_cuid('frk_tt'::text)\"))\n name String\n description String\n frequency Frequency // Using the enum from shared.prisma\n department Departments // Using the enum from shared.prisma\n\n controlTemplates FrameworkEditorControlTemplate[]\n\n // Dates\n createdAt DateTime @default(now())\n updatedAt DateTime @default(now()) @updatedAt\n\n // Instances\n tasks Task[]\n}\n\nmodel FrameworkEditorControlTemplate {\n id String @id @default(dbgenerated(\"generate_prefixed_cuid('frk_ct'::text)\"))\n name String\n description String\n\n policyTemplates FrameworkEditorPolicyTemplate[]\n requirements FrameworkEditorRequirement[]\n taskTemplates FrameworkEditorTaskTemplate[]\n\n // Dates\n createdAt DateTime @default(now())\n updatedAt DateTime @default(now()) @updatedAt\n\n // Instances\n controls Control[]\n}\n\nmodel FrameworkInstance {\n // Metadata\n id String @id @default(dbgenerated(\"generate_prefixed_cuid('frm'::text)\"))\n organizationId String\n\n frameworkId String\n framework FrameworkEditorFramework @relation(fields: [frameworkId], references: [id], onDelete: Cascade)\n\n // Relationships\n organization Organization @relation(fields: [organizationId], references: [id], onDelete: Cascade)\n requirementsMapped RequirementMap[]\n\n @@unique([organizationId, frameworkId])\n}\n\nmodel Integration {\n id String @id @default(dbgenerated(\"generate_prefixed_cuid('int'::text)\"))\n name String\n integrationId String\n settings Json\n userSettings Json\n organizationId String\n lastRunAt DateTime?\n organization Organization @relation(fields: [organizationId], references: [id], onDelete: Cascade)\n results IntegrationResult[]\n\n @@index([organizationId])\n}\n\nmodel IntegrationResult {\n id String @id @default(dbgenerated(\"generate_prefixed_cuid('itr'::text)\"))\n title String?\n description String?\n remediation String?\n status String?\n severity String?\n resultDetails Json?\n completedAt DateTime? @default(now())\n integrationId String\n organizationId String\n assignedUserId String?\n\n assignedUser User? @relation(fields: [assignedUserId], references: [id], onDelete: Cascade)\n integration Integration @relation(fields: [integrationId], references: [id], onDelete: Cascade)\n\n @@index([integrationId])\n}\n\nmodel Onboarding {\n organizationId String @id\n organization Organization @relation(fields: [organizationId], references: [id], onDelete: Cascade)\n policies Boolean @default(false)\n employees Boolean @default(false)\n vendors Boolean @default(false)\n integrations Boolean @default(false)\n risk Boolean @default(false)\n team Boolean @default(false)\n tasks Boolean @default(false)\n callBooked Boolean @default(false)\n companyBookingDetails Json?\n companyDetails Json?\n triggerJobId String?\n triggerJobCompleted Boolean @default(false)\n\n @@index([organizationId])\n}\n\nmodel Organization {\n id String @id @default(dbgenerated(\"generate_prefixed_cuid('org'::text)\"))\n name String\n slug String @unique @default(dbgenerated(\"generate_prefixed_cuid('slug'::text)\"))\n logo String?\n createdAt DateTime @default(now())\n metadata String?\n onboarding Onboarding?\n website String?\n onboardingCompleted Boolean @default(false)\n hasAccess Boolean @default(false)\n\n // FleetDM\n fleetDmLabelId Int?\n isFleetSetupCompleted Boolean @default(false)\n\n apiKeys ApiKey[]\n auditLog AuditLog[]\n controls Control[]\n frameworkInstances FrameworkInstance[]\n integrations Integration[]\n invitations Invitation[]\n members Member[]\n policy Policy[]\n risk Risk[]\n vendors Vendor[]\n tasks Task[]\n comments Comment[]\n attachments Attachment[]\n trust Trust[]\n context Context[]\n\n @@index([slug])\n}\n\nmodel Policy {\n id String @id @default(dbgenerated(\"generate_prefixed_cuid('pol'::text)\"))\n name String\n description String?\n status PolicyStatus @default(draft)\n content Json[]\n frequency Frequency?\n department Departments?\n isRequiredToSign Boolean @default(false)\n signedBy String[] @default([])\n reviewDate DateTime?\n isArchived Boolean @default(false)\n\n // Dates\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n lastArchivedAt DateTime?\n lastPublishedAt DateTime?\n\n // Relationships\n organizationId String\n organization Organization @relation(fields: [organizationId], references: [id], onDelete: Cascade)\n assigneeId String?\n assignee Member? @relation(\"PolicyAssignee\", fields: [assigneeId], references: [id], onDelete: SetNull, onUpdate: Cascade)\n approverId String?\n approver Member? @relation(\"PolicyApprover\", fields: [approverId], references: [id], onDelete: SetNull, onUpdate: Cascade)\n policyTemplateId String?\n policyTemplate FrameworkEditorPolicyTemplate? @relation(fields: [policyTemplateId], references: [id])\n controls Control[]\n\n @@index([organizationId])\n}\n\nmodel RequirementMap {\n id String @id @default(dbgenerated(\"generate_prefixed_cuid('req'::text)\"))\n\n requirementId String\n requirement FrameworkEditorRequirement @relation(fields: [requirementId], references: [id], onDelete: Cascade)\n\n controlId String\n control Control @relation(fields: [controlId], references: [id], onDelete: Cascade)\n\n frameworkInstanceId String\n frameworkInstance FrameworkInstance @relation(fields: [frameworkInstanceId], references: [id], onDelete: Cascade)\n\n @@unique([controlId, frameworkInstanceId, requirementId])\n @@index([requirementId, frameworkInstanceId])\n}\n\nmodel Risk {\n // Metadata\n id String @id @default(dbgenerated(\"generate_prefixed_cuid('rsk'::text)\"))\n title String\n description String\n category RiskCategory\n department Departments?\n status RiskStatus @default(open)\n likelihood Likelihood @default(very_unlikely)\n impact Impact @default(insignificant)\n residualLikelihood Likelihood @default(very_unlikely)\n residualImpact Impact @default(insignificant)\n treatmentStrategyDescription String?\n treatmentStrategy RiskTreatmentType @default(accept)\n\n // Dates\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n\n // Relationships\n organizationId String\n organization Organization @relation(fields: [organizationId], references: [id], onDelete: Cascade)\n assigneeId String?\n assignee Member? @relation(fields: [assigneeId], references: [id])\n tasks Task[]\n\n @@index([organizationId])\n @@index([category])\n @@index([status])\n}\n\nenum RiskTreatmentType {\n accept\n avoid\n mitigate\n transfer\n}\n\nenum RiskCategory {\n customer\n governance\n operations\n other\n people\n regulatory\n reporting\n resilience\n technology\n vendor_management\n}\n\nenum RiskStatus {\n open\n pending\n closed\n archived\n}\n\nmodel ApiKey {\n id String @id @default(dbgenerated(\"generate_prefixed_cuid('apk'::text)\"))\n name String\n key String @unique\n salt String?\n createdAt DateTime @default(now())\n expiresAt DateTime?\n lastUsedAt DateTime?\n isActive Boolean @default(true)\n\n organization Organization @relation(fields: [organizationId], references: [id], onDelete: Cascade)\n organizationId String\n\n @@index([organizationId])\n @@index([key])\n}\n\nmodel AuditLog {\n id String @id @default(dbgenerated(\"generate_prefixed_cuid('aud'::text)\"))\n timestamp DateTime @default(now())\n organizationId String\n userId String\n memberId String?\n data Json\n description String?\n entityId String?\n entityType AuditLogEntityType?\n\n organization Organization @relation(fields: [organizationId], references: [id], onDelete: Cascade)\n user User @relation(fields: [userId], references: [id], onDelete: Cascade)\n member Member? @relation(fields: [memberId], references: [id], onDelete: Cascade)\n\n @@index([userId])\n @@index([organizationId])\n @@index([memberId])\n @@index([entityType])\n}\n\nenum AuditLogEntityType {\n organization\n framework\n requirement\n control\n policy\n task\n people\n risk\n vendor\n tests\n integration\n}\n\nmodel GlobalVendors {\n website String @id @unique\n company_name String?\n legal_name String?\n company_description String?\n company_hq_address String?\n privacy_policy_url String?\n terms_of_service_url String?\n service_level_agreement_url String?\n security_page_url String?\n trust_page_url String?\n security_certifications String[]\n subprocessors String[]\n type_of_company String?\n\n approved Boolean @default(false)\n createdAt DateTime @default(now())\n\n @@index([website])\n}\n\nenum Departments {\n none\n admin\n gov\n hr\n it\n itsm\n qms\n}\n\nenum Frequency {\n monthly\n quarterly\n yearly\n}\n\nenum Likelihood {\n very_unlikely\n unlikely\n possible\n likely\n very_likely\n}\n\nenum Impact {\n insignificant\n minor\n moderate\n major\n severe\n}\n\nmodel Task {\n // Metadata\n id String @id @default(dbgenerated(\"generate_prefixed_cuid('tsk'::text)\"))\n title String\n description String\n status TaskStatus @default(todo)\n frequency TaskFrequency?\n department Departments? @default(none)\n order Int @default(0)\n\n // Dates\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n lastCompletedAt DateTime?\n\n // Relationships\n controls Control[]\n vendors Vendor[]\n risks Risk[]\n assigneeId String?\n assignee Member? @relation(fields: [assigneeId], references: [id])\n organizationId String\n organization Organization @relation(fields: [organizationId], references: [id], onDelete: Cascade)\n taskTemplateId String?\n taskTemplate FrameworkEditorTaskTemplate? @relation(fields: [taskTemplateId], references: [id])\n}\n\nenum TaskStatus {\n todo\n in_progress\n done\n not_relevant\n}\n\nenum TaskFrequency {\n daily\n weekly\n monthly\n quarterly\n yearly\n}\n\nmodel Trust {\n organizationId String\n organization Organization @relation(fields: [organizationId], references: [id], onDelete: Cascade)\n friendlyUrl String? @unique\n domain String?\n domainVerified Boolean @default(false)\n isVercelDomain Boolean @default(false)\n vercelVerification String?\n status TrustStatus @default(draft)\n contactEmail String?\n\n email String?\n privacyPolicy String?\n soc2 Boolean @default(false)\n iso27001 Boolean @default(false)\n gdpr Boolean @default(false)\n\n soc2_status FrameworkStatus @default(started)\n iso27001_status FrameworkStatus @default(started)\n gdpr_status FrameworkStatus @default(started)\n\n @@id([status, organizationId])\n @@unique([organizationId])\n @@index([organizationId])\n @@index([friendlyUrl])\n}\n\nenum TrustStatus {\n draft\n published\n}\n\nenum FrameworkStatus {\n started\n in_progress\n compliant\n}\n\nmodel Vendor {\n id String @id @default(dbgenerated(\"generate_prefixed_cuid('vnd'::text)\"))\n name String\n description String\n category VendorCategory @default(other)\n status VendorStatus @default(not_assessed)\n inherentProbability Likelihood @default(very_unlikely)\n inherentImpact Impact @default(insignificant)\n residualProbability Likelihood @default(very_unlikely)\n residualImpact Impact @default(insignificant)\n website String?\n\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n\n organizationId String\n organization Organization @relation(fields: [organizationId], references: [id], onDelete: Cascade)\n assigneeId String?\n assignee Member? @relation(fields: [assigneeId], references: [id], onDelete: Cascade)\n contacts VendorContact[]\n tasks Task[]\n\n @@index([organizationId])\n @@index([assigneeId])\n @@index([category])\n}\n\nmodel VendorContact {\n id String @id @default(dbgenerated(\"generate_prefixed_cuid('vct'::text)\"))\n vendorId String\n name String\n email String\n phone String\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n Vendor Vendor @relation(fields: [vendorId], references: [id], onDelete: Cascade)\n\n @@index([vendorId])\n}\n\nenum VendorCategory {\n cloud\n infrastructure\n software_as_a_service\n finance\n marketing\n sales\n hr\n other\n}\n\nenum VendorStatus {\n not_assessed\n in_progress\n assessed\n}\n\ngenerator client {\n provider = \"prisma-client-js\"\n previewFeatures = [\"postgresqlExtensions\"]\n binaryTargets = [\"native\", \"darwin-arm64\", \"debian-openssl-3.0.x\", \"linux-musl-openssl-3.0.x\"]\n output = \"./generated/prisma\"\n}\n\ndatasource db {\n provider = \"postgresql\"\n url = env(\"DATABASE_URL\")\n directUrl = env(\"DATABASE_URL\")\n extensions = [pgcrypto]\n}\n",
|
|
763
|
-
"inlineSchemaHash": "
|
|
762
|
+
"inlineSchema": "model Attachment {\n id String @id @default(dbgenerated(\"generate_prefixed_cuid('att'::text)\"))\n name String\n url String\n type AttachmentType\n entityId String\n entityType AttachmentEntityType\n\n // Dates\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n\n // Relationships\n organizationId String\n organization Organization @relation(fields: [organizationId], references: [id], onDelete: Cascade)\n comment Comment? @relation(fields: [commentId], references: [id])\n commentId String?\n\n @@index([entityId, entityType])\n}\n\nenum AttachmentEntityType {\n task\n vendor\n risk\n comment\n}\n\nenum AttachmentType {\n image\n video\n audio\n document\n other\n}\n\nmodel User {\n id String @id @default(dbgenerated(\"generate_prefixed_cuid('usr'::text)\"))\n name String\n email String\n emailVerified Boolean\n image String?\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n lastLogin DateTime?\n\n accounts Account[]\n auditLog AuditLog[]\n integrationResults IntegrationResult[]\n invitations Invitation[]\n members Member[]\n sessions Session[]\n\n @@unique([email])\n}\n\nmodel EmployeeTrainingVideoCompletion {\n id String @id @default(dbgenerated(\"generate_prefixed_cuid('evc'::text)\"))\n completedAt DateTime?\n videoId String\n\n memberId String\n member Member @relation(fields: [memberId], references: [id], onDelete: Cascade)\n\n @@unique([memberId, videoId])\n @@index([memberId])\n}\n\nmodel Session {\n id String @id @default(dbgenerated(\"generate_prefixed_cuid('ses'::text)\"))\n expiresAt DateTime\n token String\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n ipAddress String?\n userAgent String?\n userId String\n activeOrganizationId String?\n user User @relation(fields: [userId], references: [id], onDelete: Cascade)\n\n @@unique([token])\n}\n\nmodel Account {\n id String @id @default(dbgenerated(\"generate_prefixed_cuid('acc'::text)\"))\n accountId String\n providerId String\n userId String\n user User @relation(fields: [userId], references: [id], onDelete: Cascade)\n accessToken String?\n refreshToken String?\n idToken String?\n accessTokenExpiresAt DateTime?\n refreshTokenExpiresAt DateTime?\n scope String?\n password String?\n createdAt DateTime\n updatedAt DateTime\n}\n\nmodel Verification {\n id String @id @default(dbgenerated(\"generate_prefixed_cuid('ver'::text)\"))\n identifier String\n value String\n expiresAt DateTime\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n}\n\nmodel Member {\n id String @id @default(dbgenerated(\"generate_prefixed_cuid('mem'::text)\"))\n organizationId String\n organization Organization @relation(fields: [organizationId], references: [id], onDelete: Cascade)\n userId String\n user User @relation(fields: [userId], references: [id], onDelete: Cascade)\n role String // Purposefully a string, since BetterAuth doesn't support enums this way\n createdAt DateTime @default(now())\n\n department Departments @default(none)\n isActive Boolean @default(true)\n employeeTrainingVideoCompletion EmployeeTrainingVideoCompletion[]\n fleetDmLabelId Int?\n\n assignedPolicies Policy[] @relation(\"PolicyAssignee\") // Policies where this member is an assignee\n approvedPolicies Policy[] @relation(\"PolicyApprover\") // Policies where this member is an approver\n risks Risk[]\n tasks Task[]\n vendors Vendor[]\n comments Comment[]\n auditLogs AuditLog[]\n}\n\nmodel Invitation {\n id String @id @default(dbgenerated(\"generate_prefixed_cuid('inv'::text)\"))\n organizationId String\n organization Organization @relation(fields: [organizationId], references: [id], onDelete: Cascade)\n email String\n role String // Purposefully a string, since BetterAuth doesn't support enums this way\n status String\n expiresAt DateTime\n inviterId String\n user User @relation(fields: [inviterId], references: [id], onDelete: Cascade)\n}\n\n// This is only for the app to consume, shouldn't be enforced by DB\n// Otherwise it won't work with Better Auth, as per https://www.better-auth.com/docs/plugins/organization#access-control\nenum Role {\n owner\n admin\n auditor\n employee\n}\n\nenum PolicyStatus {\n draft\n published\n needs_review\n}\n\nmodel Comment {\n id String @id @default(dbgenerated(\"generate_prefixed_cuid('cmt'::text)\"))\n content String\n entityId String\n entityType CommentEntityType\n\n // Dates\n createdAt DateTime @default(now())\n\n // Relationships\n authorId String\n author Member @relation(fields: [authorId], references: [id])\n organizationId String\n organization Organization @relation(fields: [organizationId], references: [id], onDelete: Cascade)\n\n // Relation to Attachments\n attachments Attachment[]\n\n @@index([entityId])\n}\n\nenum CommentEntityType {\n task\n vendor\n risk\n policy\n}\n\nmodel Context {\n id String @id @default(dbgenerated(\"generate_prefixed_cuid('ctx'::text)\"))\n organizationId String\n organization Organization @relation(fields: [organizationId], references: [id], onDelete: Cascade)\n\n question String\n answer String\n\n tags String[]\n\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n\n @@index([organizationId])\n @@index([question])\n @@index([answer])\n @@index([tags])\n}\n\nmodel Control {\n // Metadata\n id String @id @default(dbgenerated(\"generate_prefixed_cuid('ctl'::text)\"))\n name String\n description String\n\n // Review dates\n lastReviewDate DateTime?\n nextReviewDate DateTime?\n\n // Relationships\n organization Organization @relation(fields: [organizationId], references: [id], onDelete: Cascade)\n organizationId String\n requirementsMapped RequirementMap[]\n tasks Task[]\n policies Policy[]\n controlTemplateId String?\n controlTemplate FrameworkEditorControlTemplate? @relation(fields: [controlTemplateId], references: [id])\n\n @@index([organizationId])\n}\n\n// --- Data for Framework Editor ---\nmodel FrameworkEditorVideo {\n id String @id @default(dbgenerated(\"generate_prefixed_cuid('frk_vi'::text)\"))\n title String\n description String\n youtubeId String\n url String\n\n // Dates\n createdAt DateTime @default(now())\n updatedAt DateTime @default(now()) @updatedAt\n}\n\nmodel FrameworkEditorFramework {\n id String @id @default(dbgenerated(\"generate_prefixed_cuid('frk'::text)\"))\n name String // e.g., \"soc2\", \"iso27001\"\n version String\n description String\n visible Boolean @default(false)\n\n requirements FrameworkEditorRequirement[]\n frameworkInstances FrameworkInstance[]\n\n // Dates\n createdAt DateTime @default(now())\n updatedAt DateTime @default(now()) @updatedAt\n}\n\nmodel FrameworkEditorRequirement {\n id String @id @default(dbgenerated(\"generate_prefixed_cuid('frk_rq'::text)\"))\n frameworkId String\n framework FrameworkEditorFramework @relation(fields: [frameworkId], references: [id])\n\n name String // Original requirement ID within that framework, e.g., \"Privacy\"\n identifier String @default(\"\") // Unique identifier for the requirement, e.g., \"cc1-1\"\n description String\n\n controlTemplates FrameworkEditorControlTemplate[]\n requirementMaps RequirementMap[]\n\n // Dates\n createdAt DateTime @default(now())\n updatedAt DateTime @default(now()) @updatedAt\n}\n\nmodel FrameworkEditorPolicyTemplate {\n id String @id @default(dbgenerated(\"generate_prefixed_cuid('frk_pt'::text)\"))\n name String\n description String\n frequency Frequency // Using the enum from shared.prisma\n department Departments // Using the enum from shared.prisma\n content Json\n\n controlTemplates FrameworkEditorControlTemplate[]\n\n // Dates\n createdAt DateTime @default(now())\n updatedAt DateTime @default(now()) @updatedAt\n\n // Instances\n policies Policy[]\n}\n\nmodel FrameworkEditorTaskTemplate {\n id String @id @default(dbgenerated(\"generate_prefixed_cuid('frk_tt'::text)\"))\n name String\n description String\n frequency Frequency // Using the enum from shared.prisma\n department Departments // Using the enum from shared.prisma\n\n controlTemplates FrameworkEditorControlTemplate[]\n\n // Dates\n createdAt DateTime @default(now())\n updatedAt DateTime @default(now()) @updatedAt\n\n // Instances\n tasks Task[]\n}\n\nmodel FrameworkEditorControlTemplate {\n id String @id @default(dbgenerated(\"generate_prefixed_cuid('frk_ct'::text)\"))\n name String\n description String\n\n policyTemplates FrameworkEditorPolicyTemplate[]\n requirements FrameworkEditorRequirement[]\n taskTemplates FrameworkEditorTaskTemplate[]\n\n // Dates\n createdAt DateTime @default(now())\n updatedAt DateTime @default(now()) @updatedAt\n\n // Instances\n controls Control[]\n}\n\nmodel FrameworkInstance {\n // Metadata\n id String @id @default(dbgenerated(\"generate_prefixed_cuid('frm'::text)\"))\n organizationId String\n\n frameworkId String\n framework FrameworkEditorFramework @relation(fields: [frameworkId], references: [id], onDelete: Cascade)\n\n // Relationships\n organization Organization @relation(fields: [organizationId], references: [id], onDelete: Cascade)\n requirementsMapped RequirementMap[]\n\n @@unique([organizationId, frameworkId])\n}\n\nmodel Integration {\n id String @id @default(dbgenerated(\"generate_prefixed_cuid('int'::text)\"))\n name String\n integrationId String\n settings Json\n userSettings Json\n organizationId String\n lastRunAt DateTime?\n organization Organization @relation(fields: [organizationId], references: [id], onDelete: Cascade)\n results IntegrationResult[]\n\n @@index([organizationId])\n}\n\nmodel IntegrationResult {\n id String @id @default(dbgenerated(\"generate_prefixed_cuid('itr'::text)\"))\n title String?\n description String?\n remediation String?\n status String?\n severity String?\n resultDetails Json?\n completedAt DateTime? @default(now())\n integrationId String\n organizationId String\n assignedUserId String?\n\n assignedUser User? @relation(fields: [assignedUserId], references: [id], onDelete: Cascade)\n integration Integration @relation(fields: [integrationId], references: [id], onDelete: Cascade)\n\n @@index([integrationId])\n}\n\nmodel Onboarding {\n organizationId String @id\n organization Organization @relation(fields: [organizationId], references: [id], onDelete: Cascade)\n policies Boolean @default(false)\n employees Boolean @default(false)\n vendors Boolean @default(false)\n integrations Boolean @default(false)\n risk Boolean @default(false)\n team Boolean @default(false)\n tasks Boolean @default(false)\n callBooked Boolean @default(false)\n companyBookingDetails Json?\n companyDetails Json?\n triggerJobId String?\n triggerJobCompleted Boolean @default(false)\n\n @@index([organizationId])\n}\n\nmodel Organization {\n id String @id @default(dbgenerated(\"generate_prefixed_cuid('org'::text)\"))\n name String\n slug String @unique @default(dbgenerated(\"generate_prefixed_cuid('slug'::text)\"))\n logo String?\n createdAt DateTime @default(now())\n metadata String?\n onboarding Onboarding?\n website String?\n onboardingCompleted Boolean @default(false)\n hasAccess Boolean @default(false)\n\n // FleetDM\n fleetDmLabelId Int?\n isFleetSetupCompleted Boolean @default(false)\n\n apiKeys ApiKey[]\n auditLog AuditLog[]\n controls Control[]\n frameworkInstances FrameworkInstance[]\n integrations Integration[]\n invitations Invitation[]\n members Member[]\n policy Policy[]\n risk Risk[]\n vendors Vendor[]\n tasks Task[]\n comments Comment[]\n attachments Attachment[]\n trust Trust[]\n context Context[]\n\n @@index([slug])\n}\n\nmodel Policy {\n id String @id @default(dbgenerated(\"generate_prefixed_cuid('pol'::text)\"))\n name String\n description String?\n status PolicyStatus @default(draft)\n content Json[]\n frequency Frequency?\n department Departments?\n isRequiredToSign Boolean @default(false)\n signedBy String[] @default([])\n reviewDate DateTime?\n isArchived Boolean @default(false)\n\n // Dates\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n lastArchivedAt DateTime?\n lastPublishedAt DateTime?\n\n // Relationships\n organizationId String\n organization Organization @relation(fields: [organizationId], references: [id], onDelete: Cascade)\n assigneeId String?\n assignee Member? @relation(\"PolicyAssignee\", fields: [assigneeId], references: [id], onDelete: SetNull, onUpdate: Cascade)\n approverId String?\n approver Member? @relation(\"PolicyApprover\", fields: [approverId], references: [id], onDelete: SetNull, onUpdate: Cascade)\n policyTemplateId String?\n policyTemplate FrameworkEditorPolicyTemplate? @relation(fields: [policyTemplateId], references: [id])\n controls Control[]\n\n @@index([organizationId])\n}\n\nmodel RequirementMap {\n id String @id @default(dbgenerated(\"generate_prefixed_cuid('req'::text)\"))\n\n requirementId String\n requirement FrameworkEditorRequirement @relation(fields: [requirementId], references: [id], onDelete: Cascade)\n\n controlId String\n control Control @relation(fields: [controlId], references: [id], onDelete: Cascade)\n\n frameworkInstanceId String\n frameworkInstance FrameworkInstance @relation(fields: [frameworkInstanceId], references: [id], onDelete: Cascade)\n\n @@unique([controlId, frameworkInstanceId, requirementId])\n @@index([requirementId, frameworkInstanceId])\n}\n\nmodel Risk {\n // Metadata\n id String @id @default(dbgenerated(\"generate_prefixed_cuid('rsk'::text)\"))\n title String\n description String\n category RiskCategory\n department Departments?\n status RiskStatus @default(open)\n likelihood Likelihood @default(very_unlikely)\n impact Impact @default(insignificant)\n residualLikelihood Likelihood @default(very_unlikely)\n residualImpact Impact @default(insignificant)\n treatmentStrategyDescription String?\n treatmentStrategy RiskTreatmentType @default(accept)\n\n // Dates\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n\n // Relationships\n organizationId String\n organization Organization @relation(fields: [organizationId], references: [id], onDelete: Cascade)\n assigneeId String?\n assignee Member? @relation(fields: [assigneeId], references: [id])\n tasks Task[]\n\n @@index([organizationId])\n @@index([category])\n @@index([status])\n}\n\nenum RiskTreatmentType {\n accept\n avoid\n mitigate\n transfer\n}\n\nenum RiskCategory {\n customer\n governance\n operations\n other\n people\n regulatory\n reporting\n resilience\n technology\n vendor_management\n}\n\nenum RiskStatus {\n open\n pending\n closed\n archived\n}\n\nmodel ApiKey {\n id String @id @default(dbgenerated(\"generate_prefixed_cuid('apk'::text)\"))\n name String\n key String @unique\n salt String?\n createdAt DateTime @default(now())\n expiresAt DateTime?\n lastUsedAt DateTime?\n isActive Boolean @default(true)\n\n organization Organization @relation(fields: [organizationId], references: [id], onDelete: Cascade)\n organizationId String\n\n @@index([organizationId])\n @@index([key])\n}\n\nmodel AuditLog {\n id String @id @default(dbgenerated(\"generate_prefixed_cuid('aud'::text)\"))\n timestamp DateTime @default(now())\n organizationId String\n userId String\n memberId String?\n data Json\n description String?\n entityId String?\n entityType AuditLogEntityType?\n\n organization Organization @relation(fields: [organizationId], references: [id], onDelete: Cascade)\n user User @relation(fields: [userId], references: [id], onDelete: Cascade)\n member Member? @relation(fields: [memberId], references: [id], onDelete: Cascade)\n\n @@index([userId])\n @@index([organizationId])\n @@index([memberId])\n @@index([entityType])\n}\n\nenum AuditLogEntityType {\n organization\n framework\n requirement\n control\n policy\n task\n people\n risk\n vendor\n tests\n integration\n}\n\nmodel GlobalVendors {\n website String @id @unique\n company_name String?\n legal_name String?\n company_description String?\n company_hq_address String?\n privacy_policy_url String?\n terms_of_service_url String?\n service_level_agreement_url String?\n security_page_url String?\n trust_page_url String?\n security_certifications String[]\n subprocessors String[]\n type_of_company String?\n\n approved Boolean @default(false)\n createdAt DateTime @default(now())\n\n @@index([website])\n}\n\nenum Departments {\n none\n admin\n gov\n hr\n it\n itsm\n qms\n}\n\nenum Frequency {\n monthly\n quarterly\n yearly\n}\n\nenum Likelihood {\n very_unlikely\n unlikely\n possible\n likely\n very_likely\n}\n\nenum Impact {\n insignificant\n minor\n moderate\n major\n severe\n}\n\nmodel Task {\n // Metadata\n id String @id @default(dbgenerated(\"generate_prefixed_cuid('tsk'::text)\"))\n title String\n description String\n status TaskStatus @default(todo)\n frequency TaskFrequency?\n department Departments? @default(none)\n order Int @default(0)\n\n // Dates\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n lastCompletedAt DateTime?\n\n // Relationships\n controls Control[]\n vendors Vendor[]\n risks Risk[]\n assigneeId String?\n assignee Member? @relation(fields: [assigneeId], references: [id])\n organizationId String\n organization Organization @relation(fields: [organizationId], references: [id], onDelete: Cascade)\n taskTemplateId String?\n taskTemplate FrameworkEditorTaskTemplate? @relation(fields: [taskTemplateId], references: [id])\n}\n\nenum TaskStatus {\n todo\n in_progress\n done\n not_relevant\n}\n\nenum TaskFrequency {\n daily\n weekly\n monthly\n quarterly\n yearly\n}\n\nmodel Trust {\n organizationId String\n organization Organization @relation(fields: [organizationId], references: [id], onDelete: Cascade)\n friendlyUrl String? @unique\n domain String?\n domainVerified Boolean @default(false)\n isVercelDomain Boolean @default(false)\n vercelVerification String?\n status TrustStatus @default(draft)\n contactEmail String?\n\n email String?\n privacyPolicy String?\n soc2 Boolean @default(false)\n iso27001 Boolean @default(false)\n gdpr Boolean @default(false)\n\n soc2_status FrameworkStatus @default(started)\n iso27001_status FrameworkStatus @default(started)\n gdpr_status FrameworkStatus @default(started)\n\n @@id([status, organizationId])\n @@unique([organizationId])\n @@index([organizationId])\n @@index([friendlyUrl])\n}\n\nenum TrustStatus {\n draft\n published\n}\n\nenum FrameworkStatus {\n started\n in_progress\n compliant\n}\n\nmodel Vendor {\n id String @id @default(dbgenerated(\"generate_prefixed_cuid('vnd'::text)\"))\n name String\n description String\n category VendorCategory @default(other)\n status VendorStatus @default(not_assessed)\n inherentProbability Likelihood @default(very_unlikely)\n inherentImpact Impact @default(insignificant)\n residualProbability Likelihood @default(very_unlikely)\n residualImpact Impact @default(insignificant)\n website String?\n\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n\n organizationId String\n organization Organization @relation(fields: [organizationId], references: [id], onDelete: Cascade)\n assigneeId String?\n assignee Member? @relation(fields: [assigneeId], references: [id], onDelete: Cascade)\n contacts VendorContact[]\n tasks Task[]\n\n @@index([organizationId])\n @@index([assigneeId])\n @@index([category])\n}\n\nmodel VendorContact {\n id String @id @default(dbgenerated(\"generate_prefixed_cuid('vct'::text)\"))\n vendorId String\n name String\n email String\n phone String\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n Vendor Vendor @relation(fields: [vendorId], references: [id], onDelete: Cascade)\n\n @@index([vendorId])\n}\n\nenum VendorCategory {\n cloud\n infrastructure\n software_as_a_service\n finance\n marketing\n sales\n hr\n other\n}\n\nenum VendorStatus {\n not_assessed\n in_progress\n assessed\n}\n\ngenerator client {\n provider = \"prisma-client-js\"\n previewFeatures = [\"postgresqlExtensions\"]\n binaryTargets = [\"native\", \"rhel-openssl-3.0.x\", \"debian-openssl-3.0.x\", \"linux-musl-openssl-3.0.x\"]\n output = \"./generated/prisma\"\n}\n\ndatasource db {\n provider = \"postgresql\"\n url = env(\"DATABASE_URL\")\n directUrl = env(\"DATABASE_URL\")\n extensions = [pgcrypto]\n}\n",
|
|
763
|
+
"inlineSchemaHash": "3ef45e7de85b1aa788cc20d75ece4cab2ebe9f06937d23e5b1ef7020f5bb9d2c",
|
|
764
764
|
"copyEngine": true
|
|
765
765
|
}
|
|
766
766
|
|
|
@@ -802,6 +802,10 @@ Object.assign(exports, Prisma)
|
|
|
802
802
|
path.join(__dirname, "libquery_engine-darwin-arm64.dylib.node");
|
|
803
803
|
path.join(process.cwd(), "prisma/generated/prisma/libquery_engine-darwin-arm64.dylib.node")
|
|
804
804
|
|
|
805
|
+
// file annotations for bundling tools to include these files
|
|
806
|
+
path.join(__dirname, "libquery_engine-rhel-openssl-3.0.x.so.node");
|
|
807
|
+
path.join(process.cwd(), "prisma/generated/prisma/libquery_engine-rhel-openssl-3.0.x.so.node")
|
|
808
|
+
|
|
805
809
|
// file annotations for bundling tools to include these files
|
|
806
810
|
path.join(__dirname, "libquery_engine-debian-openssl-3.0.x.so.node");
|
|
807
811
|
path.join(process.cwd(), "prisma/generated/prisma/libquery_engine-debian-openssl-3.0.x.so.node")
|
|
Binary file
|
|
@@ -777,7 +777,7 @@ enum VendorStatus {
|
|
|
777
777
|
generator client {
|
|
778
778
|
provider = "prisma-client-js"
|
|
779
779
|
previewFeatures = ["postgresqlExtensions"]
|
|
780
|
-
binaryTargets = ["native", "
|
|
780
|
+
binaryTargets = ["native", "rhel-openssl-3.0.x", "debian-openssl-3.0.x", "linux-musl-openssl-3.0.x"]
|
|
781
781
|
output = "./generated/prisma"
|
|
782
782
|
}
|
|
783
783
|
|
package/dist/schema.prisma
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
generator client {
|
|
2
2
|
provider = "prisma-client-js"
|
|
3
3
|
previewFeatures = ["postgresqlExtensions"]
|
|
4
|
-
binaryTargets = ["native", "
|
|
4
|
+
binaryTargets = ["native", "rhel-openssl-3.0.x", "debian-openssl-3.0.x", "linux-musl-openssl-3.0.x"]
|
|
5
5
|
output = "./generated/prisma"
|
|
6
6
|
}
|
|
7
7
|
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@trycompai/db",
|
|
3
3
|
"description": "Database package with Prisma client and schema for Comp AI",
|
|
4
|
-
"version": "1.2.
|
|
4
|
+
"version": "1.2.7",
|
|
5
5
|
"dependencies": {
|
|
6
6
|
"@prisma/client": "^6.13.0"
|
|
7
7
|
},
|
|
@@ -17,7 +17,7 @@
|
|
|
17
17
|
"dist/generated",
|
|
18
18
|
"dist/schema.prisma",
|
|
19
19
|
"dist/client.ts",
|
|
20
|
-
"dist/index.ts",
|
|
20
|
+
"dist/index.ts",
|
|
21
21
|
"README.md",
|
|
22
22
|
"INTEGRATION_GUIDE.md"
|
|
23
23
|
],
|
|
@@ -30,7 +30,7 @@
|
|
|
30
30
|
"directory": "packages/db"
|
|
31
31
|
},
|
|
32
32
|
"scripts": {
|
|
33
|
-
"
|
|
33
|
+
"build": "rm -rf dist && rm -rf ./prisma/generated && prisma generate && node scripts/combine-schemas.js",
|
|
34
34
|
"check-types": "tsc --noEmit",
|
|
35
35
|
"db:generate": "prisma generate",
|
|
36
36
|
"db:migrate": "prisma migrate dev",
|
|
@@ -40,7 +40,7 @@
|
|
|
40
40
|
"docker:clean": "docker-compose down -v",
|
|
41
41
|
"docker:down": "docker-compose down",
|
|
42
42
|
"docker:up": "docker-compose up -d",
|
|
43
|
-
"
|
|
43
|
+
"lint": "prettier --check 'src/**/*.{ts,tsx,js,jsx,json}' 'prisma/**/*.prisma' && tsc --noEmit",
|
|
44
44
|
"prepublishOnly": "bun run build"
|
|
45
45
|
}
|
|
46
46
|
}
|