init
This commit is contained in:
2
app/backend-python/models/__init__.py
Normal file
2
app/backend-python/models/__init__.py
Normal file
@@ -0,0 +1,2 @@
|
||||
"""数据模型模块"""
|
||||
|
||||
66
app/backend-python/models/chat.py
Normal file
66
app/backend-python/models/chat.py
Normal file
@@ -0,0 +1,66 @@
|
||||
from typing import List, Optional, Any, Dict
|
||||
from pydantic import BaseModel, Field
|
||||
|
||||
# 聊天请求
|
||||
class ChatRequest(BaseModel):
|
||||
query: str = Field(..., description="用户输入的消息")
|
||||
system_user_id: int = Field(..., description="系统用户ID(当前登录用户)")
|
||||
context_id: Optional[str] = Field(None, description="会话上下文ID")
|
||||
|
||||
class Config:
|
||||
json_schema_extra = {
|
||||
"example": {
|
||||
"query": "查看所有可用代理",
|
||||
"system_user_id": 1000000001,
|
||||
"context_id": "session-1234567890"
|
||||
}
|
||||
}
|
||||
|
||||
# 聊天响应
|
||||
class ChatResponse(BaseModel):
|
||||
content: str = Field(..., description="AI 回复内容")
|
||||
context_id: str = Field(..., description="会话上下文ID")
|
||||
task_id: Optional[str] = Field(None, description="任务ID")
|
||||
status: str = Field(default="success", description="响应状态")
|
||||
|
||||
class Config:
|
||||
json_schema_extra = {
|
||||
"example": {
|
||||
"content": "系统中共有 4 个可用代理...",
|
||||
"context_id": "session-1234567890",
|
||||
"task_id": "task-abc123",
|
||||
"status": "success"
|
||||
}
|
||||
}
|
||||
|
||||
# 错误响应
|
||||
class ErrorResponse(BaseModel):
|
||||
error: str = Field(..., description="错误类型")
|
||||
message: str = Field(..., description="错误消息")
|
||||
details: Optional[Dict[str, Any]] = Field(None, description="错误详情")
|
||||
|
||||
# A2A 消息部分
|
||||
class A2AMessagePart(BaseModel):
|
||||
kind: str = "text"
|
||||
text: str
|
||||
|
||||
# A2A 消息
|
||||
class A2AMessage(BaseModel):
|
||||
context_id: str
|
||||
role: str = "user"
|
||||
parts: List[A2AMessagePart]
|
||||
message_id: str
|
||||
|
||||
# A2A 请求
|
||||
class A2ARequest(BaseModel):
|
||||
jsonrpc: str = "2.0"
|
||||
method: str = "message/send"
|
||||
params: Dict[str, A2AMessage]
|
||||
id: int
|
||||
|
||||
# A2A 响应
|
||||
class A2AResponse(BaseModel):
|
||||
id: int
|
||||
jsonrpc: str
|
||||
result: Dict[str, Any]
|
||||
|
||||
58
app/backend-python/models/dida_auth.py
Normal file
58
app/backend-python/models/dida_auth.py
Normal file
@@ -0,0 +1,58 @@
|
||||
from typing import Optional
|
||||
from pydantic import BaseModel, Field
|
||||
|
||||
# 滴答清单OAuth认证请求
|
||||
class DidaOAuthRequest(BaseModel):
|
||||
system_user_id: int = Field(..., description="系统用户ID")
|
||||
client_id: str = Field(..., description="滴答清单应用Client ID")
|
||||
client_secret: str = Field(..., description="滴答清单应用Client Secret")
|
||||
authorization_code: str = Field(..., description="OAuth授权码")
|
||||
redirect_uri: str = Field(..., description="OAuth回调地址(必须与授权时一致)")
|
||||
|
||||
class Config:
|
||||
json_schema_extra = {
|
||||
"example": {
|
||||
"system_user_id": 1000000001,
|
||||
"client_id": "your_client_id",
|
||||
"client_secret": "your_client_secret",
|
||||
"authorization_code": "auth_code_from_oauth_callback",
|
||||
"redirect_uri": "http://localhost:1420/dida-binding"
|
||||
}
|
||||
}
|
||||
|
||||
# 滴答清单凭证刷新请求
|
||||
class DidaRefreshTokenRequest(BaseModel):
|
||||
system_user_id: int = Field(..., description="系统用户ID")
|
||||
|
||||
class Config:
|
||||
json_schema_extra = {
|
||||
"example": {
|
||||
"system_user_id": 1000000001
|
||||
}
|
||||
}
|
||||
|
||||
# 滴答清单绑定状态响应
|
||||
class DidaBindingStatusResponse(BaseModel):
|
||||
is_bound: bool = Field(..., description="是否已绑定")
|
||||
username: Optional[str] = Field(None, description="绑定的滴答清单账号")
|
||||
bound_at: Optional[str] = Field(None, description="绑定时间")
|
||||
token_expires_at: Optional[str] = Field(None, description="令牌过期时间")
|
||||
|
||||
# 滴答清单OAuth响应
|
||||
class DidaOAuthResponse(BaseModel):
|
||||
status: str = Field(..., description="状态: success, error")
|
||||
message: str = Field(..., description="提示消息")
|
||||
data: Optional[dict] = Field(None, description="额外数据")
|
||||
|
||||
class Config:
|
||||
json_schema_extra = {
|
||||
"example": {
|
||||
"status": "success",
|
||||
"message": "滴答清单账号绑定成功!",
|
||||
"data": {
|
||||
"username": "user@example.com",
|
||||
"expires_at": "2025-01-09T12:00:00"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
87
app/backend-python/models/xiaomi_auth.py
Normal file
87
app/backend-python/models/xiaomi_auth.py
Normal file
@@ -0,0 +1,87 @@
|
||||
from typing import Optional
|
||||
from pydantic import BaseModel, Field
|
||||
|
||||
# 小米登录请求
|
||||
class XiaomiLoginRequest(BaseModel):
|
||||
system_user_id: int = Field(..., description="系统用户ID")
|
||||
username: str = Field(..., description="小米账号(手机号/邮箱)")
|
||||
password: str = Field(..., description="密码")
|
||||
server: str = Field(default="cn", description="服务器区域")
|
||||
|
||||
class Config:
|
||||
json_schema_extra = {
|
||||
"example": {
|
||||
"system_user_id": 1000000001,
|
||||
"username": "13800138000",
|
||||
"password": "your_password",
|
||||
"server": "cn"
|
||||
}
|
||||
}
|
||||
|
||||
# 验证码提交请求
|
||||
class CaptchaSubmitRequest(BaseModel):
|
||||
session_id: str = Field(..., description="会话ID")
|
||||
captcha_code: str = Field(..., description="验证码")
|
||||
|
||||
# 双因素认证请求
|
||||
class TwoFactorAuthRequest(BaseModel):
|
||||
session_id: str = Field(..., description="会话ID")
|
||||
ticket: str = Field(..., description="2FA验证码")
|
||||
|
||||
# 手动输入凭证请求
|
||||
class ManualCredentialsRequest(BaseModel):
|
||||
system_user_id: int = Field(..., description="系统用户ID")
|
||||
xiaomi_username: str = Field(..., description="小米账号")
|
||||
ssecurity: str = Field(..., description="_ssecurity参数")
|
||||
userId: str = Field(..., description="userId参数")
|
||||
cUserId: str = Field(..., description="_cUserId参数")
|
||||
serviceToken: str = Field(..., description="serviceToken参数")
|
||||
server: str = Field(default="cn", description="服务器区域")
|
||||
|
||||
class Config:
|
||||
json_schema_extra = {
|
||||
"example": {
|
||||
"system_user_id": 1000000001,
|
||||
"xiaomi_username": "13800138000",
|
||||
"ssecurity": "R9egnuetTRF9sMP2jy9yJQ==",
|
||||
"userId": "3128533266",
|
||||
"cUserId": "5suobuxuMCJG7d6Wtp3I28D30l0",
|
||||
"serviceToken": "2ib8u26oDE7OoCSawL3M5rvrIR7koVw...",
|
||||
"server": "cn"
|
||||
}
|
||||
}
|
||||
|
||||
# 登录步骤响应
|
||||
class LoginStepResponse(BaseModel):
|
||||
session_id: str = Field(..., description="会话ID")
|
||||
status: str = Field(..., description="状态: success, need_captcha, need_2fa, error")
|
||||
message: str = Field(..., description="提示消息")
|
||||
data: Optional[dict] = Field(None, description="额外数据")
|
||||
|
||||
class Config:
|
||||
json_schema_extra = {
|
||||
"example": {
|
||||
"session_id": "sess_abc123",
|
||||
"status": "need_captcha",
|
||||
"message": "需要验证码",
|
||||
"data": {
|
||||
"captcha_url": "/api/v1/xiaomi/captcha/sess_abc123"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
# 绑定状态响应
|
||||
class BindingStatusResponse(BaseModel):
|
||||
is_bound: bool = Field(..., description="是否已绑定")
|
||||
username: Optional[str] = Field(None, description="绑定的小米账号")
|
||||
bound_at: Optional[str] = Field(None, description="绑定时间")
|
||||
|
||||
# 小米设备信息
|
||||
class XiaomiDeviceInfo(BaseModel):
|
||||
name: str
|
||||
did: str
|
||||
token: Optional[str] = None
|
||||
model: Optional[str] = None
|
||||
mac: Optional[str] = None
|
||||
localip: Optional[str] = None
|
||||
|
||||
Reference in New Issue
Block a user