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}