Files
meguri/src/models.rs
T

164 lines
4.3 KiB
Rust
Raw Normal View History

2026-09-24 14:35:05 +03:00
//! 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<String>,
pub demo_deleted_at: Option<DateTime<Utc>>,
#[model(primary_key)]
pub id: String,
#[model(unique)]
pub username: String,
pub display_name: String,
pub country: String,
pub timezone: Option<String>,
/// None for accounts that sign in only through SSO or whose bootstrap access was removed.
pub password_hash: Option<String>,
2026-09-24 14:35:05 +03:00
pub created_at: DateTime<Utc>,
pub email: Option<String>,
pub instance_admin: bool,
pub bootstrap: bool,
/// JSON array of group names that map to workspace roles through the instance configuration.
pub groups: String,
2026-09-24 14:35:05 +03:00
}
#[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<Utc>,
}
#[derive(Debug, Clone)]
#[model(table_name = "workspaces")]
pub struct WorkspaceRow {
pub demo_deleted_at: Option<DateTime<Utc>>,
#[model(primary_key)]
pub id: String,
pub document: String,
pub revision: i64,
pub created_at: DateTime<Utc>,
/// Stable identifier from the instance configuration; None for legacy workspaces.
pub key: Option<String>,
pub disabled_at: Option<DateTime<Utc>>,
2026-09-24 14:35:05 +03:00
}
#[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<Utc>,
pub actor_id: Option<String>,
}
#[derive(Debug, Clone)]
#[model(table_name = "audit_events")]
pub struct AuditRow {
#[model(primary_key)]
pub id: Auto<i64>,
pub workspace_id: String,
pub actor_id: Option<String>,
pub action: String,
pub details: String,
pub created_at: DateTime<Utc>,
}
#[derive(Debug, Clone)]
#[model(table_name = "sync_jobs")]
pub struct SyncJobRow {
2026-10-07 15:30:31 +01:00
pub authorized_revision: Option<i64>,
pub authorized_document: Option<String>,
pub published_document: Option<String>,
2026-09-24 14:35:05 +03:00
#[model(primary_key)]
pub workspace_id: String,
pub requested_revision: i64,
pub published_revision: Option<i64>,
pub state: String,
pub attempts: i32,
pub next_attempt: DateTime<Utc>,
pub last_error: Option<String>,
pub last_success: Option<DateTime<Utc>>,
pub window_end: Option<DateTime<Utc>>,
pub lease_token: Option<String>,
pub lease_until: Option<DateTime<Utc>>,
}
#[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<Utc>,
}
#[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<Utc>,
}
#[derive(Debug, Clone)]
#[model(table_name = "instance_state")]
pub struct InstanceStateRow {
#[model(primary_key)]
pub key: String,
pub value: String,
}
2026-10-07 15:30:31 +01:00
#[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<i64>,
pub actor_id: Option<String>,
pub action: String,
pub details: String,
pub created_at: DateTime<Utc>,
}