user-wsc/AppUser/Router/UserAdminRouter.py

127 lines
4.2 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

from fastapi import APIRouter, Depends, HTTPException
from sqlalchemy.orm import Session
from AppUser.Crud import UserCrud, RoleCrud, DepartmentCrud
from AppUser.Model import UserModel
from AppUser.Schemas import UserSchemas
from Utils.DataBase.SqlAlchemyUtils import get_db, engine
from Utils.AccessControl.AccessUtil import ac_admin
from Utils.MessageUtils import EmailHelper
UserModel.Base.metadata.create_all(bind=engine)
router = APIRouter(
tags=["用户管理"],
prefix="/api/user/admin",
dependencies=[
Depends(ac_admin)
]
)
@router.post("/create", summary="新建用户")
def func01(schema: UserSchemas.CreateReqBody, db: Session = Depends(get_db)):
# 检查邮箱是否存在
user_obj = UserCrud.get_user_by_email(db=db, email=schema.email)
if user_obj:
raise HTTPException(status_code=202, detail="Email already registered")
# 检查角色是否存在
role_obj = RoleCrud.get_role_by_id(db=db, role_id=schema.role_id)
if not role_obj:
raise HTTPException(status_code=202, detail="Role Not Existed")
# 检查部门是否存在
department_obj = DepartmentCrud.get_department_by_id(db=db, department_id=schema.department_id)
if not department_obj:
raise HTTPException(status_code=202, detail="Department Not Existed")
# 创建用户
UserCrud.create_user(db=db, schema=schema)
# 发送邮件
title = "【远东资信】账号添加成功"
msg_body = "管理员已为您添加'数字化业务系统'账号。" \
"访问地址【https://www.fecribd.com/】; " \
"登录邮箱:【{}】; 初始密码: 【Fecr1988.】。".format(schema.email)
EmailHelper.send_email(title=title, email=schema.email, msg_body=msg_body)
return {"info": "Success"}
@router.post("/delete/{uid}", summary="删除用户")
def func02(uid: str, db: Session = Depends(get_db)):
# 检查用户是否存在
data = UserCrud.get_user_by_id(db=db, uid=uid)
if not data:
raise HTTPException(status_code=404, detail="User Not found")
# 删除用户
UserCrud.delete_user(db=db, uid=uid)
return {"info": "Success"}
@router.post("/edit/{uid}", summary="编辑用户")
def func03(uid: str, schema: UserSchemas.EditReqBody, db: Session = Depends(get_db)):
# 检查用户是否存在
data = UserCrud.get_user_by_id(db=db, uid=uid)
if not data:
raise HTTPException(status_code=404, detail="User Not found")
# 编辑用户
result = UserCrud.edit_user(db=db, schema=schema, uid=uid)
if not result:
raise HTTPException(status_code=400, detail="Failed")
return {"info": "Success"}
@router.post("/reset_pwd/{uid}", summary="重置用户密码")
def func04(uid: str, db: Session = Depends(get_db)):
# 检查用户是否存在
data = UserCrud.get_user_by_id(db=db, uid=uid)
if not data:
raise HTTPException(status_code=404, detail="User Not found")
# 重置用户密码
UserCrud.reset_user_pwd(db=db, uid=uid)
# 发送邮件
title = "【远东资信】重置密码成功"
msg_body = "管理员已为您重置'数字化业务系统'账号密码。" \
"访问地址【https://www.fecribd.com/】; " \
"重置密码: 【Fecr1988.】。"
EmailHelper.send_email(title=title, email=data.email, msg_body=msg_body)
return {"info": "Success"}
@router.get("/detail/{uid}", summary="用户信息", response_model=UserSchemas.FullUserResBody)
def func05(uid: str, db: Session = Depends(get_db)):
# 检查用户是否存在
data = UserCrud.get_user_by_id(db=db, uid=uid)
if data is None:
raise HTTPException(status_code=404, detail="User Not found")
return data.to_dict()
@router.post("/search", summary="查询用户", response_model=UserSchemas.SearchResultResBody)
def func06(schema: UserSchemas.SearchReqBody, page: int = 1, pagesize: int = 20, db: Session = Depends(get_db)):
# 页码设置
page = 1 if page < 1 else (100 if page > 100 else page)
pagesize = 20 if (pagesize < 5 or pagesize > 20) else pagesize
# 查询
data, total = UserCrud.search_users(db, schema=schema, page=page, pagesize=pagesize)
return {"result": data, "total": total}