WechatOnCloud/bridge/woc_bridge/models/export.py

60 lines
2.5 KiB
Python
Raw Normal View History

"""聊天记录导出相关数据模型。"""
from __future__ import annotations
from typing import Literal, Optional
from pydantic import BaseModel, Field
# ---------------------------------------------------------------------------
# 导出请求POST /api/messages/export 异步用)
# ---------------------------------------------------------------------------
class ExportRequest(BaseModel):
"""导出请求POST /api/messages/export 异步用)。
limit > 1000 include_media=true 时应走异步端点
同步 GET /api/messages/export 仅服务 limit 1000 的纯文本导出
"""
talker: str = Field(..., description="会话 wxid 或群 id")
format: Literal["html", "csv", "json", "txt"] = Field(
"html", description="导出格式html / csv / json / txt"
)
limit: int = Field(1000, ge=1, le=100000, description="导出消息数上限")
include_media: bool = Field(False, description="是否打包媒体文件zip")
media_inline: bool = Field(
False, description="媒体是否内联(仅 HTML将图片 base64 嵌入)"
)
start_time: Optional[int] = Field(None, description="起始时间戳Unix 秒,含)")
end_time: Optional[int] = Field(None, description="结束时间戳Unix 秒,含)")
# ---------------------------------------------------------------------------
# 导出任务状态
# ---------------------------------------------------------------------------
class ExportTaskStatus(BaseModel):
"""导出任务状态。
状态机pending running completed / failed / cancelled
completed download_url 字段有效expires_at 之后下载链接失效
"""
task_id: str = Field(description="任务 IDUUID")
status: Literal[
"pending", "running", "completed", "failed", "cancelled"
] = Field("pending", description="任务状态")
progress: float = Field(
0.0, ge=0.0, le=1.0, description="进度 0-1processed/total"
)
total: int = Field(0, description="待处理消息总数(运行中逐步更新)")
processed: int = Field(0, description="已处理消息数")
download_url: Optional[str] = Field(
None, description="下载链接status=completed 时有效)"
)
expires_at: Optional[int] = Field(
None, description="下载链接过期时间戳(默认 2 小时后)"
)
error_message: Optional[str] = Field(
None, description="失败原因status=failed 时有效)"
)