feat: 添加更新昵称功能 backend

This commit is contained in:
penghanyuan
2026-01-29 18:40:16 +01:00
parent 4dc56a21b8
commit dbabce77bf

View File

@@ -100,6 +100,11 @@ class ChangePhoneRequest(BaseModel):
code: str = Field(..., min_length=6, max_length=6, description="验证码6位")
class UpdateNicknameRequest(BaseModel):
"""更新昵称请求"""
nickname: str = Field(..., min_length=1, max_length=50, description="昵称1-50个字符")
# 响应模型
class TokenResponse(BaseModel):
"""令牌响应"""
@@ -659,25 +664,21 @@ async def login_with_sms(
# 如果用户不存在,自动注册
if not user:
# 注册时需要提供昵称
if not request.nickname or len(request.nickname.strip()) == 0:
raise HTTPException(
status_code=status.HTTP_400_BAD_REQUEST,
detail="首次登录需要设置昵称"
)
# 创建新用户
user_id = str(uuid.uuid4())
# 生成一个随机密码(用户不会用到,但数据库要求必填)
random_password = secrets.token_urlsafe(32)
password_hash = hash_password(random_password)
# 如果提供了昵称就使用,否则使用空字符串(表示需要后续设置)
nickname = request.nickname.strip() if request.nickname else ""
user = User(
id=user_id,
phone=request.phone,
password_hash=password_hash,
email=None,
nickname=request.nickname.strip(),
nickname=nickname,
subscription_type="free",
created_at=datetime.now(timezone.utc)
)
@@ -922,6 +923,33 @@ async def change_phone(
)
@router.put("/me/nickname", response_model=UserResponse)
async def update_nickname(
request: UpdateNicknameRequest,
current_user: User = Depends(get_current_user),
db: AsyncSession = Depends(get_async_db)
):
"""
更新用户昵称
用于首次登录后设置昵称,或修改现有昵称
"""
# 更新昵称
current_user.nickname = request.nickname.strip()
await db.commit()
await db.refresh(current_user)
return UserResponse(
id=current_user.id,
phone=current_user.phone,
email=current_user.email,
nickname=current_user.nickname,
avatar_url=current_user.avatar_url,
subscription_type=current_user.subscription_type,
created_at=current_user.created_at.isoformat()
)
@router.post("/logout/all")
async def logout_all_devices(
current_user: User = Depends(get_current_user),