@trycompai/db 1.0.0
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/index.d.mts +9 -0
- package/dist/index.d.ts +9 -0
- package/dist/index.js +39 -0
- package/dist/index.mjs +14 -0
- package/dist/prisma/functionDefinition.sql +18 -0
- package/dist/prisma/migrations/20250403163138_init/migration.sql +611 -0
- package/dist/prisma/migrations/20250403165218_archived_on_its_own/migration.sql +29 -0
- package/dist/prisma/migrations/20250403194504_risk_assignee/migration.sql +18 -0
- package/dist/prisma/migrations/20250403201319_tasks_use_asignee/migration.sql +16 -0
- package/dist/prisma/migrations/20250403205655_vendor_assignee/migration.sql +22 -0
- package/dist/prisma/migrations/20250403205840_oops_optional/migration.sql +2 -0
- package/dist/prisma/migrations/20250403210049_task_assignee_optional_too/migration.sql +8 -0
- package/dist/prisma/migrations/20250404004853_stripecustomerid/migration.sql +2 -0
- package/dist/prisma/migrations/20250406004306_added_common_comment_table/migration.sql +20 -0
- package/dist/prisma/migrations/20250410193847_add_unique_constraint_to_artifact_t_table/migration.sql +30 -0
- package/dist/prisma/migrations/20250410193857_remove_published_field_from_evidence/migration.sql +12 -0
- package/dist/prisma/migrations/20250414191353_onboarding_experience/migration.sql +25 -0
- package/dist/prisma/migrations/20250414203443_added_evidence_to_onboarding/migration.sql +2 -0
- package/dist/prisma/migrations/20250417205622_add_global_vendors/migration.sql +26 -0
- package/dist/prisma/migrations/20250417205625_update_task_table_and_comments_and_attachments/migration.sql +86 -0
- package/dist/prisma/migrations/20250417205627_remove_evidence_table/migration.sql +109 -0
- package/dist/prisma/migrations/20250417205629_frequency_task_is_optional/migration.sql +2 -0
- package/dist/prisma/migrations/20250418151856_add_comment_relationship_to_attachment_and_vice_versa/migration.sql +8 -0
- package/dist/prisma/migrations/20250423154259_make_role_string/migration.sql +9 -0
- package/dist/prisma/migrations/20250424165055_update_onboarding_to_use_tasks/migration.sql +9 -0
- package/dist/prisma/migrations/20250424170518_remove_evidence_artifact_type/migration.sql +14 -0
- package/dist/prisma/migrations/20250428202144_add_website_to_organization/migration.sql +2 -0
- package/dist/prisma/migrations/20250429155419_add_company_details_to_onboarding/migration.sql +2 -0
- package/dist/prisma/migrations/20250509160401_added_framework_editor/migration.sql +8 -0
- package/dist/prisma/migrations/20250509162708_init_framework_editor_tables/migration.sql +122 -0
- package/dist/prisma/migrations/20250509172401_drop_slug/migration.sql +11 -0
- package/dist/prisma/migrations/20250509232122_trust_portal/migration.sql +24 -0
- package/dist/prisma/migrations/20250511040043_add_custom_domain_to_trust_portal/migration.sql +2 -0
- package/dist/prisma/migrations/20250511042943_trust_portal_domain_verified/migration.sql +2 -0
- package/dist/prisma/migrations/20250512004633_added_identifier/migration.sql +5 -0
- package/dist/prisma/migrations/20250512115717_added_framework_status/migration.sql +7 -0
- package/dist/prisma/migrations/20250512163351_add_contact_details_trust_portal/migration.sql +2 -0
- package/dist/prisma/migrations/20250514143147_remove_unique_constraint_on_integration_name/migration.sql +2 -0
- package/dist/prisma/migrations/20250514144228_add_vercel_check/migration.sql +2 -0
- package/dist/prisma/migrations/20250514150021_add_vercel_verification/migration.sql +2 -0
- package/dist/prisma/migrations/20250514161440_add_dates_to_framework_editor_tables/migration.sql +23 -0
- package/dist/prisma/migrations/20250515123635_trust_portal_friendly_url/migration.sql +21 -0
- package/dist/prisma/migrations/20250515124040_fix_trust_constraints/migration.sql +11 -0
- package/dist/prisma/migrations/20250516125758_patch_framework_id_in_editor/migration.sql +6 -0
- package/dist/prisma/migrations/20250516132431_add_many_to_many_support_to_tasks/migration.sql +69 -0
- package/dist/prisma/migrations/20250516142234_make_entity_optional/migration.sql +3 -0
- package/dist/prisma/migrations/20250516145149_drop_entity_and_entity_type/migration.sql +16 -0
- package/dist/prisma/migrations/20250516150558_drop_task_type/migration.sql +2 -0
- package/dist/prisma/migrations/20250516160714_insert_hardcoded_framework_to_db/migration.sql +37 -0
- package/dist/prisma/migrations/20250516161852_cast_framework_id_and_requirement_id_to_string/migration.sql +5 -0
- package/dist/prisma/migrations/20250516162324_convert_ids_to_new_format/migration.sql +31 -0
- package/dist/prisma/migrations/20250516162730_convert_framework_id/migration.sql +5 -0
- package/dist/prisma/migrations/20250516163156_added_relation_to_framework_and_requirement_maps/migration.sql +5 -0
- package/dist/prisma/migrations/20250516164307_drop_enums/migration.sql +5 -0
- package/dist/prisma/migrations/20250516194123_add_cal_option/migration.sql +2 -0
- package/dist/prisma/migrations/20250518133218_add_booking_details/migration.sql +2 -0
- package/dist/prisma/migrations/20250519141733_change_framework_id_to_string/migration.sql +3 -0
- package/dist/prisma/migrations/20250519141735_drop_enum_on_requirements_map/migration.sql +2 -0
- package/dist/prisma/migrations/20250519142913_add_template_references_to_instances/migration.sql +17 -0
- package/dist/prisma/migrations/20250519172353_drop_artifacts/migration.sql +56 -0
- package/dist/prisma/migrations/20250519204449_drop_relation_between_controls_and_framewrok_instance/migration.sql +14 -0
- package/dist/prisma/migrations/20250519212347_add_visibility_toggle_to_framework_editor/migration.sql +2 -0
- package/dist/prisma/migrations/20250520152548_add_approver_to_policy/migration.sql +5 -0
- package/dist/prisma/migrations/20250520175109_add_description_to_audit_log_for_convenience/migration.sql +2 -0
- package/dist/prisma/migrations/20250520175523_add_member_id_to_log_table/migration.sql +8 -0
- package/dist/prisma/migrations/20250521140239_add_entity_type_and_id_for_audit_logs_for_easy_filtering/migration.sql +9 -0
- package/dist/prisma/migrations/20250603135046_add_v2_onboarding_requirements/migration.sql +36 -0
- package/dist/prisma/migrations/20250604155610_add_job_id_column_to_onboarding/migration.sql +2 -0
- package/dist/prisma/migrations/20250605151521_make_framework_visibility_false/migration.sql +2 -0
- package/dist/prisma/migrations/20250605184738_add_cascade_to_entities_owned_by_org/migration.sql +29 -0
- package/dist/prisma/migrations/20250605184740_add_device_agent_details_to_org/migration.sql +18 -0
- package/dist/prisma/migrations/20250609130129_add_not_relevant/migration.sql +2 -0
- package/dist/prisma/migrations/20250610215328_add_fleet_label_to_employees/migration.sql +2 -0
- package/dist/prisma/migrations/20250611144654_add_is_fleet_setup_flag/migration.sql +2 -0
- package/dist/prisma/migrations/20250612160731_remove_unused_cols/migration.sql +10 -0
- package/dist/prisma/migrations/20250618001304_add_default_slug/migration.sql +3 -0
- package/dist/prisma/migrations/20250623184529_add_subscription_type/migration.sql +12 -0
- package/dist/prisma/migrations/20250626021946_add_starter_subscription_type/migration.sql +27 -0
- package/dist/prisma/migrations/20250626030206_added_new_subscription_type/migration.sql +2 -0
- package/dist/prisma/migrations/20250627180331_add_onboaridng_field/migration.sql +5 -0
- package/dist/prisma/migrations/20250627180828_rename_completed_col/migration.sql +15 -0
- package/dist/prisma/migrations/20250708152414_add_had_call_col/migration.sql +2 -0
- package/dist/prisma/migrations/20250711201749_update_retool_role_to_edit_had_call_column_in_organization_table/migration.sql +7 -0
- package/dist/prisma/migrations/20250711204234_add_read_permission_for_where_clause_on_retool_role/migration.sql +8 -0
- package/dist/prisma/migrations/20250714153009_remove_stripe_and_add_has_access/migration.sql +31 -0
- package/dist/prisma/migrations/20250715200054_add_perms_for_has_access_for_retool/migration.sql +7 -0
- package/dist/prisma/migrations/migration_lock.toml +3 -0
- package/dist/prisma/randomSecret.sql +12 -0
- package/dist/prisma/schema/attachments.prisma +35 -0
- package/dist/prisma/schema/auth.prisma +122 -0
- package/dist/prisma/schema/comment.prisma +27 -0
- package/dist/prisma/schema/context.prisma +18 -0
- package/dist/prisma/schema/control.prisma +21 -0
- package/dist/prisma/schema/framework-editor.prisma +96 -0
- package/dist/prisma/schema/framework.prisma +14 -0
- package/dist/prisma/schema/integration.prisma +32 -0
- package/dist/prisma/schema/onboarding.prisma +18 -0
- package/dist/prisma/schema/organization.prisma +34 -0
- package/dist/prisma/schema/policy.prisma +32 -0
- package/dist/prisma/schema/requirement.prisma +15 -0
- package/dist/prisma/schema/risk.prisma +57 -0
- package/dist/prisma/schema/shared.prisma +104 -0
- package/dist/prisma/schema/task.prisma +41 -0
- package/dist/prisma/schema/trust.prisma +37 -0
- package/dist/prisma/schema/vendor.prisma +56 -0
- package/dist/prisma/schema.prisma +12 -0
- package/dist/prisma/seed/frameworkEditorSchemas.js +136 -0
- package/dist/prisma/seed/frameworkEditorSchemas.ts +178 -0
- package/dist/prisma/seed/primitives/FrameworkEditorControlTemplate.json +296 -0
- package/dist/prisma/seed/primitives/FrameworkEditorFramework.json +101 -0
- package/dist/prisma/seed/primitives/FrameworkEditorPolicyTemplate.json +6057 -0
- package/dist/prisma/seed/primitives/FrameworkEditorRequirement.json +7841 -0
- package/dist/prisma/seed/primitives/FrameworkEditorTaskTemplate.json +308 -0
- package/dist/prisma/seed/primitives/FrameworkEditorVideo.json +47 -0
- package/dist/prisma/seed/relations/_FrameworkEditorControlTemplateToFrameworkEditorPolicyTemplate.json +178 -0
- package/dist/prisma/seed/relations/_FrameworkEditorControlTemplateToFrameworkEditorRequirement.json +470 -0
- package/dist/prisma/seed/relations/_FrameworkEditorControlTemplateToFrameworkEditorTaskTemplate.json +142 -0
- package/dist/prisma/seed/seed.js +160 -0
- package/dist/prisma/seed/seed.ts +192 -0
- package/dist/types.d.mts +1 -0
- package/dist/types.d.ts +1 -0
- package/dist/types.js +24 -0
- package/dist/types.mjs +2 -0
- package/package.json +75 -0
- package/prisma/functionDefinition.sql +18 -0
- package/prisma/migrations/20250403163138_init/migration.sql +611 -0
- package/prisma/migrations/20250403165218_archived_on_its_own/migration.sql +29 -0
- package/prisma/migrations/20250403194504_risk_assignee/migration.sql +18 -0
- package/prisma/migrations/20250403201319_tasks_use_asignee/migration.sql +16 -0
- package/prisma/migrations/20250403205655_vendor_assignee/migration.sql +22 -0
- package/prisma/migrations/20250403205840_oops_optional/migration.sql +2 -0
- package/prisma/migrations/20250403210049_task_assignee_optional_too/migration.sql +8 -0
- package/prisma/migrations/20250404004853_stripecustomerid/migration.sql +2 -0
- package/prisma/migrations/20250406004306_added_common_comment_table/migration.sql +20 -0
- package/prisma/migrations/20250410193847_add_unique_constraint_to_artifact_t_table/migration.sql +30 -0
- package/prisma/migrations/20250410193857_remove_published_field_from_evidence/migration.sql +12 -0
- package/prisma/migrations/20250414191353_onboarding_experience/migration.sql +25 -0
- package/prisma/migrations/20250414203443_added_evidence_to_onboarding/migration.sql +2 -0
- package/prisma/migrations/20250417205622_add_global_vendors/migration.sql +26 -0
- package/prisma/migrations/20250417205625_update_task_table_and_comments_and_attachments/migration.sql +86 -0
- package/prisma/migrations/20250417205627_remove_evidence_table/migration.sql +109 -0
- package/prisma/migrations/20250417205629_frequency_task_is_optional/migration.sql +2 -0
- package/prisma/migrations/20250418151856_add_comment_relationship_to_attachment_and_vice_versa/migration.sql +8 -0
- package/prisma/migrations/20250423154259_make_role_string/migration.sql +9 -0
- package/prisma/migrations/20250424165055_update_onboarding_to_use_tasks/migration.sql +9 -0
- package/prisma/migrations/20250424170518_remove_evidence_artifact_type/migration.sql +14 -0
- package/prisma/migrations/20250428202144_add_website_to_organization/migration.sql +2 -0
- package/prisma/migrations/20250429155419_add_company_details_to_onboarding/migration.sql +2 -0
- package/prisma/migrations/20250509160401_added_framework_editor/migration.sql +8 -0
- package/prisma/migrations/20250509162708_init_framework_editor_tables/migration.sql +122 -0
- package/prisma/migrations/20250509172401_drop_slug/migration.sql +11 -0
- package/prisma/migrations/20250509232122_trust_portal/migration.sql +24 -0
- package/prisma/migrations/20250511040043_add_custom_domain_to_trust_portal/migration.sql +2 -0
- package/prisma/migrations/20250511042943_trust_portal_domain_verified/migration.sql +2 -0
- package/prisma/migrations/20250512004633_added_identifier/migration.sql +5 -0
- package/prisma/migrations/20250512115717_added_framework_status/migration.sql +7 -0
- package/prisma/migrations/20250512163351_add_contact_details_trust_portal/migration.sql +2 -0
- package/prisma/migrations/20250514143147_remove_unique_constraint_on_integration_name/migration.sql +2 -0
- package/prisma/migrations/20250514144228_add_vercel_check/migration.sql +2 -0
- package/prisma/migrations/20250514150021_add_vercel_verification/migration.sql +2 -0
- package/prisma/migrations/20250514161440_add_dates_to_framework_editor_tables/migration.sql +23 -0
- package/prisma/migrations/20250515123635_trust_portal_friendly_url/migration.sql +21 -0
- package/prisma/migrations/20250515124040_fix_trust_constraints/migration.sql +11 -0
- package/prisma/migrations/20250516125758_patch_framework_id_in_editor/migration.sql +6 -0
- package/prisma/migrations/20250516132431_add_many_to_many_support_to_tasks/migration.sql +69 -0
- package/prisma/migrations/20250516142234_make_entity_optional/migration.sql +3 -0
- package/prisma/migrations/20250516145149_drop_entity_and_entity_type/migration.sql +16 -0
- package/prisma/migrations/20250516150558_drop_task_type/migration.sql +2 -0
- package/prisma/migrations/20250516160714_insert_hardcoded_framework_to_db/migration.sql +37 -0
- package/prisma/migrations/20250516161852_cast_framework_id_and_requirement_id_to_string/migration.sql +5 -0
- package/prisma/migrations/20250516162324_convert_ids_to_new_format/migration.sql +31 -0
- package/prisma/migrations/20250516162730_convert_framework_id/migration.sql +5 -0
- package/prisma/migrations/20250516163156_added_relation_to_framework_and_requirement_maps/migration.sql +5 -0
- package/prisma/migrations/20250516164307_drop_enums/migration.sql +5 -0
- package/prisma/migrations/20250516194123_add_cal_option/migration.sql +2 -0
- package/prisma/migrations/20250518133218_add_booking_details/migration.sql +2 -0
- package/prisma/migrations/20250519141733_change_framework_id_to_string/migration.sql +3 -0
- package/prisma/migrations/20250519141735_drop_enum_on_requirements_map/migration.sql +2 -0
- package/prisma/migrations/20250519142913_add_template_references_to_instances/migration.sql +17 -0
- package/prisma/migrations/20250519172353_drop_artifacts/migration.sql +56 -0
- package/prisma/migrations/20250519204449_drop_relation_between_controls_and_framewrok_instance/migration.sql +14 -0
- package/prisma/migrations/20250519212347_add_visibility_toggle_to_framework_editor/migration.sql +2 -0
- package/prisma/migrations/20250520152548_add_approver_to_policy/migration.sql +5 -0
- package/prisma/migrations/20250520175109_add_description_to_audit_log_for_convenience/migration.sql +2 -0
- package/prisma/migrations/20250520175523_add_member_id_to_log_table/migration.sql +8 -0
- package/prisma/migrations/20250521140239_add_entity_type_and_id_for_audit_logs_for_easy_filtering/migration.sql +9 -0
- package/prisma/migrations/20250603135046_add_v2_onboarding_requirements/migration.sql +36 -0
- package/prisma/migrations/20250604155610_add_job_id_column_to_onboarding/migration.sql +2 -0
- package/prisma/migrations/20250605151521_make_framework_visibility_false/migration.sql +2 -0
- package/prisma/migrations/20250605184738_add_cascade_to_entities_owned_by_org/migration.sql +29 -0
- package/prisma/migrations/20250605184740_add_device_agent_details_to_org/migration.sql +18 -0
- package/prisma/migrations/20250609130129_add_not_relevant/migration.sql +2 -0
- package/prisma/migrations/20250610215328_add_fleet_label_to_employees/migration.sql +2 -0
- package/prisma/migrations/20250611144654_add_is_fleet_setup_flag/migration.sql +2 -0
- package/prisma/migrations/20250612160731_remove_unused_cols/migration.sql +10 -0
- package/prisma/migrations/20250618001304_add_default_slug/migration.sql +3 -0
- package/prisma/migrations/20250623184529_add_subscription_type/migration.sql +12 -0
- package/prisma/migrations/20250626021946_add_starter_subscription_type/migration.sql +27 -0
- package/prisma/migrations/20250626030206_added_new_subscription_type/migration.sql +2 -0
- package/prisma/migrations/20250627180331_add_onboaridng_field/migration.sql +5 -0
- package/prisma/migrations/20250627180828_rename_completed_col/migration.sql +15 -0
- package/prisma/migrations/20250708152414_add_had_call_col/migration.sql +2 -0
- package/prisma/migrations/20250711201749_update_retool_role_to_edit_had_call_column_in_organization_table/migration.sql +7 -0
- package/prisma/migrations/20250711204234_add_read_permission_for_where_clause_on_retool_role/migration.sql +8 -0
- package/prisma/migrations/20250714153009_remove_stripe_and_add_has_access/migration.sql +31 -0
- package/prisma/migrations/20250715200054_add_perms_for_has_access_for_retool/migration.sql +7 -0
- package/prisma/migrations/migration_lock.toml +3 -0
- package/prisma/randomSecret.sql +12 -0
- package/prisma/schema/attachments.prisma +35 -0
- package/prisma/schema/auth.prisma +122 -0
- package/prisma/schema/comment.prisma +27 -0
- package/prisma/schema/context.prisma +18 -0
- package/prisma/schema/control.prisma +21 -0
- package/prisma/schema/framework-editor.prisma +96 -0
- package/prisma/schema/framework.prisma +14 -0
- package/prisma/schema/integration.prisma +32 -0
- package/prisma/schema/onboarding.prisma +18 -0
- package/prisma/schema/organization.prisma +34 -0
- package/prisma/schema/policy.prisma +32 -0
- package/prisma/schema/requirement.prisma +15 -0
- package/prisma/schema/risk.prisma +57 -0
- package/prisma/schema/shared.prisma +104 -0
- package/prisma/schema/task.prisma +41 -0
- package/prisma/schema/trust.prisma +37 -0
- package/prisma/schema/vendor.prisma +56 -0
- package/prisma/schema.prisma +12 -0
- package/prisma/seed/frameworkEditorSchemas.js +136 -0
- package/prisma/seed/frameworkEditorSchemas.ts +178 -0
- package/prisma/seed/primitives/FrameworkEditorControlTemplate.json +296 -0
- package/prisma/seed/primitives/FrameworkEditorFramework.json +101 -0
- package/prisma/seed/primitives/FrameworkEditorPolicyTemplate.json +6057 -0
- package/prisma/seed/primitives/FrameworkEditorRequirement.json +7841 -0
- package/prisma/seed/primitives/FrameworkEditorTaskTemplate.json +308 -0
- package/prisma/seed/primitives/FrameworkEditorVideo.json +47 -0
- package/prisma/seed/relations/_FrameworkEditorControlTemplateToFrameworkEditorPolicyTemplate.json +178 -0
- package/prisma/seed/relations/_FrameworkEditorControlTemplateToFrameworkEditorRequirement.json +470 -0
- package/prisma/seed/relations/_FrameworkEditorControlTemplateToFrameworkEditorTaskTemplate.json +142 -0
- package/prisma/seed/seed.js +160 -0
- package/prisma/seed/seed.ts +192 -0
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
model ApiKey {
|
|
2
|
+
id String @id @default(dbgenerated("generate_prefixed_cuid('apk'::text)"))
|
|
3
|
+
name String
|
|
4
|
+
key String @unique
|
|
5
|
+
salt String?
|
|
6
|
+
createdAt DateTime @default(now())
|
|
7
|
+
expiresAt DateTime?
|
|
8
|
+
lastUsedAt DateTime?
|
|
9
|
+
isActive Boolean @default(true)
|
|
10
|
+
|
|
11
|
+
organization Organization @relation(fields: [organizationId], references: [id], onDelete: Cascade)
|
|
12
|
+
organizationId String
|
|
13
|
+
|
|
14
|
+
@@index([organizationId])
|
|
15
|
+
@@index([key])
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
model AuditLog {
|
|
19
|
+
id String @id @default(dbgenerated("generate_prefixed_cuid('aud'::text)"))
|
|
20
|
+
timestamp DateTime @default(now())
|
|
21
|
+
organizationId String
|
|
22
|
+
userId String
|
|
23
|
+
memberId String?
|
|
24
|
+
data Json
|
|
25
|
+
description String?
|
|
26
|
+
entityId String?
|
|
27
|
+
entityType AuditLogEntityType?
|
|
28
|
+
|
|
29
|
+
organization Organization @relation(fields: [organizationId], references: [id], onDelete: Cascade)
|
|
30
|
+
user User @relation(fields: [userId], references: [id], onDelete: Cascade)
|
|
31
|
+
member Member? @relation(fields: [memberId], references: [id], onDelete: Cascade)
|
|
32
|
+
|
|
33
|
+
@@index([userId])
|
|
34
|
+
@@index([organizationId])
|
|
35
|
+
@@index([memberId])
|
|
36
|
+
@@index([entityType])
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
enum AuditLogEntityType {
|
|
40
|
+
organization
|
|
41
|
+
framework
|
|
42
|
+
requirement
|
|
43
|
+
control
|
|
44
|
+
policy
|
|
45
|
+
task
|
|
46
|
+
people
|
|
47
|
+
risk
|
|
48
|
+
vendor
|
|
49
|
+
tests
|
|
50
|
+
integration
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
model GlobalVendors {
|
|
54
|
+
website String @id @unique
|
|
55
|
+
company_name String?
|
|
56
|
+
legal_name String?
|
|
57
|
+
company_description String?
|
|
58
|
+
company_hq_address String?
|
|
59
|
+
privacy_policy_url String?
|
|
60
|
+
terms_of_service_url String?
|
|
61
|
+
service_level_agreement_url String?
|
|
62
|
+
security_page_url String?
|
|
63
|
+
trust_page_url String?
|
|
64
|
+
security_certifications String[]
|
|
65
|
+
subprocessors String[]
|
|
66
|
+
type_of_company String?
|
|
67
|
+
|
|
68
|
+
approved Boolean @default(false)
|
|
69
|
+
createdAt DateTime @default(now())
|
|
70
|
+
|
|
71
|
+
@@index([website])
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
enum Departments {
|
|
75
|
+
none
|
|
76
|
+
admin
|
|
77
|
+
gov
|
|
78
|
+
hr
|
|
79
|
+
it
|
|
80
|
+
itsm
|
|
81
|
+
qms
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
enum Frequency {
|
|
85
|
+
monthly
|
|
86
|
+
quarterly
|
|
87
|
+
yearly
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
enum Likelihood {
|
|
91
|
+
very_unlikely
|
|
92
|
+
unlikely
|
|
93
|
+
possible
|
|
94
|
+
likely
|
|
95
|
+
very_likely
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
enum Impact {
|
|
99
|
+
insignificant
|
|
100
|
+
minor
|
|
101
|
+
moderate
|
|
102
|
+
major
|
|
103
|
+
severe
|
|
104
|
+
}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
model Task {
|
|
2
|
+
// Metadata
|
|
3
|
+
id String @id @default(dbgenerated("generate_prefixed_cuid('tsk'::text)"))
|
|
4
|
+
title String
|
|
5
|
+
description String
|
|
6
|
+
status TaskStatus @default(todo)
|
|
7
|
+
frequency TaskFrequency?
|
|
8
|
+
department Departments? @default(none)
|
|
9
|
+
order Int @default(0)
|
|
10
|
+
|
|
11
|
+
// Dates
|
|
12
|
+
createdAt DateTime @default(now())
|
|
13
|
+
updatedAt DateTime @updatedAt
|
|
14
|
+
lastCompletedAt DateTime?
|
|
15
|
+
|
|
16
|
+
// Relationships
|
|
17
|
+
controls Control[]
|
|
18
|
+
vendors Vendor[]
|
|
19
|
+
risks Risk[]
|
|
20
|
+
assigneeId String?
|
|
21
|
+
assignee Member? @relation(fields: [assigneeId], references: [id])
|
|
22
|
+
organizationId String
|
|
23
|
+
organization Organization @relation(fields: [organizationId], references: [id], onDelete: Cascade)
|
|
24
|
+
taskTemplateId String?
|
|
25
|
+
taskTemplate FrameworkEditorTaskTemplate? @relation(fields: [taskTemplateId], references: [id])
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
enum TaskStatus {
|
|
29
|
+
todo
|
|
30
|
+
in_progress
|
|
31
|
+
done
|
|
32
|
+
not_relevant
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
enum TaskFrequency {
|
|
36
|
+
daily
|
|
37
|
+
weekly
|
|
38
|
+
monthly
|
|
39
|
+
quarterly
|
|
40
|
+
yearly
|
|
41
|
+
}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
model Trust {
|
|
2
|
+
organizationId String
|
|
3
|
+
organization Organization @relation(fields: [organizationId], references: [id], onDelete: Cascade)
|
|
4
|
+
friendlyUrl String? @unique
|
|
5
|
+
domain String?
|
|
6
|
+
domainVerified Boolean @default(false)
|
|
7
|
+
isVercelDomain Boolean @default(false)
|
|
8
|
+
vercelVerification String?
|
|
9
|
+
status TrustStatus @default(draft)
|
|
10
|
+
contactEmail String?
|
|
11
|
+
|
|
12
|
+
email String?
|
|
13
|
+
privacyPolicy String?
|
|
14
|
+
soc2 Boolean @default(false)
|
|
15
|
+
iso27001 Boolean @default(false)
|
|
16
|
+
gdpr Boolean @default(false)
|
|
17
|
+
|
|
18
|
+
soc2_status FrameworkStatus @default(started)
|
|
19
|
+
iso27001_status FrameworkStatus @default(started)
|
|
20
|
+
gdpr_status FrameworkStatus @default(started)
|
|
21
|
+
|
|
22
|
+
@@id([status, organizationId])
|
|
23
|
+
@@unique([organizationId])
|
|
24
|
+
@@index([organizationId])
|
|
25
|
+
@@index([friendlyUrl])
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
enum TrustStatus {
|
|
29
|
+
draft
|
|
30
|
+
published
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
enum FrameworkStatus {
|
|
34
|
+
started
|
|
35
|
+
in_progress
|
|
36
|
+
compliant
|
|
37
|
+
}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
model Vendor {
|
|
2
|
+
id String @id @default(dbgenerated("generate_prefixed_cuid('vnd'::text)"))
|
|
3
|
+
name String
|
|
4
|
+
description String
|
|
5
|
+
category VendorCategory @default(other)
|
|
6
|
+
status VendorStatus @default(not_assessed)
|
|
7
|
+
inherentProbability Likelihood @default(very_unlikely)
|
|
8
|
+
inherentImpact Impact @default(insignificant)
|
|
9
|
+
residualProbability Likelihood @default(very_unlikely)
|
|
10
|
+
residualImpact Impact @default(insignificant)
|
|
11
|
+
website String?
|
|
12
|
+
|
|
13
|
+
createdAt DateTime @default(now())
|
|
14
|
+
updatedAt DateTime @updatedAt
|
|
15
|
+
|
|
16
|
+
organizationId String
|
|
17
|
+
organization Organization @relation(fields: [organizationId], references: [id], onDelete: Cascade)
|
|
18
|
+
assigneeId String?
|
|
19
|
+
assignee Member? @relation(fields: [assigneeId], references: [id], onDelete: Cascade)
|
|
20
|
+
contacts VendorContact[]
|
|
21
|
+
tasks Task[]
|
|
22
|
+
|
|
23
|
+
@@index([organizationId])
|
|
24
|
+
@@index([assigneeId])
|
|
25
|
+
@@index([category])
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
model VendorContact {
|
|
29
|
+
id String @id @default(dbgenerated("generate_prefixed_cuid('vct'::text)"))
|
|
30
|
+
vendorId String
|
|
31
|
+
name String
|
|
32
|
+
email String
|
|
33
|
+
phone String
|
|
34
|
+
createdAt DateTime @default(now())
|
|
35
|
+
updatedAt DateTime @updatedAt
|
|
36
|
+
Vendor Vendor @relation(fields: [vendorId], references: [id], onDelete: Cascade)
|
|
37
|
+
|
|
38
|
+
@@index([vendorId])
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
enum VendorCategory {
|
|
42
|
+
cloud
|
|
43
|
+
infrastructure
|
|
44
|
+
software_as_a_service
|
|
45
|
+
finance
|
|
46
|
+
marketing
|
|
47
|
+
sales
|
|
48
|
+
hr
|
|
49
|
+
other
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
enum VendorStatus {
|
|
53
|
+
not_assessed
|
|
54
|
+
in_progress
|
|
55
|
+
assessed
|
|
56
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
generator client {
|
|
2
|
+
provider = "prisma-client-js"
|
|
3
|
+
previewFeatures = ["driverAdapters", "postgresqlExtensions", "prismaSchemaFolder"]
|
|
4
|
+
binaryTargets = ["native", "debian-openssl-3.0.x", "linux-musl-openssl-3.0.x"]
|
|
5
|
+
}
|
|
6
|
+
|
|
7
|
+
datasource db {
|
|
8
|
+
provider = "postgresql"
|
|
9
|
+
url = env("DATABASE_URL")
|
|
10
|
+
directUrl = env("DATABASE_URL")
|
|
11
|
+
extensions = [pgcrypto]
|
|
12
|
+
}
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.frameworkEditorModelSchemas = exports.FrameworkEditorControlTemplateSchema = exports.FrameworkEditorTaskTemplateSchema = exports.FrameworkEditorPolicyTemplateSchema = exports.FrameworkEditorRequirementSchema = exports.FrameworkEditorFrameworkSchema = exports.FrameworkEditorVideoSchema = void 0;
|
|
4
|
+
const zod_1 = require("zod");
|
|
5
|
+
// Assuming Frequency and Departments enums are defined elsewhere and imported
|
|
6
|
+
// For now, we'll use z.string() as a placeholder if their definitions aren't available.
|
|
7
|
+
// import { Frequency, Departments } from './path-to-shared-enums'; // Example import
|
|
8
|
+
const datePreprocess = (arg) => {
|
|
9
|
+
if (typeof arg === 'string' && /^\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}\.\d{3}$/.test(arg)) {
|
|
10
|
+
return arg.replace(' ', 'T') + 'Z';
|
|
11
|
+
}
|
|
12
|
+
return arg;
|
|
13
|
+
};
|
|
14
|
+
exports.FrameworkEditorVideoSchema = zod_1.z.object({
|
|
15
|
+
id: zod_1.z.string().optional(), // @id @default
|
|
16
|
+
title: zod_1.z.string(),
|
|
17
|
+
description: zod_1.z.string(),
|
|
18
|
+
youtubeId: zod_1.z.string(),
|
|
19
|
+
url: zod_1.z.string(),
|
|
20
|
+
createdAt: zod_1.z
|
|
21
|
+
.preprocess(datePreprocess, zod_1.z.string().datetime({
|
|
22
|
+
message: 'Invalid datetime string for createdAt. Expected ISO 8601 format.',
|
|
23
|
+
}))
|
|
24
|
+
.optional(), // @default(now())
|
|
25
|
+
updatedAt: zod_1.z
|
|
26
|
+
.preprocess(datePreprocess, zod_1.z.string().datetime({
|
|
27
|
+
message: 'Invalid datetime string for updatedAt. Expected ISO 8601 format.',
|
|
28
|
+
}))
|
|
29
|
+
.optional(), // @default(now()) @updatedAt
|
|
30
|
+
});
|
|
31
|
+
exports.FrameworkEditorFrameworkSchema = zod_1.z.object({
|
|
32
|
+
id: zod_1.z.string().optional(), // @id @default
|
|
33
|
+
name: zod_1.z.string(),
|
|
34
|
+
version: zod_1.z.string(),
|
|
35
|
+
description: zod_1.z.string(),
|
|
36
|
+
visible: zod_1.z.boolean().optional(), // @default(true)
|
|
37
|
+
// requirements: FrameworkEditorRequirement[] - relational, omitted
|
|
38
|
+
// frameworkInstances: FrameworkInstance[] - relational, omitted
|
|
39
|
+
createdAt: zod_1.z
|
|
40
|
+
.preprocess(datePreprocess, zod_1.z.string().datetime({
|
|
41
|
+
message: 'Invalid datetime string for createdAt. Expected ISO 8601 format.',
|
|
42
|
+
}))
|
|
43
|
+
.optional(), // @default(now())
|
|
44
|
+
updatedAt: zod_1.z
|
|
45
|
+
.preprocess(datePreprocess, zod_1.z.string().datetime({
|
|
46
|
+
message: 'Invalid datetime string for updatedAt. Expected ISO 8601 format.',
|
|
47
|
+
}))
|
|
48
|
+
.optional(), // @default(now()) @updatedAt
|
|
49
|
+
});
|
|
50
|
+
exports.FrameworkEditorRequirementSchema = zod_1.z.object({
|
|
51
|
+
id: zod_1.z.string().optional(), // @id @default
|
|
52
|
+
frameworkId: zod_1.z.string(),
|
|
53
|
+
// framework: FrameworkEditorFramework - relational, omitted
|
|
54
|
+
name: zod_1.z.string(),
|
|
55
|
+
identifier: zod_1.z.string().optional(), // @default("")
|
|
56
|
+
description: zod_1.z.string(),
|
|
57
|
+
// controlTemplates: FrameworkEditorControlTemplate[] - relational, omitted
|
|
58
|
+
// requirementMaps: RequirementMap[] - relational, omitted
|
|
59
|
+
createdAt: zod_1.z
|
|
60
|
+
.preprocess(datePreprocess, zod_1.z.string().datetime({
|
|
61
|
+
message: 'Invalid datetime string for createdAt. Expected ISO 8601 format.',
|
|
62
|
+
}))
|
|
63
|
+
.optional(), // @default(now())
|
|
64
|
+
updatedAt: zod_1.z
|
|
65
|
+
.preprocess(datePreprocess, zod_1.z.string().datetime({
|
|
66
|
+
message: 'Invalid datetime string for updatedAt. Expected ISO 8601 format.',
|
|
67
|
+
}))
|
|
68
|
+
.optional(), // @default(now()) @updatedAt
|
|
69
|
+
});
|
|
70
|
+
exports.FrameworkEditorPolicyTemplateSchema = zod_1.z.object({
|
|
71
|
+
id: zod_1.z.string().optional(), // @id @default
|
|
72
|
+
name: zod_1.z.string(),
|
|
73
|
+
description: zod_1.z.string(),
|
|
74
|
+
frequency: zod_1.z.string(), // Placeholder for Frequency enum
|
|
75
|
+
department: zod_1.z.string(), // Placeholder for Departments enum
|
|
76
|
+
content: zod_1.z.any(), // Json
|
|
77
|
+
// controlTemplates: FrameworkEditorControlTemplate[] - relational, omitted
|
|
78
|
+
createdAt: zod_1.z
|
|
79
|
+
.preprocess(datePreprocess, zod_1.z.string().datetime({
|
|
80
|
+
message: 'Invalid datetime string for createdAt. Expected ISO 8601 format.',
|
|
81
|
+
}))
|
|
82
|
+
.optional(), // @default(now())
|
|
83
|
+
updatedAt: zod_1.z
|
|
84
|
+
.preprocess(datePreprocess, zod_1.z.string().datetime({
|
|
85
|
+
message: 'Invalid datetime string for updatedAt. Expected ISO 8601 format.',
|
|
86
|
+
}))
|
|
87
|
+
.optional(), // @default(now()) @updatedAt
|
|
88
|
+
// policies: Policy[] - relational, omitted
|
|
89
|
+
});
|
|
90
|
+
exports.FrameworkEditorTaskTemplateSchema = zod_1.z.object({
|
|
91
|
+
id: zod_1.z.string().optional(), // @id @default
|
|
92
|
+
name: zod_1.z.string(),
|
|
93
|
+
description: zod_1.z.string(),
|
|
94
|
+
frequency: zod_1.z.string(), // Placeholder for Frequency enum
|
|
95
|
+
department: zod_1.z.string(), // Placeholder for Departments enum
|
|
96
|
+
// controlTemplates: FrameworkEditorControlTemplate[] - relational, omitted
|
|
97
|
+
createdAt: zod_1.z
|
|
98
|
+
.preprocess(datePreprocess, zod_1.z.string().datetime({
|
|
99
|
+
message: 'Invalid datetime string for createdAt. Expected ISO 8601 format.',
|
|
100
|
+
}))
|
|
101
|
+
.optional(), // @default(now())
|
|
102
|
+
updatedAt: zod_1.z
|
|
103
|
+
.preprocess(datePreprocess, zod_1.z.string().datetime({
|
|
104
|
+
message: 'Invalid datetime string for updatedAt. Expected ISO 8601 format.',
|
|
105
|
+
}))
|
|
106
|
+
.optional(), // @default(now()) @updatedAt
|
|
107
|
+
// tasks: Task[] - relational, omitted
|
|
108
|
+
});
|
|
109
|
+
exports.FrameworkEditorControlTemplateSchema = zod_1.z.object({
|
|
110
|
+
id: zod_1.z.string().optional(), // @id @default
|
|
111
|
+
name: zod_1.z.string(),
|
|
112
|
+
description: zod_1.z.string(),
|
|
113
|
+
// policyTemplates: FrameworkEditorPolicyTemplate[] - relational, omitted
|
|
114
|
+
// requirements: FrameworkEditorRequirement[] - relational, omitted
|
|
115
|
+
// taskTemplates: FrameworkEditorTaskTemplate[] - relational, omitted
|
|
116
|
+
createdAt: zod_1.z
|
|
117
|
+
.preprocess(datePreprocess, zod_1.z.string().datetime({
|
|
118
|
+
message: 'Invalid datetime string for createdAt. Expected ISO 8601 format.',
|
|
119
|
+
}))
|
|
120
|
+
.optional(), // @default(now())
|
|
121
|
+
updatedAt: zod_1.z
|
|
122
|
+
.preprocess(datePreprocess, zod_1.z.string().datetime({
|
|
123
|
+
message: 'Invalid datetime string for updatedAt. Expected ISO 8601 format.',
|
|
124
|
+
}))
|
|
125
|
+
.optional(), // @default(now()) @updatedAt
|
|
126
|
+
// controls: Control[] - relational, omitted
|
|
127
|
+
});
|
|
128
|
+
// For use in seed script validation
|
|
129
|
+
exports.frameworkEditorModelSchemas = {
|
|
130
|
+
FrameworkEditorVideo: exports.FrameworkEditorVideoSchema,
|
|
131
|
+
FrameworkEditorFramework: exports.FrameworkEditorFrameworkSchema,
|
|
132
|
+
FrameworkEditorRequirement: exports.FrameworkEditorRequirementSchema,
|
|
133
|
+
FrameworkEditorPolicyTemplate: exports.FrameworkEditorPolicyTemplateSchema,
|
|
134
|
+
FrameworkEditorTaskTemplate: exports.FrameworkEditorTaskTemplateSchema,
|
|
135
|
+
FrameworkEditorControlTemplate: exports.FrameworkEditorControlTemplateSchema,
|
|
136
|
+
};
|
|
@@ -0,0 +1,178 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
|
|
3
|
+
// Assuming Frequency and Departments enums are defined elsewhere and imported
|
|
4
|
+
// For now, we'll use z.string() as a placeholder if their definitions aren't available.
|
|
5
|
+
// import { Frequency, Departments } from './path-to-shared-enums'; // Example import
|
|
6
|
+
|
|
7
|
+
const datePreprocess = (arg: unknown) => {
|
|
8
|
+
if (typeof arg === 'string' && /^\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}\.\d{3}$/.test(arg)) {
|
|
9
|
+
return arg.replace(' ', 'T') + 'Z';
|
|
10
|
+
}
|
|
11
|
+
return arg;
|
|
12
|
+
};
|
|
13
|
+
|
|
14
|
+
export const FrameworkEditorVideoSchema = z.object({
|
|
15
|
+
id: z.string().optional(), // @id @default
|
|
16
|
+
title: z.string(),
|
|
17
|
+
description: z.string(),
|
|
18
|
+
youtubeId: z.string(),
|
|
19
|
+
url: z.string(),
|
|
20
|
+
createdAt: z
|
|
21
|
+
.preprocess(
|
|
22
|
+
datePreprocess,
|
|
23
|
+
z.string().datetime({
|
|
24
|
+
message: 'Invalid datetime string for createdAt. Expected ISO 8601 format.',
|
|
25
|
+
}),
|
|
26
|
+
)
|
|
27
|
+
.optional(), // @default(now())
|
|
28
|
+
updatedAt: z
|
|
29
|
+
.preprocess(
|
|
30
|
+
datePreprocess,
|
|
31
|
+
z.string().datetime({
|
|
32
|
+
message: 'Invalid datetime string for updatedAt. Expected ISO 8601 format.',
|
|
33
|
+
}),
|
|
34
|
+
)
|
|
35
|
+
.optional(), // @default(now()) @updatedAt
|
|
36
|
+
});
|
|
37
|
+
|
|
38
|
+
export const FrameworkEditorFrameworkSchema = z.object({
|
|
39
|
+
id: z.string().optional(), // @id @default
|
|
40
|
+
name: z.string(),
|
|
41
|
+
version: z.string(),
|
|
42
|
+
description: z.string(),
|
|
43
|
+
visible: z.boolean().optional(), // @default(true)
|
|
44
|
+
// requirements: FrameworkEditorRequirement[] - relational, omitted
|
|
45
|
+
// frameworkInstances: FrameworkInstance[] - relational, omitted
|
|
46
|
+
createdAt: z
|
|
47
|
+
.preprocess(
|
|
48
|
+
datePreprocess,
|
|
49
|
+
z.string().datetime({
|
|
50
|
+
message: 'Invalid datetime string for createdAt. Expected ISO 8601 format.',
|
|
51
|
+
}),
|
|
52
|
+
)
|
|
53
|
+
.optional(), // @default(now())
|
|
54
|
+
updatedAt: z
|
|
55
|
+
.preprocess(
|
|
56
|
+
datePreprocess,
|
|
57
|
+
z.string().datetime({
|
|
58
|
+
message: 'Invalid datetime string for updatedAt. Expected ISO 8601 format.',
|
|
59
|
+
}),
|
|
60
|
+
)
|
|
61
|
+
.optional(), // @default(now()) @updatedAt
|
|
62
|
+
});
|
|
63
|
+
|
|
64
|
+
export const FrameworkEditorRequirementSchema = z.object({
|
|
65
|
+
id: z.string().optional(), // @id @default
|
|
66
|
+
frameworkId: z.string(),
|
|
67
|
+
// framework: FrameworkEditorFramework - relational, omitted
|
|
68
|
+
name: z.string(),
|
|
69
|
+
identifier: z.string().optional(), // @default("")
|
|
70
|
+
description: z.string(),
|
|
71
|
+
// controlTemplates: FrameworkEditorControlTemplate[] - relational, omitted
|
|
72
|
+
// requirementMaps: RequirementMap[] - relational, omitted
|
|
73
|
+
createdAt: z
|
|
74
|
+
.preprocess(
|
|
75
|
+
datePreprocess,
|
|
76
|
+
z.string().datetime({
|
|
77
|
+
message: 'Invalid datetime string for createdAt. Expected ISO 8601 format.',
|
|
78
|
+
}),
|
|
79
|
+
)
|
|
80
|
+
.optional(), // @default(now())
|
|
81
|
+
updatedAt: z
|
|
82
|
+
.preprocess(
|
|
83
|
+
datePreprocess,
|
|
84
|
+
z.string().datetime({
|
|
85
|
+
message: 'Invalid datetime string for updatedAt. Expected ISO 8601 format.',
|
|
86
|
+
}),
|
|
87
|
+
)
|
|
88
|
+
.optional(), // @default(now()) @updatedAt
|
|
89
|
+
});
|
|
90
|
+
|
|
91
|
+
export const FrameworkEditorPolicyTemplateSchema = z.object({
|
|
92
|
+
id: z.string().optional(), // @id @default
|
|
93
|
+
name: z.string(),
|
|
94
|
+
description: z.string(),
|
|
95
|
+
frequency: z.string(), // Placeholder for Frequency enum
|
|
96
|
+
department: z.string(), // Placeholder for Departments enum
|
|
97
|
+
content: z.any(), // Json
|
|
98
|
+
// controlTemplates: FrameworkEditorControlTemplate[] - relational, omitted
|
|
99
|
+
createdAt: z
|
|
100
|
+
.preprocess(
|
|
101
|
+
datePreprocess,
|
|
102
|
+
z.string().datetime({
|
|
103
|
+
message: 'Invalid datetime string for createdAt. Expected ISO 8601 format.',
|
|
104
|
+
}),
|
|
105
|
+
)
|
|
106
|
+
.optional(), // @default(now())
|
|
107
|
+
updatedAt: z
|
|
108
|
+
.preprocess(
|
|
109
|
+
datePreprocess,
|
|
110
|
+
z.string().datetime({
|
|
111
|
+
message: 'Invalid datetime string for updatedAt. Expected ISO 8601 format.',
|
|
112
|
+
}),
|
|
113
|
+
)
|
|
114
|
+
.optional(), // @default(now()) @updatedAt
|
|
115
|
+
// policies: Policy[] - relational, omitted
|
|
116
|
+
});
|
|
117
|
+
|
|
118
|
+
export const FrameworkEditorTaskTemplateSchema = z.object({
|
|
119
|
+
id: z.string().optional(), // @id @default
|
|
120
|
+
name: z.string(),
|
|
121
|
+
description: z.string(),
|
|
122
|
+
frequency: z.string(), // Placeholder for Frequency enum
|
|
123
|
+
department: z.string(), // Placeholder for Departments enum
|
|
124
|
+
// controlTemplates: FrameworkEditorControlTemplate[] - relational, omitted
|
|
125
|
+
createdAt: z
|
|
126
|
+
.preprocess(
|
|
127
|
+
datePreprocess,
|
|
128
|
+
z.string().datetime({
|
|
129
|
+
message: 'Invalid datetime string for createdAt. Expected ISO 8601 format.',
|
|
130
|
+
}),
|
|
131
|
+
)
|
|
132
|
+
.optional(), // @default(now())
|
|
133
|
+
updatedAt: z
|
|
134
|
+
.preprocess(
|
|
135
|
+
datePreprocess,
|
|
136
|
+
z.string().datetime({
|
|
137
|
+
message: 'Invalid datetime string for updatedAt. Expected ISO 8601 format.',
|
|
138
|
+
}),
|
|
139
|
+
)
|
|
140
|
+
.optional(), // @default(now()) @updatedAt
|
|
141
|
+
// tasks: Task[] - relational, omitted
|
|
142
|
+
});
|
|
143
|
+
|
|
144
|
+
export const FrameworkEditorControlTemplateSchema = z.object({
|
|
145
|
+
id: z.string().optional(), // @id @default
|
|
146
|
+
name: z.string(),
|
|
147
|
+
description: z.string(),
|
|
148
|
+
// policyTemplates: FrameworkEditorPolicyTemplate[] - relational, omitted
|
|
149
|
+
// requirements: FrameworkEditorRequirement[] - relational, omitted
|
|
150
|
+
// taskTemplates: FrameworkEditorTaskTemplate[] - relational, omitted
|
|
151
|
+
createdAt: z
|
|
152
|
+
.preprocess(
|
|
153
|
+
datePreprocess,
|
|
154
|
+
z.string().datetime({
|
|
155
|
+
message: 'Invalid datetime string for createdAt. Expected ISO 8601 format.',
|
|
156
|
+
}),
|
|
157
|
+
)
|
|
158
|
+
.optional(), // @default(now())
|
|
159
|
+
updatedAt: z
|
|
160
|
+
.preprocess(
|
|
161
|
+
datePreprocess,
|
|
162
|
+
z.string().datetime({
|
|
163
|
+
message: 'Invalid datetime string for updatedAt. Expected ISO 8601 format.',
|
|
164
|
+
}),
|
|
165
|
+
)
|
|
166
|
+
.optional(), // @default(now()) @updatedAt
|
|
167
|
+
// controls: Control[] - relational, omitted
|
|
168
|
+
});
|
|
169
|
+
|
|
170
|
+
// For use in seed script validation
|
|
171
|
+
export const frameworkEditorModelSchemas = {
|
|
172
|
+
FrameworkEditorVideo: FrameworkEditorVideoSchema,
|
|
173
|
+
FrameworkEditorFramework: FrameworkEditorFrameworkSchema,
|
|
174
|
+
FrameworkEditorRequirement: FrameworkEditorRequirementSchema,
|
|
175
|
+
FrameworkEditorPolicyTemplate: FrameworkEditorPolicyTemplateSchema,
|
|
176
|
+
FrameworkEditorTaskTemplate: FrameworkEditorTaskTemplateSchema,
|
|
177
|
+
FrameworkEditorControlTemplate: FrameworkEditorControlTemplateSchema,
|
|
178
|
+
};
|