Spaces:
Running
Running
| # models.py | |
| from pydantic import BaseModel | |
| from typing import Optional, List | |
| class SendCodeRequest(BaseModel): | |
| contact: str | |
| contact_type: str | |
| action_type: str | |
| account: Optional[str] = None | |
| class UserRegister(BaseModel): | |
| account: str | |
| password: str | |
| email: str | |
| phone: Optional[str] = "" | |
| name: str | |
| gender: str | |
| code: str | |
| avatarDataUrl: Optional[str] = None | |
| age: Optional[int] = None | |
| country: Optional[str] = None | |
| region: Optional[str] = None | |
| intro: Optional[str] = None | |
| class UserLogin(BaseModel): | |
| account: str | |
| password: str | |
| class UserUpdate(BaseModel): | |
| name: Optional[str] = None | |
| intro: Optional[str] = None | |
| age: Optional[int] = None | |
| birthday: Optional[str] = None # 🚀 出生日期 | |
| country: Optional[str] = None | |
| region: Optional[str] = None | |
| gender: Optional[str] = None | |
| avatarDataUrl: Optional[str] = None | |
| bannerUrl: Optional[str] = None # 🚀 个人资料卡背景图云端URL | |
| class PasswordReset(BaseModel): | |
| old_password: Optional[str] = None | |
| new_password: str | |
| verifyContact: str | |
| verifyType: str | |
| code: str | |
| account: str | |
| class CommentCreate(BaseModel): | |
| item_id: str | |
| author: str | |
| content: str | |
| reply_to_user: Optional[str] = None | |
| parent_id: Optional[str] = None | |
| class ItemCreate(BaseModel): | |
| type: str | |
| title: str | |
| shortDesc: str | |
| fullDesc: str | |
| link: str | |
| coverUrl: Optional[str] = None | |
| imageUrls: Optional[List[str]] = [] | |
| author: str | |
| price: int = 0 | |
| github_token: Optional[str] = None | |
| class ItemUpdate(BaseModel): | |
| title: Optional[str] = None | |
| shortDesc: Optional[str] = None | |
| fullDesc: Optional[str] = None | |
| link: Optional[str] = None | |
| coverUrl: Optional[str] = None | |
| imageUrls: Optional[List[str]] = [] | |
| price: Optional[int] = None | |
| github_token: Optional[str] = None | |
| class FollowToggle(BaseModel): | |
| user_id: str | |
| target_account: str | |
| is_active: bool | |
| class PrivateMessage(BaseModel): | |
| sender: str | |
| receiver: str | |
| content: str | |
| class PrivacySettings(BaseModel): | |
| follows: bool | |
| likes: bool | |
| favorites: bool | |
| downloads: bool | |
| class InteractionToggle(BaseModel): | |
| item_id: str | |
| user_id: str | |
| action_type: str | |
| is_active: bool | |
| class RechargeRequest(BaseModel): | |
| account: str | |
| amount: int | |
| method: Optional[str] = "alipay" | |
| class PurchaseRequest(BaseModel): | |
| account: str | |
| item_id: str | |
| class TipRequest(BaseModel): | |
| sender_account: str | |
| target_account: str | |
| amount: int | |
| is_anonymous: bool | |
| item_id: Optional[str] = None # 🚀 新增:记录是为哪个作品打赏的 | |
| class WithdrawRequest(BaseModel): | |
| account: str | |
| amount: int | |
| alipayAccount: str | |
| real_name: str | |
| code: str | |
| # ========================================== | |
| # 💬 讨论区数据模型 | |
| # ========================================== | |
| class PostCreate(BaseModel): | |
| """ 发布讨论区内容 """ | |
| title: str # 标题 | |
| content: str # 文案内容 | |
| coverImage: str # 封面图 | |
| images: Optional[List[str]] = [] # 详情图(最多9张) | |
| author: str # 作者账号 | |
| class PostUpdate(BaseModel): | |
| """ 更新讨论区内容 """ | |
| title: Optional[str] = None | |
| content: Optional[str] = None | |
| coverImage: Optional[str] = None | |
| images: Optional[List[str]] = None | |
| class PostInteraction(BaseModel): | |
| """ 讨论区互动(点赞/收藏) """ | |
| post_id: str | |
| user_id: str | |
| action_type: str # like / favorite | |
| is_active: bool # True=添加, False=取消 | |
| # ========================================== | |
| # 📝 任务榜数据模型 | |
| # ========================================== | |
| class TaskCreate(BaseModel): | |
| """ 发布新任务 """ | |
| title: str # 任务标题 | |
| description: str # 任务详情 | |
| referenceImages: Optional[List[str]] = [] # 参考图(最多6张) | |
| referenceLink: Optional[str] = None # 参考链接 | |
| totalPrice: int # 总价格(积分) | |
| depositRatio: int # 订金比例(10/20/30/50) | |
| deadline: str # 截止时间 (ISO格式) | |
| publisher: str # 发布者账号 | |
| class TaskUpdate(BaseModel): | |
| """ 更新任务 """ | |
| title: Optional[str] = None | |
| description: Optional[str] = None | |
| referenceImages: Optional[List[str]] = None | |
| referenceLink: Optional[str] = None | |
| totalPrice: Optional[int] = None | |
| depositRatio: Optional[int] = None | |
| deadline: Optional[str] = None | |
| class TaskApply(BaseModel): | |
| """ 申请接单 """ | |
| task_id: str | |
| applicant: str # 申请者账号 | |
| message: Optional[str] = None # 申请留言 | |
| class TaskAssign(BaseModel): | |
| """ 指派接单者 """ | |
| task_id: str | |
| publisher: str # 发布者(校验权限) | |
| assignee: str # 被指派的接单者 | |
| class TaskSubmit(BaseModel): | |
| """ 接单者提交成果 """ | |
| task_id: str | |
| assignee: str # 接单者(校验权限) | |
| deliverables: List[str] # 交付物图片URL列表 | |
| note: Optional[str] = None # 备注说明 | |
| class TaskAccept(BaseModel): | |
| """ 发布者验收 """ | |
| task_id: str | |
| publisher: str # 发布者(校验权限) | |
| is_accepted: bool # True=验收通过, False=验收不通过 | |
| feedback: Optional[str] = None # 反馈意见 | |
| # ========================================== | |
| # ⚖️ P3增强:任务申诉数据模型 | |
| # ========================================== | |
| class TaskDispute(BaseModel): | |
| """ 发起申诉 """ | |
| task_id: str # 任务ID | |
| initiator: str # 申诉发起人(可以是发布者或接单者) | |
| reason: str # 申诉理由 | |
| evidence: Optional[List[str]] = [] # 证据图片URL列表 | |
| class TaskDisputeResponse(BaseModel): | |
| """ 被申诉方回应 """ | |
| dispute_id: str # 申诉ID | |
| respondent: str # 回应人 | |
| response: str # 回应内容 | |
| evidence: Optional[List[str]] = [] # 证据图片URL列表 | |
| class TaskDisputeResolve(BaseModel): | |
| """ 管理员仲裁 """ | |
| dispute_id: str # 申诉ID | |
| admin_account: str # 管理员账号 | |
| result: str # 仲裁结果: support_initiator / support_respondent / split | |
| split_ratio: Optional[int] = 50 # 分成比例(申诉方获得的百分比,仅当result=split时有效) | |
| admin_note: Optional[str] = None # 管理员备注 |