use chrono::{DateTime, Utc}; use diesel::prelude::*; use serde::{Deserialize, Serialize}; use uuid::Uuid; pub use super::schema; pub use super::schema::{ basic_tools, bot_configuration, bot_memories, bots, clicks, distribution_lists, email_auto_responders, email_drafts, email_folders, email_label_assignments, email_labels, email_rules, email_signatures, email_templates, global_email_signatures, kb_collections, kb_documents, message_history, organizations, scheduled_emails, session_tool_associations, shared_mailbox_members, shared_mailboxes, system_automations, tasks, user_email_accounts, user_kb_associations, user_login_tokens, user_preferences, user_sessions, users, }; pub use botlib::message_types::MessageType; pub use botlib::models::{ApiResponse, Attachment, BotResponse, Session, Suggestion, UserMessage}; #[derive(Debug, Clone, Copy, PartialEq)] pub enum TriggerKind { Scheduled = 0, TableUpdate = 1, TableInsert = 2, TableDelete = 3, Webhook = 4, EmailReceived = 5, FolderChange = 6, } impl TriggerKind { pub fn from_i32(value: i32) -> Option { match value { 0 => Some(Self::Scheduled), 1 => Some(Self::TableUpdate), 2 => Some(Self::TableInsert), 3 => Some(Self::TableDelete), 4 => Some(Self::Webhook), 5 => Some(Self::EmailReceived), 6 => Some(Self::FolderChange), _ => None, } } } #[derive(Debug, Queryable, Serialize, Deserialize, Identifiable)] #[diesel(table_name = system_automations)] pub struct Automation { pub id: Uuid, pub bot_id: Uuid, pub kind: i32, pub target: Option, pub schedule: Option, pub param: String, pub is_active: bool, pub last_triggered: Option>, } #[derive(Debug, Clone, Serialize, Deserialize, Queryable, Identifiable, Selectable)] #[diesel(table_name = user_sessions)] pub struct UserSession { pub id: Uuid, pub user_id: Uuid, pub bot_id: Uuid, pub title: String, pub context_data: serde_json::Value, pub current_tool: Option, pub created_at: DateTime, pub updated_at: DateTime, } #[derive(Debug, Clone, Serialize, Deserialize, Queryable, Identifiable, Insertable)] #[diesel(table_name = bot_memories)] pub struct BotMemory { pub id: Uuid, pub bot_id: Uuid, pub key: String, pub value: String, pub created_at: DateTime, pub updated_at: DateTime, } #[derive(Debug, Clone, Serialize, Deserialize, Queryable, Identifiable)] #[diesel(table_name = users)] pub struct User { pub id: Uuid, pub username: String, pub email: String, pub password_hash: String, pub is_active: bool, pub is_admin: bool, pub created_at: DateTime, pub updated_at: DateTime, } #[derive(Debug, Clone, Serialize, Deserialize, Queryable, Identifiable)] #[diesel(table_name = bots)] pub struct Bot { pub id: Uuid, pub name: String, pub description: Option, pub llm_provider: String, pub llm_config: serde_json::Value, pub context_provider: String, pub context_config: serde_json::Value, pub created_at: DateTime, pub updated_at: DateTime, pub is_active: Option, pub tenant_id: Option, } #[derive(Debug, Clone, Serialize, Deserialize, Queryable, Identifiable)] #[diesel(table_name = organizations)] #[diesel(primary_key(org_id))] pub struct Organization { pub org_id: Uuid, pub name: String, pub slug: String, pub created_at: DateTime, } #[derive(Debug, Clone, Serialize, Deserialize, Queryable, Identifiable)] #[diesel(table_name = message_history)] pub struct MessageHistory { pub id: Uuid, pub session_id: Uuid, pub user_id: Uuid, pub role: i32, pub content_encrypted: String, pub message_type: i32, pub message_index: i64, pub created_at: DateTime, } #[derive(Debug, Clone, Serialize, Deserialize, Queryable, Identifiable)] #[diesel(table_name = bot_configuration)] pub struct BotConfiguration { pub id: Uuid, pub bot_id: Uuid, pub config_key: String, pub config_value: String, pub is_encrypted: bool, pub config_type: String, pub created_at: DateTime, pub updated_at: DateTime, } #[derive(Debug, Clone, Serialize, Deserialize, Queryable, Identifiable)] #[diesel(table_name = user_login_tokens)] pub struct UserLoginToken { pub id: Uuid, pub user_id: Uuid, pub token_hash: String, pub expires_at: DateTime, pub created_at: DateTime, pub last_used: DateTime, pub user_agent: Option, pub ip_address: Option, pub is_active: bool, } #[derive(Debug, Clone, Serialize, Deserialize, Queryable, Identifiable)] #[diesel(table_name = user_preferences)] pub struct UserPreference { pub id: Uuid, pub user_id: Uuid, pub preference_key: String, pub preference_value: serde_json::Value, pub created_at: DateTime, pub updated_at: DateTime, } #[derive(Debug, Clone, Serialize, Deserialize, Queryable, Identifiable)] #[diesel(table_name = clicks)] pub struct Click { pub id: Uuid, pub campaign_id: String, pub email: String, pub updated_at: DateTime, } #[derive(Debug, Clone, Serialize, Deserialize, Queryable, Identifiable)] #[diesel(table_name = tasks)] pub struct Task { pub id: Uuid, pub title: String, pub description: Option, pub status: String, pub priority: String, pub assignee_id: Option, pub reporter_id: Option, pub project_id: Option, pub due_date: Option>, pub tags: Vec, pub dependencies: Vec, pub estimated_hours: Option, pub actual_hours: Option, pub progress: i32, pub created_at: DateTime, pub updated_at: DateTime, pub completed_at: Option>, } #[derive(Debug, Clone, Insertable)] #[diesel(table_name = tasks)] pub struct NewTask { pub id: Uuid, pub title: String, pub description: Option, pub status: String, pub priority: String, pub assignee_id: Option, pub reporter_id: Option, pub project_id: Option, pub due_date: Option>, pub tags: Vec, pub dependencies: Vec, pub estimated_hours: Option, pub progress: i32, }