115 lines
4.5 KiB
Python
115 lines
4.5 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(request_data: dict = Depends(requestDict)):
|
|
userId = int(request_data.get("query").get("userId"))
|
|
logger.info(f"Получение информации о пользователе {userId}")
|
|
return await UserHandler.get(userId)
|
|
|
|
|
|
@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 = int(request_data.get("body").get("userId"))
|
|
match action:
|
|
case "create":
|
|
result = await UserHandler.add(userData, userId)
|
|
if result:
|
|
response["status"] = "ok"
|
|
case "update":
|
|
logger.info(f"Обновление данных пользователя {userId}")
|
|
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("/check", summary="Проверка авторизации")
|
|
async def check_authentication(request_data: dict = Depends(requestDict)):
|
|
try:
|
|
userId = int(request_data.get("body").get("userId"))
|
|
logger.info(f"Проверка авторизации пользователя {userId}")
|
|
result = await UserHandler.checkActive(userId)
|
|
if result:
|
|
return {"status": "ok"}
|
|
else:
|
|
return {"status": "error"}
|
|
except:
|
|
return {"status": "error"}
|
|
|
|
|
|
@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
|