From af338e0a7010dad42e8747fa8755c93b25279370 Mon Sep 17 00:00:00 2001 From: iven Date: Sat, 25 Apr 2026 13:52:47 +0800 Subject: [PATCH] =?UTF-8?q?feat(ai):=20=E6=B7=BB=E5=8A=A0=20SeaORM=20Entit?= =?UTF-8?q?y=20(ai=5Fprompt/ai=5Fanalysis/ai=5Fusage)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Opus 4.7 --- crates/erp-ai/src/entity/ai_analysis.rs | 33 +++++++++++++++++++++++++ crates/erp-ai/src/entity/ai_prompt.rs | 31 +++++++++++++++++++++++ crates/erp-ai/src/entity/ai_usage.rs | 24 ++++++++++++++++++ crates/erp-ai/src/entity/mod.rs | 3 +++ crates/erp-ai/src/lib.rs | 1 + 5 files changed, 92 insertions(+) create mode 100644 crates/erp-ai/src/entity/ai_analysis.rs create mode 100644 crates/erp-ai/src/entity/ai_prompt.rs create mode 100644 crates/erp-ai/src/entity/ai_usage.rs create mode 100644 crates/erp-ai/src/entity/mod.rs diff --git a/crates/erp-ai/src/entity/ai_analysis.rs b/crates/erp-ai/src/entity/ai_analysis.rs new file mode 100644 index 0000000..e52ed51 --- /dev/null +++ b/crates/erp-ai/src/entity/ai_analysis.rs @@ -0,0 +1,33 @@ +use sea_orm::entity::prelude::*; +use serde::{Deserialize, Serialize}; + +#[derive(Clone, Debug, PartialEq, DeriveEntityModel, Serialize, Deserialize)] +#[sea_orm(table_name = "ai_analysis_results")] +pub struct Model { + #[sea_orm(primary_key, auto_increment = false)] + pub id: Uuid, + pub tenant_id: Uuid, + pub patient_id: Uuid, + pub analysis_type: String, + pub source_ref: String, + pub prompt_id: Uuid, + pub prompt_version: i32, + pub model_used: String, + pub input_data_hash: String, + pub sanitized_input: Option, + pub result_content: Option, + pub result_metadata: Option, + pub status: String, + pub error_message: Option, + pub created_at: DateTimeUtc, + pub updated_at: DateTimeUtc, + pub created_by: Option, + pub updated_by: Option, + pub deleted_at: Option, + pub version_lock: i32, +} + +#[derive(Copy, Clone, Debug, EnumIter, DeriveRelation)] +pub enum Relation {} + +impl ActiveModelBehavior for ActiveModel {} diff --git a/crates/erp-ai/src/entity/ai_prompt.rs b/crates/erp-ai/src/entity/ai_prompt.rs new file mode 100644 index 0000000..f006fcf --- /dev/null +++ b/crates/erp-ai/src/entity/ai_prompt.rs @@ -0,0 +1,31 @@ +use sea_orm::entity::prelude::*; +use serde::{Deserialize, Serialize}; + +#[derive(Clone, Debug, PartialEq, DeriveEntityModel, Serialize, Deserialize)] +#[sea_orm(table_name = "ai_prompts")] +pub struct Model { + #[sea_orm(primary_key, auto_increment = false)] + pub id: Uuid, + pub tenant_id: Uuid, + pub name: String, + pub description: String, + pub system_prompt: String, + pub user_prompt_template: String, + pub variables_schema: Option, + pub model_config: serde_json::Value, + pub version: i32, + pub is_active: bool, + pub category: String, + pub tags: Option, + pub created_at: DateTimeUtc, + pub updated_at: DateTimeUtc, + pub created_by: Option, + pub updated_by: Option, + pub deleted_at: Option, + pub version_lock: i32, +} + +#[derive(Copy, Clone, Debug, EnumIter, DeriveRelation)] +pub enum Relation {} + +impl ActiveModelBehavior for ActiveModel {} diff --git a/crates/erp-ai/src/entity/ai_usage.rs b/crates/erp-ai/src/entity/ai_usage.rs new file mode 100644 index 0000000..1dd8dc6 --- /dev/null +++ b/crates/erp-ai/src/entity/ai_usage.rs @@ -0,0 +1,24 @@ +use sea_orm::entity::prelude::*; +use serde::{Deserialize, Serialize}; + +#[derive(Clone, Debug, PartialEq, DeriveEntityModel, Serialize, Deserialize)] +#[sea_orm(table_name = "ai_usage_logs")] +pub struct Model { + #[sea_orm(primary_key, auto_increment = false)] + pub id: Uuid, + pub tenant_id: Uuid, + pub provider: String, + pub model: String, + pub analysis_type: String, + pub input_tokens: i32, + pub output_tokens: i32, + pub duration_ms: i32, + pub cost_cents: i32, + pub is_cache_hit: bool, + pub created_at: DateTimeUtc, +} + +#[derive(Copy, Clone, Debug, EnumIter, DeriveRelation)] +pub enum Relation {} + +impl ActiveModelBehavior for ActiveModel {} diff --git a/crates/erp-ai/src/entity/mod.rs b/crates/erp-ai/src/entity/mod.rs new file mode 100644 index 0000000..4294af5 --- /dev/null +++ b/crates/erp-ai/src/entity/mod.rs @@ -0,0 +1,3 @@ +pub mod ai_analysis; +pub mod ai_prompt; +pub mod ai_usage; diff --git a/crates/erp-ai/src/lib.rs b/crates/erp-ai/src/lib.rs index 5f8857b..e47f7c3 100644 --- a/crates/erp-ai/src/lib.rs +++ b/crates/erp-ai/src/lib.rs @@ -1,3 +1,4 @@ +pub mod entity; pub mod error; pub use error::{AiError, AiResult};