Your Name ea807974cf feat: 添加 Profile/Messages API 及 SSE 推送集成
- 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>
2026-02-10 10:27:37 +08:00

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)