use chrono::{DateTime, Utc}; use diesel::prelude::*; use serde::{Deserialize, Serialize}; use uuid::Uuid; use crate::core::shared::models::schema::{ bot_configuration, bot_memories, bots, clicks, message_history, organizations, system_automations, user_login_tokens, user_preferences, user_sessions, users, }; #[derive(Debug, Clone, Copy, PartialEq, Eq)] 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, #[derive(Debug, Clone, Serialize, Deserialize, Queryable, Identifiable)] #[diesel(table_name = crate::core::shared::models::schema::organization_invitations)] pub struct OrganizationInvitation {