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