feat: 添加更新昵称功能 backend
This commit is contained in:
@@ -100,6 +100,11 @@ class ChangePhoneRequest(BaseModel):
|
|||||||
code: str = Field(..., min_length=6, max_length=6, description="验证码(6位)")
|
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):
|
class TokenResponse(BaseModel):
|
||||||
"""令牌响应"""
|
"""令牌响应"""
|
||||||
@@ -659,25 +664,21 @@ async def login_with_sms(
|
|||||||
|
|
||||||
# 如果用户不存在,自动注册
|
# 如果用户不存在,自动注册
|
||||||
if not user:
|
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())
|
user_id = str(uuid.uuid4())
|
||||||
# 生成一个随机密码(用户不会用到,但数据库要求必填)
|
# 生成一个随机密码(用户不会用到,但数据库要求必填)
|
||||||
random_password = secrets.token_urlsafe(32)
|
random_password = secrets.token_urlsafe(32)
|
||||||
password_hash = hash_password(random_password)
|
password_hash = hash_password(random_password)
|
||||||
|
|
||||||
|
# 如果提供了昵称就使用,否则使用空字符串(表示需要后续设置)
|
||||||
|
nickname = request.nickname.strip() if request.nickname else ""
|
||||||
|
|
||||||
user = User(
|
user = User(
|
||||||
id=user_id,
|
id=user_id,
|
||||||
phone=request.phone,
|
phone=request.phone,
|
||||||
password_hash=password_hash,
|
password_hash=password_hash,
|
||||||
email=None,
|
email=None,
|
||||||
nickname=request.nickname.strip(),
|
nickname=nickname,
|
||||||
subscription_type="free",
|
subscription_type="free",
|
||||||
created_at=datetime.now(timezone.utc)
|
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")
|
@router.post("/logout/all")
|
||||||
async def logout_all_devices(
|
async def logout_all_devices(
|
||||||
current_user: User = Depends(get_current_user),
|
current_user: User = Depends(get_current_user),
|
||||||
|
|||||||
Reference in New Issue
Block a user