import time from datetime import datetime from sqlalchemy import select from chongming_worker import rpc_method from chongming_password import hash_password from ..models.pydantic import ( RegisterPostRequest, RegisterPostResponse ) from ..models.auth import Users @rpc_method( subject="auth.register", method="POST", summary="用户注册", response_model=RegisterPostResponse, ) async def register(register_post_request: RegisterPostRequest) -> RegisterPostResponse: from ..global_var import db if db is None: raise RuntimeError("Database not initialized") username = register_post_request.username.strip() email = register_post_request.email.strip() full_name = register_post_request.full_name.strip() or None phone = register_post_request.phone.strip() or None # 校验必填字段 if not username: return RegisterPostResponse( result="fail", message="用户名不能为空", timestamp=time.time() ) if not email: return RegisterPostResponse( result="fail", message="邮箱不能为空", timestamp=time.time() ) if not register_post_request.password: return RegisterPostResponse( result="fail", message="密码不能为空", timestamp=time.time() ) async with db.get_session() as session: # 检查用户名是否已存在 stmt = select(Users).filter_by(username=username) result = await session.execute(stmt) if result.scalar_one_or_none() is not None: return RegisterPostResponse( result="fail", message="用户名已存在", timestamp=time.time() ) # 检查邮箱是否已存在 stmt = select(Users).filter_by(email=email) result = await session.execute(stmt) if result.scalar_one_or_none() is not None: return RegisterPostResponse( result="fail", message="邮箱已被注册", timestamp=time.time() ) # 创建新用户 user = Users( username=username, hashed_password=hash_password(register_post_request.password), email=email, full_name=full_name, phone=phone, created_at=datetime.now(), updated_at=datetime.now(), ) session.add(user) await session.commit() await session.refresh(user) return RegisterPostResponse( result="success", message="注册成功", user_id=user.id, timestamp=time.time() )