Files
chongming-plugins/auth/router/update_profile.py
T
2026-07-23 17:45:44 +08:00

75 lines
2.3 KiB
Python

import time
from datetime import datetime
from sqlalchemy import select
from chongming_worker import rpc_method
from ..models.pydantic import (
UpdateProfilePostRequest,
UpdateProfilePostResponse
)
from ..models.auth import Users
@rpc_method(
subject="auth.update_profile",
method="POST",
summary="更新用户资料",
response_model=UpdateProfilePostResponse,
)
async def update_profile(update_profile_post_request: UpdateProfilePostRequest) -> UpdateProfilePostResponse:
from ..global_var import db
if db is None:
raise RuntimeError("Database not initialized")
user_id = update_profile_post_request.user_id
async with db.get_session() as session:
stmt = select(Users).filter_by(id=user_id)
result = await session.execute(stmt)
user: Users | None = result.scalar_one_or_none()
if user is None:
return UpdateProfilePostResponse(
result="fail",
message="用户不存在",
timestamp=time.time()
)
# 更新字段(只更新非空值)
full_name = update_profile_post_request.full_name.strip()
email = update_profile_post_request.email.strip()
avatar_url = update_profile_post_request.avatar_url.strip()
phone = update_profile_post_request.phone.strip()
if full_name:
user.full_name = full_name
if email:
# 检查邮箱是否被其他用户占用
if email != user.email:
check_stmt = select(Users).filter_by(email=email)
check_result = await session.execute(check_stmt)
if check_result.scalar_one_or_none() is not None:
return UpdateProfilePostResponse(
result="fail",
message="邮箱已被其他用户使用",
timestamp=time.time()
)
user.email = email
if avatar_url:
user.avatar_url = avatar_url
if phone:
user.phone = phone
user.updated_at = datetime.now()
session.add(user)
await session.commit()
return UpdateProfilePostResponse(
result="success",
message="资料更新成功",
timestamp=time.time()
)