from pydantic import BaseModel, Field from typing import Optional, List, Any from datetime import datetime class ContractItemResponse(BaseModel): """合同项响应模型(contract_url 中的单个合同项)""" contract_url: str = Field(description="合同模版链接") file_name: str = Field(description="签署的合同的文件名称") file_id: str = Field(description="生成的文件ID") status: int = Field(description="签署状态 0 未签署 1 已签署") sign_flow_id: str = Field(description="签署流程ID") sign_url: str = Field(default="", description="e签宝生成的签署页面") signing_time: str = Field(default="", description="签署合同的时间") effective_time: str = Field(default="", description="合同生效的时间") expiry_time: str = Field(default="", description="合同失效的时间") contract_download_url: str = Field(default="", description="合同签署完成后下载文件的链接") is_master: int = Field(description="是否是入驻店铺的协议合同 是 1 否 0") class ContractStoreResponse(BaseModel): """合同记录响应模型""" id: int = Field(description="主键") store_id: int = Field(description="店铺id") store_name: str = Field(description="商家店铺名称") business_segment: str = Field(description="经营板块") merchant_name: str = Field(description="商家姓名") contact_phone: str = Field(description="联系电话") signing_status: str = Field(description="签署状态(已签署,未签署,已到期)") contract_url: str = Field(description="合同URL(JSON字符串)") ord_id: str = Field(description="入驻商家的社会同一信用代码") signing_time: Optional[datetime] = Field(default=None, description="签署时间") effective_time: Optional[datetime] = Field(default=None, description="生效时间") expiry_time: Optional[datetime] = Field(default=None, description="到期时间") created_time: Optional[datetime] = Field(default=None, description="创建时间") updated_time: Optional[datetime] = Field(default=None, description="更新时间") class Config: from_attributes = True class ContractStoreDetailResponse(BaseModel): """合同记录详情响应模型(包含解析后的 contract_url)""" id: int = Field(description="主键") store_id: int = Field(description="店铺id") store_name: str = Field(description="商家店铺名称") business_segment: str = Field(description="经营板块") merchant_name: str = Field(description="商家姓名") contact_phone: str = Field(description="联系电话") signing_status: str = Field(description="签署状态(已签署,未签署,已到期)") contract_items: List[ContractItemResponse] = Field(description="合同项列表(解析后的 contract_url)") ord_id: str = Field(description="入驻商家的社会同一信用代码") signing_time: Optional[datetime] = Field(default=None, description="签署时间") effective_time: Optional[datetime] = Field(default=None, description="生效时间") expiry_time: Optional[datetime] = Field(default=None, description="到期时间") created_time: Optional[datetime] = Field(default=None, description="创建时间") updated_time: Optional[datetime] = Field(default=None, description="更新时间") class TemplatesCreateResponse(BaseModel): """创建模板响应模型""" success: bool = Field(description="是否成功") message: str = Field(description="响应消息") sign_flow_id: Optional[str] = Field(default=None, description="签署流程ID") file_id: Optional[str] = Field(default=None, description="文件ID") contract_url: Optional[str] = Field(default=None, description="合同URL") class SignUrlResponse(BaseModel): """获取签署URL响应模型""" success: bool = Field(description="是否成功") data: dict = Field(description="响应数据", default_factory=dict) class Config: json_schema_extra = { "example": { "success": True, "data": { "url": "https://example.com/sign" } } } class ErrorResponse(BaseModel): """错误响应模型""" success: bool = Field(default=False, description="是否成功") message: str = Field(description="错误消息") raw: Optional[Any] = Field(default=None, description="原始错误数据") class SuccessResponse(BaseModel): """通用成功响应模型""" code: str = Field(description="响应代码") msg: str = Field(description="响应消息") class PaginatedResponse(BaseModel): """分页响应模型""" items: List[ContractStoreResponse] = Field(description="数据列表") total: int = Field(description="总记录数") page: int = Field(description="当前页码") page_size: int = Field(description="每页条数") total_pages: int = Field(description="总页数") class ModuleStatusResponse(BaseModel): """模块状态响应模型""" module: str = Field(description="模块名称") status: str = Field(description="状态")