File size: 2,315 Bytes
69fb140
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
"""
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