modify: auth 插件
This commit is contained in:
@@ -0,0 +1,74 @@
|
||||
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()
|
||||
)
|
||||
Reference in New Issue
Block a user