//! 数据模型定义 — 与数据库表对应的 Rust 结构体 use serde::{Deserialize, Serialize}; // ============================================================ // 想法相关模型 // ============================================================ /// 想法记录 #[derive(Debug, Clone, Serialize, Deserialize)] pub struct IdeaRecord { pub id: String, pub title: String, pub description: String, pub status: String, pub priority: i32, pub score: Option, pub tags: Option, // JSON 数组 pub source: Option, pub promoted_to: Option, // 晋升后的 project_id pub ai_analysis: Option, // AI 分析结果 JSON pub scores: Option, // 多维评分 JSON (feasibility/impact/urgency/overall) pub created_at: String, pub updated_at: String, } // ============================================================ // 项目相关模型 // ============================================================ /// 项目记录 #[derive(Debug, Clone, Serialize, Deserialize)] pub struct ProjectRecord { pub id: String, pub name: String, pub description: String, pub status: String, pub idea_id: Option, /// 绑定的本地代码目录(绝对路径,可空=未绑定,第二步导入历史项目时复用) pub path: Option, /// 技术栈 JSON 数组字符串(如 ["rust","vue","tauri"],由探测填充,可空) pub stack: Option, pub created_at: String, pub updated_at: String, } // ============================================================ // 任务相关模型 // ============================================================ /// 任务记录 #[derive(Debug, Clone, Serialize, Deserialize)] pub struct TaskRecord { pub id: String, pub project_id: String, pub title: String, pub description: String, pub status: String, pub priority: i32, pub branch_name: Option, pub assignee: Option, pub workflow_def_id: Option, // 关联的工作流定义 ID pub base_branch: Option, // 基础分支 pub created_at: String, pub updated_at: String, } /// 分支记录 #[derive(Debug, Clone, Serialize, Deserialize)] pub struct BranchRecord { pub id: String, pub project_id: String, pub task_id: Option, pub name: String, pub base: String, pub status: String, pub created_at: String, pub updated_at: String, pub merged_at: Option, } /// 发布记录 #[derive(Debug, Clone, Serialize, Deserialize)] pub struct ReleaseRecord { pub id: String, pub project_id: String, pub version: String, pub status: String, pub task_ids: String, // JSON 数组 pub changelog: Option, pub created_at: String, pub released_at: Option, } // ============================================================ // 工作流相关模型 // ============================================================ /// 工作流执行记录 #[derive(Debug, Clone, Serialize, Deserialize)] pub struct WorkflowRecord { pub id: String, pub name: String, pub dag_json: String, // DAG 的 JSON 序列化 pub status: String, pub triggered_by: Option, pub project_id: Option, // 关联项目 ID pub task_id: Option, // 关联任务 ID pub created_at: String, pub completed_at: Option, } /// 节点执行记录 #[derive(Debug, Clone, Serialize, Deserialize)] pub struct NodeExecutionRecord { pub id: String, pub workflow_id: String, pub node_id: String, pub node_type: String, pub status: String, pub input_json: Option, pub output_json: Option, pub error_message: Option, pub started_at: Option, pub completed_at: Option, } // ============================================================ // AI 相关模型 (V3) // ============================================================ /// AI 提供商配置记录 #[derive(Debug, Clone, Serialize, Deserialize)] pub struct AiProviderRecord { pub id: String, pub name: String, pub provider_type: String, pub api_key: String, pub base_url: String, pub default_model: String, pub models: Option, // JSON array of model names pub is_default: bool, pub config: Option, // JSON extra config pub created_at: String, pub updated_at: String, } /// AI 对话记录 #[derive(Debug, Clone, Serialize, Deserialize)] pub struct AiConversationRecord { pub id: String, pub title: Option, pub messages: String, // JSON array of ChatMessage pub provider_id: Option, pub model: Option, pub models: Option, // 用过的所有 model(JSON 数组字符串,去重) pub archived: bool, // 是否归档(侧栏折叠展示) pub prompt_tokens: Option, // 输入 token 累计(流式 usage 落库) pub completion_tokens: Option, // 输出 token 累计(流式 usage 落库) pub created_at: String, pub updated_at: String, } /// AI 工具执行审计记录 #[derive(Debug, Clone, Serialize, Deserialize)] pub struct AiToolExecutionRecord { pub id: String, pub conversation_id: Option, pub tool_call_id: String, pub tool_name: String, pub arguments: String, pub result: Option, pub status: String, // pending/approved/rejected/executing/completed/failed pub risk_level: String, // low/medium/high pub requested_at: String, pub executed_at: Option, pub decided_by: Option, // human/auto } // ============================================================ // 知识库模型 (V7) // ============================================================ /// 知识条目记录(经验沉淀基本单元,共享记忆层) #[derive(Debug, Clone, Serialize, Deserialize)] pub struct KnowledgeRecord { pub id: String, pub kind: String, // KnowledgeKind snake_case(7 种) pub title: String, pub content: String, pub tags: Option, // JSON 数组字符串 pub status: String, // candidate|pending_review|published|archived pub confidence: Option, // high|medium|low(AI 提炼自评,可空) pub reuse_count: i32, // 唯一客观排序信号 pub verified: bool, // 发布审核时一次性人工标 pub source_project: Option, // 来源项目(仅溯源不过滤) pub source_ref: Option, // 来源实体引用(如 conv:{id}) pub reasoning: Option, // AI 提炼判断依据("为何值得沉淀"),手动录入为 None pub created_at: String, pub updated_at: String, } /// 知识生命线事件记录(追加型审计:产生/审核/引用/归档) #[derive(Debug, Clone, Serialize, Deserialize)] pub struct KnowledgeEventRecord { pub id: String, pub knowledge_id: String, pub event_type: String, // created | extracted | status_changed | referenced | archived pub source_ref: Option, // 触发来源: conv:{id} / manual / system pub context_json: Option, // JSON: 因 event_type 而异 pub timestamp: String, }