from pydantic import BaseModel, Field from typing import Optional, Dict, Any, List from datetime import datetime from enum import Enum class QueryType(str, Enum): """查詢類型枚舉""" SEARCH = "search" CREATE = "create" UPDATE = "update" DELETE = "delete" ANALYTICS = "analytics" UNKNOWN = "unknown" class NLPAnalysisRequest(BaseModel): """NLP 分析請求模型""" message: str = Field(..., description="用戶輸入的訊息") user_id: Optional[str] = Field(None, description="用戶ID") context: Optional[Dict[str, Any]] = Field(default_factory=dict, description="上下文資訊") class NLPAnalysisResult(BaseModel): """NLP 分析結果模型""" query_type: QueryType = Field(..., description="查詢類型") intent: str = Field(..., description="用戶意圖") entities: Dict[str, Any] = Field(default_factory=dict, description="提取的實體") confidence: float = Field(..., ge=0.0, le=1.0, description="信心度") parameters: Dict[str, Any] = Field(default_factory=dict, description="查詢參數") class DatabaseQuery(BaseModel): """資料庫查詢模型""" table_name: str = Field(..., description="資料表名稱") operation: str = Field(..., description="操作類型") conditions: Optional[Dict[str, Any]] = Field(default_factory=dict, description="查詢條件") data: Optional[Dict[str, Any]] = Field(default_factory=dict, description="要操作的資料") limit: Optional[int] = Field(None, description="查詢限制數量") offset: Optional[int] = Field(None, description="查詢偏移量") class DatabaseResult(BaseModel): """資料庫查詢結果模型""" success: bool = Field(..., description="是否成功") data: Optional[List[Dict[str, Any]]] = Field(default_factory=list, description="查詢結果資料") count: Optional[int] = Field(None, description="結果數量") error: Optional[str] = Field(None, description="錯誤訊息") class LineMessage(BaseModel): """LINE 訊息模型""" user_id: str = Field(..., description="用戶ID") message: str = Field(..., description="訊息內容") timestamp: datetime = Field(default_factory=datetime.now, description="時間戳記") message_type: str = Field(default="text", description="訊息類型") class UserProfile(BaseModel): """用戶資料模型""" user_id: str = Field(..., description="用戶ID") display_name: Optional[str] = Field(None, description="顯示名稱") status_message: Optional[str] = Field(None, description="狀態訊息") picture_url: Optional[str] = Field(None, description="頭像URL") created_at: datetime = Field(default_factory=datetime.now, description="建立時間") updated_at: datetime = Field(default_factory=datetime.now, description="更新時間") class APIResponse(BaseModel): """API 回應模型""" success: bool = Field(..., description="是否成功") message: str = Field(..., description="回應訊息") data: Optional[Any] = Field(None, description="回應資料") error: Optional[str] = Field(None, description="錯誤訊息")