本次提交将woc-bridge项目重构为模块化包结构,按职责拆分多个子域: 1. 新增models层定义所有Pydantic数据模型与统一错误体系 2. 拆分db/ui/messaging/routes等业务域模块 3. 实现基础API路由:状态查询、截图、登录、媒体获取等 4. 重构tools脚本的模块导入路径 5. 补充版本号与能力清单定义 6. 完善全局配置与依赖管理 整体完成项目从单文件脚本到可维护的包结构迁移,为后续功能开发打下基础。
109 lines
3.7 KiB
Python
109 lines
3.7 KiB
Python
"""联系人域模型:联系人 / 联系人列表 / 群聊列表 / 群成员。"""
|
||
|
||
from __future__ import annotations
|
||
|
||
from typing import Optional
|
||
|
||
from pydantic import BaseModel, Field
|
||
|
||
|
||
# ---------------------------------------------------------------------------
|
||
# 联系人接口
|
||
# ---------------------------------------------------------------------------
|
||
class Contact(BaseModel):
|
||
"""联系人。"""
|
||
|
||
wxid: str
|
||
nickname: str = ""
|
||
remark: str = ""
|
||
avatar_url: str = ""
|
||
type: str = Field(
|
||
default="person",
|
||
description="person / group / official / system",
|
||
)
|
||
|
||
# 扩展字段:从 contact.db 的 contact 表读取
|
||
alias: Optional[str] = Field(default=None, description="微信号/别名")
|
||
encrypt_username: Optional[str] = Field(default=None, description="加密用户名")
|
||
quan_pin: Optional[str] = Field(default=None, description="全拼")
|
||
pin_yin_initial: Optional[str] = Field(default=None, description="拼音首字母")
|
||
big_head_url: Optional[str] = Field(default=None, description="高清头像 URL")
|
||
small_head_url: Optional[str] = Field(default=None, description="缩略头像 URL")
|
||
description: Optional[str] = Field(default=None, description="个性签名/描述")
|
||
local_type: Optional[int] = Field(default=None, description="联系人类型标记")
|
||
verify_flag: Optional[int] = Field(default=None, description="认证标记")
|
||
delete_flag: Optional[int] = Field(default=None, description="删除标记")
|
||
chat_room_type: Optional[int] = Field(default=None, description="群类型标记")
|
||
|
||
|
||
class ContactsResponse(BaseModel):
|
||
"""联系人列表响应。"""
|
||
|
||
contacts: list[Contact] = Field(default_factory=list)
|
||
total: int = 0
|
||
|
||
|
||
class GroupsResponse(BaseModel):
|
||
"""群聊列表响应。"""
|
||
|
||
groups: list[Contact] = Field(default_factory=list)
|
||
total: int = 0
|
||
|
||
|
||
# ---------------------------------------------------------------------------
|
||
# 群成员接口
|
||
# ---------------------------------------------------------------------------
|
||
class GroupMember(BaseModel):
|
||
"""群成员。"""
|
||
|
||
wxid: str
|
||
nickname: str = ""
|
||
display_name: str = ""
|
||
is_admin: bool = False
|
||
|
||
|
||
class GroupMembersResponse(BaseModel):
|
||
"""群成员列表响应。"""
|
||
|
||
group_wxid: str
|
||
members: list[GroupMember] = Field(default_factory=list)
|
||
total: int = 0
|
||
|
||
|
||
# ---------------------------------------------------------------------------
|
||
# 修改好友备注(experimental)
|
||
# ---------------------------------------------------------------------------
|
||
class SetRemarkRequest(BaseModel):
|
||
"""修改好友备注请求(experimental)。"""
|
||
|
||
remark: str = Field(description="新备注名")
|
||
display_name: Optional[str] = Field(
|
||
default=None,
|
||
description="会话显示名(备注/昵称)用于搜索框定位;"
|
||
"不传则从 contact.db 解析(修改前的 remark 优先,其次 nickname,回退 wxid)",
|
||
)
|
||
|
||
|
||
class SetRemarkResponse(BaseModel):
|
||
"""修改好友备注响应。"""
|
||
|
||
success: bool = Field(default=False)
|
||
error: Optional[str] = Field(default=None, description="失败时的错误描述")
|
||
|
||
|
||
# ---------------------------------------------------------------------------
|
||
# 添加好友(experimental)
|
||
# ---------------------------------------------------------------------------
|
||
class AddFriendRequest(BaseModel):
|
||
"""添加好友请求(experimental)。"""
|
||
|
||
keyword: str = Field(description="搜索关键词(wxid/手机号/微信号)")
|
||
message: str = Field(default="", description="可选好友验证消息")
|
||
|
||
|
||
class AddFriendResponse(BaseModel):
|
||
"""添加好友响应。"""
|
||
|
||
success: bool = Field(default=False)
|
||
error: Optional[str] = Field(default=None, description="失败时的错误描述")
|