use crate::audit::{ActorRef, AuditInfo, ChangeReason, RefLink, SourceKind}; use crate::ids::{ AgentSessionId, AssetId, AssetVersionId, BlockId, CommandLogId, EventId, PageId, ReferenceId, TaskId, WorkspaceId, }; use crate::time::Timestamp; use crate::types::{Locale, Revision}; #[derive(Debug, Clone, PartialEq, Eq)] pub struct Workspace { pub workspace_id: WorkspaceId, pub slug: String, pub title: String, pub owner_actor_id: String, pub default_locale: Locale, pub storage_policy: String, pub sync_policy: String, pub feature_flags: Vec, pub archived_at: Option, pub audit: AuditInfo, } #[derive(Debug, Clone, PartialEq, Eq)] pub enum PageType { Note, Doc, DatabaseRecord, Inbox, Template, System, } #[derive(Debug, Clone, PartialEq, Eq)] pub enum PageStatus { Active, Archived, Deleted, } #[derive(Debug, Clone, PartialEq, Eq)] pub struct Page { pub page_id: PageId, pub workspace_id: WorkspaceId, pub parent_page_id: Option, pub title: String, pub slug: String, pub icon: Option, pub cover_asset_id: Option, pub body_root_block_id: Option, pub page_type: PageType, pub status: PageStatus, pub last_edited_at: Option, pub last_edited_by: Option, pub current_revision: Revision, pub audit: AuditInfo, } #[derive(Debug, Clone, PartialEq, Eq)] pub enum BlockType { Paragraph, Heading, BulletedListItem, NumberedListItem, Todo, Quote, CodeBlock, Divider, Callout, PageReference, BlockReference, EmbedAsset, EmbedView, EmbedOnlyoffice, EmbedMindmap, EmbedTable, Custom(String), } #[derive(Debug, Clone, PartialEq, Eq)] pub struct Block { pub block_id: BlockId, pub workspace_id: WorkspaceId, pub page_id: PageId, pub parent_block_id: Option, pub prev_block_id: Option, pub next_block_id: Option, pub sort_key: String, pub block_type: BlockType, pub content: String, pub props: Vec<(String, String)>, pub annotations: Vec, pub status: String, pub revision: Revision, pub deleted_at: Option, pub audit: AuditInfo, } #[derive(Debug, Clone, PartialEq, Eq)] pub enum AssetKind { Image, Office, Pdf, Audio, Video, Export, OcrDerived, Other(String), } #[derive(Debug, Clone, PartialEq, Eq)] pub enum AssetStatus { Active, Archived, Deleted, } #[derive(Debug, Clone, PartialEq, Eq)] pub struct Asset { pub asset_id: AssetId, pub workspace_id: WorkspaceId, pub storage_key: String, pub original_name: String, pub mime_type: String, pub size_bytes: u64, pub checksum: Option, pub origin: String, pub asset_kind: AssetKind, pub status: AssetStatus, pub latest_version_id: Option, pub audit: AuditInfo, } #[derive(Debug, Clone, PartialEq, Eq)] pub struct AssetVersion { pub asset_version_id: AssetVersionId, pub asset_id: AssetId, pub version_no: u32, pub storage_key: String, pub checksum: Option, pub derived_from_version_id: Option, pub change_reason: Option, pub created_at: Timestamp, pub created_by: Option, } #[derive(Debug, Clone, PartialEq, Eq)] pub enum ReferenceKind { PageToPage, BlockToBlock, BlockToPage, BlockToAssetFragment, TaskToObject, External, } #[derive(Debug, Clone, PartialEq, Eq)] pub struct Reference { pub reference_id: ReferenceId, pub workspace_id: WorkspaceId, pub source_object_type: String, pub source_object_id: String, pub target_object_type: String, pub target_object_id: String, pub anchor: String, pub label: Option, pub snippet: Option, pub confidence: Option, pub ref_kind: ReferenceKind, pub created_at: Timestamp, pub created_by: Option, } #[derive(Debug, Clone, PartialEq, Eq)] pub enum TaskType { Import, Ocr, Summary, Reindex, Sync, Transform, Other(String), } #[derive(Debug, Clone, PartialEq, Eq)] pub enum TaskStatus { Pending, Running, Succeeded, Failed, Cancelled, } #[derive(Debug, Clone, PartialEq, Eq)] pub enum TaskPriority { Low, Normal, High, Critical, } #[derive(Debug, Clone, PartialEq, Eq)] pub struct Task { pub task_id: TaskId, pub workspace_id: WorkspaceId, pub title: String, pub description: Option, pub task_type: TaskType, pub status: TaskStatus, pub priority: TaskPriority, pub assignee_actor_id: Option, pub source_page_id: Option, pub source_block_id: Option, pub input_payload: Option, pub output_payload: Option, pub due_at: Option, pub completed_at: Option, pub audit: AuditInfo, } #[derive(Debug, Clone, PartialEq, Eq)] pub struct AgentSession { pub agent_session_id: AgentSessionId, pub workspace_id: WorkspaceId, pub provider: String, pub model: String, pub initiator_actor_id: Option, pub status: String, pub started_at: Timestamp, pub updated_at: Timestamp, pub ended_at: Option, pub tool_policy: Option, pub confirmation_policy: Option, pub summary: Option, } #[derive(Debug, Clone, PartialEq, Eq)] pub enum CommandStatus { Pending, Succeeded, Failed, Cancelled, } #[derive(Debug, Clone, PartialEq, Eq)] pub struct CommandLog { pub command_log_id: CommandLogId, pub workspace_id: WorkspaceId, pub command_name: String, pub actor: ActorRef, pub source: SourceKind, pub target_objects: Vec, pub payload_summary: String, pub refs: Vec, pub idempotency_key: Option, pub dry_run: bool, pub status: CommandStatus, pub created_at: Timestamp, pub finished_at: Option, pub error_code: Option, pub error_message: Option, } #[derive(Debug, Clone, PartialEq, Eq)] pub enum EventType { PageCreated, PageUpdated, BlockInserted, BlockMoved, BlockUpdated, BlockDeleted, AssetVersionAdded, ReferenceCreated, TaskUpdated, Other(String), } #[derive(Debug, Clone, PartialEq, Eq)] pub struct DomainEvent { pub event_id: EventId, pub workspace_id: WorkspaceId, pub command_log_id: CommandLogId, pub aggregate_type: String, pub aggregate_id: String, pub event_type: EventType, pub before_revision: Option, pub after_revision: Option, pub payload_json: String, pub created_at: Timestamp, }