2022-10-04 04:40:11 +00:00
|
|
|
from fastapi import APIRouter, Depends, Query
|
2022-09-12 07:11:12 +00:00
|
|
|
|
2022-10-04 04:40:11 +00:00
|
|
|
from core.security import check_permissions, get_password_hash
|
2022-09-18 07:01:20 +00:00
|
|
|
from dbhelper.user import (
|
|
|
|
del_user,
|
|
|
|
get_user,
|
|
|
|
get_user_info,
|
|
|
|
get_users,
|
|
|
|
insert_user,
|
|
|
|
put_user,
|
|
|
|
select_role,
|
|
|
|
)
|
2022-09-12 15:22:18 +00:00
|
|
|
from schemas import Response, UserAdd, UserInfo, UserPut, UserQuery, UserRead
|
2022-09-11 10:34:18 +00:00
|
|
|
from schemas.common import ListAll
|
|
|
|
|
2022-10-04 04:40:11 +00:00
|
|
|
router = APIRouter(prefix="/user", tags=["用户管理"])
|
2022-09-11 10:34:18 +00:00
|
|
|
|
2022-10-04 04:40:11 +00:00
|
|
|
|
|
|
|
@router.post("", summary="用户新增", response_model=Response[UserRead])
|
|
|
|
async def user_add(data: UserAdd):
|
2022-09-12 07:11:12 +00:00
|
|
|
"""新增用户并分配角色 一步到位"""
|
2022-09-12 15:22:18 +00:00
|
|
|
if await get_user({"username": data.username}) is not None:
|
|
|
|
return Response(code=400, msg="用户名已存在")
|
2022-09-16 03:52:08 +00:00
|
|
|
rids = data.roles
|
|
|
|
del data.roles
|
2022-09-12 07:11:12 +00:00
|
|
|
data.password = get_password_hash(data.password)
|
2022-09-16 03:52:08 +00:00
|
|
|
result = await insert_user(data, rids)
|
2022-09-12 15:22:18 +00:00
|
|
|
if isinstance(result, int):
|
|
|
|
return Response(code=400, msg=f"角色{result}不存在")
|
|
|
|
return Response(data=result)
|
2022-09-12 07:11:12 +00:00
|
|
|
|
|
|
|
|
2022-10-04 04:40:11 +00:00
|
|
|
@router.get("/{pk}", summary="用户信息", response_model=Response[UserInfo])
|
|
|
|
async def user_info(pk: int):
|
2022-09-12 15:22:18 +00:00
|
|
|
"""获取用户信息"""
|
|
|
|
obj = await get_user({"id": pk})
|
|
|
|
if obj is None:
|
|
|
|
return Response(code=400, msg="用户不存在")
|
|
|
|
return Response(data=await get_user_info(obj))
|
2022-09-11 10:34:18 +00:00
|
|
|
|
|
|
|
|
2022-10-04 04:40:11 +00:00
|
|
|
@router.get("", summary="用户列表", response_model=Response[ListAll[list[UserRead]]])
|
2022-09-12 07:11:12 +00:00
|
|
|
async def user_arr(
|
|
|
|
offset: int = Query(default=1, description="偏移量-页码"),
|
|
|
|
limit: int = Query(default=10, description="数据量"),
|
2022-10-04 04:40:11 +00:00
|
|
|
):
|
2022-09-12 15:22:18 +00:00
|
|
|
"""分页列表数据"""
|
2022-09-12 07:11:12 +00:00
|
|
|
skip = (offset - 1) * limit
|
|
|
|
users, count = await get_users(skip, limit)
|
|
|
|
return Response(data=ListAll(total=count, items=users))
|
2022-09-11 10:34:18 +00:00
|
|
|
|
|
|
|
|
2022-10-04 04:40:11 +00:00
|
|
|
@router.post("/query", summary="用户查询", response_model=Response[ListAll[list[UserRead]]])
|
|
|
|
async def user_list(query: UserQuery):
|
2022-09-12 07:11:12 +00:00
|
|
|
"""post查询用户列表"""
|
2022-09-15 09:29:15 +00:00
|
|
|
size = query.limit
|
|
|
|
skip = (query.offset - 1) * size
|
|
|
|
del query.offset, query.limit
|
|
|
|
users, count = await get_users(skip, size, query.dict())
|
2022-09-11 10:34:18 +00:00
|
|
|
return Response(data=ListAll(total=count, items=users))
|
2022-09-12 15:22:18 +00:00
|
|
|
|
|
|
|
|
2022-10-04 04:40:11 +00:00
|
|
|
@router.delete("/{pk}", summary="用户删除", response_model=Response)
|
|
|
|
async def user_del(pk: int):
|
2022-09-12 15:22:18 +00:00
|
|
|
"""删除用户"""
|
|
|
|
if await del_user(pk) == 0:
|
|
|
|
return Response(code=400, msg="用户不存在")
|
|
|
|
return Response()
|
|
|
|
|
|
|
|
|
2022-10-04 04:40:11 +00:00
|
|
|
@router.put("/{pk}", summary="用户更新", response_model=Response)
|
|
|
|
async def user_put(pk: int, data: UserPut):
|
2022-09-12 15:22:18 +00:00
|
|
|
"""更新用户"""
|
|
|
|
if await get_user({"id": pk}) is None:
|
|
|
|
return Response(code=400, msg="用户不存在")
|
|
|
|
|
|
|
|
result = await put_user(pk, data)
|
|
|
|
if isinstance(result, int):
|
|
|
|
return Response(code=400, msg=f"角色不存在{result}")
|
|
|
|
return Response()
|
2022-09-13 16:39:19 +00:00
|
|
|
|
|
|
|
|
2022-10-04 04:40:11 +00:00
|
|
|
@router.put("/role/{rid}", summary="用户切换角色", response_model=Response)
|
|
|
|
async def user_select_role(rid: int, user=Depends(check_permissions)):
|
2022-09-13 16:39:19 +00:00
|
|
|
"""用户切换角色"""
|
|
|
|
res = await select_role(user.id, rid)
|
|
|
|
if res == 0:
|
|
|
|
return Response(code=400, msg=f"角色不存在{res}")
|
|
|
|
return Response()
|