Bloom_Ware / models /schemas.py
XiaoBai1221's picture
Latest
69fb140
"""
Pydantic 模型定義
統一管理 API 請求/回應的資料結構
"""
from datetime import datetime
from typing import List, Optional
from pydantic import BaseModel, EmailStr, Field
# ===== 用戶相關 =====
class UserCreate(BaseModel):
"""用戶註冊請求"""
name: str
email: EmailStr
password: str = Field(min_length=6)
class UserLogin(BaseModel):
"""用戶登入請求"""
email: EmailStr
password: str
class UserInfo(BaseModel):
"""用戶資訊"""
id: str
name: str
email: EmailStr
created_at: datetime
class UserPublic(BaseModel):
"""用戶公開資訊回應"""
success: bool
user: UserInfo
class UserLoginPublicResponse(BaseModel):
"""用戶登入回應"""
success: bool
user: UserInfo
token: Optional[str] = None
# ===== 對話相關 =====
class ChatCreateRequest(BaseModel):
"""建立對話請求"""
user_id: str
title: Optional[str] = "新對話"
class ChatTitleUpdateRequest(BaseModel):
"""更新對話標題請求"""
title: str
class ChatPublic(BaseModel):
"""對話公開資訊"""
chat_id: str
user_id: str
title: str
created_at: datetime
updated_at: datetime
class ChatSummary(BaseModel):
"""對話摘要"""
chat_id: str
title: str
updated_at: datetime
class ChatListResponse(BaseModel):
"""對話列表回應"""
chats: List[ChatSummary]
# ===== 訊息相關 =====
class MessageCreateRequest(BaseModel):
"""建立訊息請求"""
sender: str
content: str
class MessagePublic(BaseModel):
"""訊息公開資訊"""
sender: str
content: str
timestamp: datetime
class ChatDetailResponse(ChatPublic):
"""對話詳情回應(含訊息)"""
messages: List[MessagePublic]
# ===== 檔案分析 =====
class FileAnalysisRequest(BaseModel):
"""檔案分析請求"""
filename: str
content: str
mime_type: str
user_prompt: Optional[str] = "請分析這個檔案的內容"
class FileAnalysisResponse(BaseModel):
"""檔案分析回應"""
success: bool
filename: str
analysis: Optional[str] = None
error: Optional[str] = None
# ===== 語音相關 =====
class SpeakerLabelBindRequest(BaseModel):
"""語音標籤綁定請求"""
speaker_label: str