use erp_core::error::AppError; #[derive(Debug, thiserror::Error)] pub enum AiError { #[error("验证失败: {0}")] Validation(String), #[error("分析未找到: {0}")] AnalysisNotFound(String), #[error("Prompt 模板未找到: {0}")] PromptNotFound(String), #[error("AI 提供商不可用: {0}")] ProviderUnavailable(String), #[error("AI 提供商错误: {0}")] ProviderError(String), #[error("数据脱敏失败: {0}")] SanitizationError(String), #[error("模板渲染失败: {0}")] TemplateError(String), #[error("速率超限")] RateLimitExceeded, #[error("版本不匹配")] VersionMismatch, #[error("数据库错误: {0}")] DbError(String), } impl From for AppError { fn from(e: AiError) -> Self { match e { AiError::Validation(msg) => AppError::Validation(msg), AiError::AnalysisNotFound(id) => AppError::NotFound(format!("分析结果: {id}")), AiError::PromptNotFound(name) => AppError::NotFound(format!("Prompt 模板: {name}")), AiError::ProviderUnavailable(p) => { AppError::Internal(format!("AI 提供商 {p} 不可用")) } AiError::RateLimitExceeded => AppError::TooManyRequests, AiError::VersionMismatch => AppError::VersionMismatch, AiError::DbError(msg) => AppError::Internal(msg), other => AppError::Internal(other.to_string()), } } } impl From for AiError { fn from(e: sea_orm::DbErr) -> Self { AiError::DbError(e.to_string()) } } pub type AiResult = Result;