127 lines
4.2 KiB
Python
127 lines
4.2 KiB
Python
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}
|