# ============================================================================= # 企微IT智能服务台 — H5 用户端 Pydantic Schema # ============================================================================= # 说明:定义H5用户端专用的请求/响应数据结构 # 包含:摇人请求、OAuth回调、审批链接、软件下载、员工信息等 # ============================================================================= from datetime import datetime from typing import Any, Dict, List, Optional from pydantic import BaseModel, Field # -------------------------------------------------------------------------- # 摇人请求 Schema # -------------------------------------------------------------------------- class ShakeRequest(BaseModel): """摇人请求 Schema。 用户点击H5页面摇人按钮时发送的请求。 Attributes: employee_id: 企微员工UserID employee_name: 员工姓名 """ employee_id: str = Field(..., min_length=1, max_length=64, description="企微员工UserID") employee_name: str = Field(default="", max_length=128, description="员工姓名") # -------------------------------------------------------------------------- # 摇人响应 Schema # -------------------------------------------------------------------------- class ShakeResponse(BaseModel): """摇人响应 Schema。 摇人成功后返回会话信息和趣味话术。 Attributes: conversation: 会话信息(包含ID、状态、标签) funny_phrase: 趣味话术内容 """ conversation: Dict[str, Any] = Field(..., description="会话信息") funny_phrase: str = Field(..., description="趣味话术") # -------------------------------------------------------------------------- # OAuth2 回调请求 Schema # -------------------------------------------------------------------------- class OAuthCallbackRequest(BaseModel): """OAuth2 回调请求 Schema。 H5页面通过企微OAuth2授权后,将code传给后端换取员工身份。 Attributes: code: 企微OAuth2授权码 """ code: str = Field(..., min_length=1, description="企微OAuth2授权码") # -------------------------------------------------------------------------- # OAuth2 回调响应 Schema # -------------------------------------------------------------------------- class OAuthCallbackResponse(BaseModel): """OAuth2 回调响应 Schema。 用授权码换取到的员工身份信息和访问令牌。 Attributes: employee_id: 企微员工UserID employee_name: 员工姓名 token: 访问令牌(用于后续API请求的Bearer Token) department: 部门名称 position: 岗位 avatar: 头像URL """ employee_id: str = Field(..., description="企微员工UserID") employee_name: str = Field(default="", description="员工姓名") token: str = Field(..., description="访问令牌") department: str = Field(default="", description="部门名称") position: str = Field(default="", description="岗位") avatar: str = Field(default="", description="头像URL") # -------------------------------------------------------------------------- # OAuth2 授权URL响应 Schema # -------------------------------------------------------------------------- class OAuthAuthorizeResponse(BaseModel): """OAuth2 授权URL响应 Schema。 返回企微OAuth2授权链接,前端跳转到此URL进行授权。 Attributes: authorize_url: 企微OAuth2授权URL """ authorize_url: str = Field(..., description="企微OAuth2授权URL") # -------------------------------------------------------------------------- # 员工信息 Schema # -------------------------------------------------------------------------- class EmployeeInfo(BaseModel): """员工信息 Schema。 从企微通讯录获取的员工详细信息。 Attributes: employee_id: 企微员工UserID employee_name: 员工姓名 department: 部门名称(逗号分隔) position: 岗位 mobile: 手机号 email: 邮箱 avatar: 头像URL is_vip: 是否VIP员工 """ employee_id: str = Field(..., description="企微员工UserID") employee_name: str = Field(default="", description="员工姓名") department: str = Field(default="", description="部门名称") position: str = Field(default="", description="岗位") mobile: str = Field(default="", description="手机号") email: str = Field(default="", description="邮箱") avatar: str = Field(default="", description="头像URL") is_vip: bool = Field(default=False, description="是否VIP员工") # -------------------------------------------------------------------------- # 审批链接响应 Schema # -------------------------------------------------------------------------- class ApprovalLinkResponse(BaseModel): """审批链接响应 Schema。 H5用户端AI助手面板中的审批流程链接。 Attributes: id: 链接ID category: 分类 title: 审批名称 url: 审批链接 sort_order: 排序权重 """ id: str category: str title: str url: str sort_order: int model_config = {"from_attributes": True} # -------------------------------------------------------------------------- # 软件下载响应 Schema # -------------------------------------------------------------------------- class SoftwareDownloadResponse(BaseModel): """软件下载响应 Schema。 H5用户端AI助手面板中的软件下载入口。 Attributes: id: 下载入口ID category: 分类 name: 软件名称 version: 版本号 platform: 平台 download_url: 下载链接 sort_order: 排序权重 """ id: str category: str name: str version: str platform: str download_url: str sort_order: int model_config = {"from_attributes": True} # -------------------------------------------------------------------------- # 审批链接列表响应 Schema # -------------------------------------------------------------------------- class ApprovalLinkListResponse(BaseModel): """审批链接列表响应 Schema。 Attributes: items: 审批链接列表 """ items: List[ApprovalLinkResponse] # -------------------------------------------------------------------------- # 软件下载列表响应 Schema # -------------------------------------------------------------------------- class SoftwareDownloadListResponse(BaseModel): """软件下载列表响应 Schema。 Attributes: items: 软件下载列表 """ items: List[SoftwareDownloadResponse]