94 lines
2.7 KiB
Python
94 lines
2.7 KiB
Python
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()
|
||
|
|
)
|