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() )