新增管理员创建用户接口 POST /admin/users,创建后邮箱自动确认

This commit is contained in:
2026-07-26 02:20:03 +08:00
parent 8149505f1b
commit 0776e91735
3 changed files with 116 additions and 0 deletions
+29
View File
@@ -6,6 +6,7 @@ from zoneinfo import ZoneInfo
from fastapi import APIRouter, HTTPException, Query, status
from sqlalchemy import case, func, select, update
from sqlalchemy.exc import IntegrityError
from sqlalchemy.orm import joinedload, selectinload
from app.deps import AdminUser, DbSession
@@ -13,6 +14,7 @@ from app.models import Cloud, Profile, User
from app.schemas import (
AdminCloudStatusIn,
AdminCloudVisibilityIn,
AdminCreateUserIn,
AdminStatsOut,
AdminUserOut,
AdminUserUpdateIn,
@@ -22,6 +24,7 @@ from app.schemas import (
DeleteResultOut,
PageOut,
)
from app.security import hash_password, utc_now
from app.serializers import cloud_out, profile_out, user_out
from app.services.storage import delete_files
@@ -83,6 +86,32 @@ async def list_users(
)
@router.post("/users", response_model=AdminUserOut, status_code=status.HTTP_201_CREATED)
async def create_user(
payload: AdminCreateUserIn,
_: AdminUser,
db: DbSession,
) -> AdminUserOut:
email = str(payload.email).strip().lower()
user = User(
email=email,
password_hash=hash_password(payload.password),
email_verified_at=utc_now(),
)
user.profile = Profile(username=payload.username, role=payload.role)
db.add(user)
try:
await db.commit()
except IntegrityError as exc:
await db.rollback()
message = str(exc.orig).lower()
if "email" in message:
raise HTTPException(status_code=status.HTTP_409_CONFLICT, detail="该邮箱已被注册") from exc
raise HTTPException(status_code=status.HTTP_409_CONFLICT, detail="这个昵称已经被使用") from exc
await db.refresh(user, ["profile"])
return AdminUserOut(user=user_out(user), profile=profile_out(user.profile))
@router.patch("/users/{user_id}", response_model=AdminUserOut)
async def update_user(
user_id: uuid.UUID,