Files
toolbox/api/routers/user.py
T
2025-12-14 18:48:06 +03:00

98 lines
3.6 KiB
Python

from fastapi import APIRouter, Depends, Request
from db.handlers.access import AccessLevelHandler
from db.handlers.user import UserHandler
from utils import requestDict, logger, render
router = APIRouter()
@router.get("/", name="userInfo", summary="Получение информации о пользователе")
async def get_user():
return
@router.post("/", summary="Правка данных пользователя")
async def manage_user(request_data: dict = Depends(requestDict)):
response = {"status": "error"}
userData = request_data.get("body").get("userData", {})
action = request_data.get("body").get("action")
userId = request_data.get("body").get("userId")
match action:
case "create":
result = await UserHandler.add(userData, userId)
if result:
response["status"] = "ok"
case "update":
result = await UserHandler.edit(userData, user_id=userId)
if "error" not in result:
response["status"] = "ok"
else:
response["message"] = result["error"]
case "delete":
result = await UserHandler.delete(userData["id"], userId)
if "error" not in result:
response["status"] = "ok"
else:
response["message"] = result["error"]
case _:
logger.error(f"Неверное действие: {action}")
return response
@router.post("/level", summary="Правка уровня доступа")
async def manage_access_level(request_data: dict = Depends(requestDict)):
logger.info(request_data.get("body"))
action = request_data.get("body").get("action")
userId = request_data.get("body").get("userId")
levelData = request_data.get("body").get("changedLevelData")
match action:
case "create":
result = await AccessLevelHandler.add(levelData, userId)
if "error" not in result:
return {"status": "ok"}
else:
return {"status": "error", "message": result["error"]}
case "update":
result = await AccessLevelHandler.edit(levelData, userId)
if "error" not in result:
return {"status": "ok"}
else:
return {"status": "error", "message": result["error"]}
case "delete":
result = await AccessLevelHandler.delete(levelData["id"], userId)
if "error" not in result:
return {"status": "ok"}
else:
return {"status": "error", "message": result["error"]}
case _:
logger.error(f"Неверное действие: {action}")
return {"status": "ok"}
@router.get("/login", name="Authentication", summary="Авторизация пользователя")
async def authenticationPage(request: Request):
return await render(request)
@router.post("/login")
async def authentication(
request_data: dict = Depends(requestDict),
):
resultData = {"status": "error", "user": {}, "access": {}}
login = request_data.get("body").get("login", None)
password = request_data.get("body").get("password", None)
if not login or not password:
logger.error("Не указан логин или пароль")
return resultData
userData = await UserHandler.auth(login, password)
if not userData:
return resultData
accessData = await AccessLevelHandler.get(userData["access_level_id"])
if not accessData:
return resultData
resultData["status"] = "ok"
resultData["user"] = userData
resultData["access"] = accessData
return resultData