- Profile API: GET/PUT /profile + PUT /profile/password - Messages API: 模型/迁移(005)/服务/路由 + 任务操作自动创建消息 - SSE 推送集成: tasks.py 中 6 个操作触发 SSE 通知 - Alembic 迁移: 004 audit_logs + 005 messages - env.py 导入所有模型确保迁移正确 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
78 lines
2.1 KiB
Python
78 lines
2.1 KiB
Python
"""
|
|
用户资料相关 Schema
|
|
"""
|
|
from typing import Optional
|
|
from datetime import datetime
|
|
from pydantic import BaseModel, Field
|
|
|
|
|
|
# ===== 角色附加信息 =====
|
|
|
|
class BrandProfile(BaseModel):
|
|
id: str
|
|
name: str
|
|
logo: Optional[str] = None
|
|
description: Optional[str] = None
|
|
contact_name: Optional[str] = None
|
|
contact_phone: Optional[str] = None
|
|
contact_email: Optional[str] = None
|
|
|
|
|
|
class AgencyProfile(BaseModel):
|
|
id: str
|
|
name: str
|
|
logo: Optional[str] = None
|
|
description: Optional[str] = None
|
|
contact_name: Optional[str] = None
|
|
contact_phone: Optional[str] = None
|
|
contact_email: Optional[str] = None
|
|
|
|
|
|
class CreatorProfile(BaseModel):
|
|
id: str
|
|
name: str
|
|
avatar: Optional[str] = None
|
|
bio: Optional[str] = None
|
|
douyin_account: Optional[str] = None
|
|
xiaohongshu_account: Optional[str] = None
|
|
bilibili_account: Optional[str] = None
|
|
|
|
|
|
# ===== 响应 =====
|
|
|
|
class ProfileResponse(BaseModel):
|
|
id: str
|
|
email: Optional[str] = None
|
|
phone: Optional[str] = None
|
|
name: str
|
|
avatar: Optional[str] = None
|
|
role: str
|
|
is_verified: bool = False
|
|
created_at: Optional[datetime] = None
|
|
brand: Optional[BrandProfile] = None
|
|
agency: Optional[AgencyProfile] = None
|
|
creator: Optional[CreatorProfile] = None
|
|
|
|
|
|
# ===== 请求 =====
|
|
|
|
class ProfileUpdateRequest(BaseModel):
|
|
name: Optional[str] = Field(None, max_length=100)
|
|
avatar: Optional[str] = Field(None, max_length=2048)
|
|
phone: Optional[str] = Field(None, max_length=20)
|
|
# 品牌方/代理商字段
|
|
description: Optional[str] = None
|
|
contact_name: Optional[str] = Field(None, max_length=100)
|
|
contact_phone: Optional[str] = Field(None, max_length=20)
|
|
contact_email: Optional[str] = Field(None, max_length=255)
|
|
# 达人字段
|
|
bio: Optional[str] = None
|
|
douyin_account: Optional[str] = Field(None, max_length=100)
|
|
xiaohongshu_account: Optional[str] = Field(None, max_length=100)
|
|
bilibili_account: Optional[str] = Field(None, max_length=100)
|
|
|
|
|
|
class ChangePasswordRequest(BaseModel):
|
|
old_password: str = Field(..., min_length=6)
|
|
new_password: str = Field(..., min_length=6)
|