调整账号注册与删除流程
This commit is contained in:
+17
-24
@@ -13,6 +13,8 @@ from app.core.config import (
|
||||
PROTECTED_ADMIN_FULL_NAME,
|
||||
)
|
||||
from app.core.security import hash_password
|
||||
from app.models.audit_log import AuditLog
|
||||
from app.models.permission_access_log import PermissionAccessLog
|
||||
from app.models.study_member import StudyMember
|
||||
from app.models.user import User, UserStatus
|
||||
from app.schemas.user import UserCreate, UserRegisterRequest, UserUpdate
|
||||
@@ -53,8 +55,8 @@ async def create_user(
|
||||
return user
|
||||
|
||||
|
||||
async def create_pending_user(db: AsyncSession, user_in: UserRegisterRequest) -> User:
|
||||
return await create_user(db, UserCreate(**user_in.model_dump()), status=UserStatus.PENDING)
|
||||
async def create_registered_user(db: AsyncSession, user_in: UserRegisterRequest) -> User:
|
||||
return await create_user(db, UserCreate(**user_in.model_dump()), status=UserStatus.ACTIVE)
|
||||
|
||||
|
||||
async def update_user(db: AsyncSession, user: User, user_in: UserUpdate) -> User:
|
||||
@@ -150,6 +152,19 @@ async def count_active_admins(db: AsyncSession) -> int:
|
||||
return int(result.scalar_one() or 0)
|
||||
|
||||
|
||||
async def user_has_retained_history(db: AsyncSession, user_id: uuid.UUID) -> bool:
|
||||
audit_count = await db.scalar(
|
||||
select(func.count()).select_from(AuditLog).where(AuditLog.operator_id == user_id)
|
||||
)
|
||||
if int(audit_count or 0) > 0:
|
||||
return True
|
||||
|
||||
permission_log_count = await db.scalar(
|
||||
select(func.count()).select_from(PermissionAccessLog).where(PermissionAccessLog.user_id == user_id)
|
||||
)
|
||||
return int(permission_log_count or 0) > 0
|
||||
|
||||
|
||||
async def list_users_by_status(
|
||||
db: AsyncSession, status: UserStatus | None = None, skip: int = 0, limit: int = 100
|
||||
) -> Sequence[User]:
|
||||
@@ -189,25 +204,3 @@ async def delete_user(db: AsyncSession, user: User) -> None:
|
||||
await db.execute(delete(StudyMember).where(StudyMember.user_id == user.id))
|
||||
await db.delete(user)
|
||||
await db.commit()
|
||||
|
||||
|
||||
async def approve_user(db: AsyncSession, user: User, admin_id: uuid.UUID) -> User:
|
||||
await db.execute(
|
||||
update(User)
|
||||
.where(User.id == user.id)
|
||||
.values(status=UserStatus.ACTIVE, approved_by=admin_id, approved_at=func.now())
|
||||
)
|
||||
await db.commit()
|
||||
await db.refresh(user)
|
||||
return user
|
||||
|
||||
|
||||
async def reject_user(db: AsyncSession, user: User, admin_id: uuid.UUID) -> User:
|
||||
await db.execute(
|
||||
update(User)
|
||||
.where(User.id == user.id)
|
||||
.values(status=UserStatus.REJECTED, approved_by=admin_id, approved_at=func.now())
|
||||
)
|
||||
await db.commit()
|
||||
await db.refresh(user)
|
||||
return user
|
||||
|
||||
Reference in New Issue
Block a user