//! Cot ORM models. UUIDs and typed documents use portable string storage in Cot 0.7. use chrono::{DateTime, Utc}; use cot::db::{Auto, model}; #[derive(Debug, Clone)] #[model(table_name = "users")] pub struct UserRow { pub language: Option, pub demo_deleted_at: Option>, #[model(primary_key)] pub id: String, #[model(unique)] pub username: String, pub display_name: String, pub country: String, pub timezone: Option, /// None for accounts that sign in only through SSO or whose bootstrap access was removed. pub password_hash: Option, pub created_at: DateTime, pub email: Option, pub instance_admin: bool, pub bootstrap: bool, /// JSON array of group names that map to workspace roles through the instance configuration. pub groups: String, } #[derive(Debug, Clone)] #[model(table_name = "external_identities")] pub struct ExternalIdentityRow { #[model(primary_key)] pub id: String, pub issuer: String, pub subject: String, pub user_id: String, } #[derive(Debug, Clone)] #[model(table_name = "sessions")] pub struct SessionRow { #[model(primary_key)] pub token_hash: String, pub user_id: String, pub csrf: String, pub expires_at: DateTime, } #[derive(Debug, Clone)] #[model(table_name = "workspaces")] pub struct WorkspaceRow { pub demo_deleted_at: Option>, #[model(primary_key)] pub id: String, pub document: String, pub revision: i64, pub created_at: DateTime, /// Stable identifier from the instance configuration; None for legacy workspaces. pub key: Option, pub disabled_at: Option>, } #[derive(Debug, Clone)] #[model(table_name = "workspace_members")] pub struct WorkspaceMemberRow { #[model(primary_key)] pub id: String, pub workspace_id: String, pub user_id: String, pub permissions: String, pub is_owner: bool, } #[derive(Debug, Clone)] #[model(table_name = "workspace_history")] pub struct HistoryRow { #[model(primary_key)] pub id: String, pub workspace_id: String, pub revision: i64, pub document: String, pub effective_at: DateTime, pub actor_id: Option, } #[derive(Debug, Clone)] #[model(table_name = "audit_events")] pub struct AuditRow { #[model(primary_key)] pub id: Auto, pub workspace_id: String, pub actor_id: Option, pub action: String, pub details: String, pub created_at: DateTime, } #[derive(Debug, Clone)] #[model(table_name = "sync_jobs")] pub struct SyncJobRow { pub authorized_revision: Option, pub authorized_document: Option, pub published_document: Option, #[model(primary_key)] pub workspace_id: String, pub requested_revision: i64, pub published_revision: Option, pub state: String, pub attempts: i32, pub next_attempt: DateTime, pub last_error: Option, pub last_success: Option>, pub window_end: Option>, pub lease_token: Option, pub lease_until: Option>, } #[derive(Debug, Clone)] #[model(table_name = "provider_objects")] pub struct ProviderObjectRow { #[model(primary_key)] pub id: String, pub workspace_id: String, pub object_key: String, pub remote_id: String, pub content: String, pub updated_at: DateTime, } #[derive(Debug, Clone)] #[model(table_name = "oidc_flows")] pub struct OidcFlowRow { #[model(primary_key)] pub state_hash: String, pub nonce: String, pub verifier: String, pub expires_at: DateTime, } #[derive(Debug, Clone)] #[model(table_name = "instance_state")] pub struct InstanceStateRow { #[model(primary_key)] pub key: String, pub value: String, } #[derive(Debug, Clone)] #[model(table_name = "workspace_drafts")] pub struct WorkspaceDraftRow { #[model(primary_key)] pub workspace_id: String, pub revision: i64, pub payload: String, } #[derive(Debug, Clone)] #[model(table_name = "instance_audit")] pub struct InstanceAuditRow { #[model(primary_key)] pub id: Auto, pub actor_id: Option, pub action: String, pub details: String, pub created_at: DateTime, }