начало БД

This commit is contained in:
2025-11-29 14:51:45 +03:00
parent c48d1ee383
commit c59db5819f
23 changed files with 713 additions and 1 deletions
+26
View File
@@ -0,0 +1,26 @@
from sqlalchemy import select
from utils import logger
from db import CRUD
from db.schemas import AccessLevel
async def getAccessdata(accessId: int) -> dict:
query = select(AccessLevel).where(AccessLevel.id == accessId)
accessData = await CRUD.read(query)
if not accessData:
logger.error("Уровень доступа не найден")
return {}
return accessData.toDict()
async def editAccessData(accessId: int, **kwargs):
query = select(AccessLevel).where(AccessLevel.id == accessId)
accessData = await CRUD.read(query)
if not accessData:
logger.error("Уровень доступа не найден")
return {}
editedAccessData = await accessData.edit(**kwargs)
logger.info(
f"Уровень доступа {editedAccessData.title} успешно обновлен, изменены данные: {kwargs.keys()}"
)
return editedAccessData.toDict()
+19
View File
@@ -0,0 +1,19 @@
from utils import logger
from db import CRUD
from db.schemas import Toolbox
from sqlalchemy import select
async def addNewToolbox(toolboxData: dict):
title = toolboxData.get("title", None)
if not title:
logger.error("Не указано Назавание тулбокса")
return {}
query = select(Toolbox).where(Toolbox.title == title)
toolbox = await CRUD.read(query)
if toolbox:
logger.error("Тулбокс с таким названием уже существует")
return {}
newToolbox = await Toolbox(**toolboxData).save()
logger.info(f"Тулбокс {newToolbox.title} успешно создан")
return newToolbox.toDict()
+81
View File
@@ -0,0 +1,81 @@
from sqlalchemy import or_, select
from db import CRUD
from db.handlers.toolbox import addNewToolbox
from db.schemas import User
from utils import logger, pwd_hash
async def addNewUser(userData: dict) -> dict:
login = userData.get("login", None)
if not login:
logger.error("Не указан логин")
return {}
userName = userData.get("username")
if not userName:
logger.error("Не указано имя пользователя")
return {}
query = select(User).where(or_(User.login == login, User.username == userName))
user = await CRUD.read(query)
if user:
logger.error("Пользователь с таким логином или именем уже существует")
return {}
if "access_level_id" not in userData:
logger.error("Не указан уровень доступа")
return {}
if "password" not in userData:
logger.error("Не указан пароль")
return {}
userData["hashed_password"] = pwd_hash(userData.pop("password"))
newUser = await User(**userData).save()
if not newUser:
logger.error("Ошибка сохранения пользователя")
return {}
logger.info(f"Пользователь {newUser.username} успешно добавлен, id: {newUser.id}")
if newUser.available_own_toolbox:
newToolboxData = {
"title": f"Тулбокс {newUser.username}",
"description": f"Оборудование, полученное сотрудником {newUser.username}, под личную материальную ответственность",
"owner_id": newUser.id,
}
newToolbox = await addNewToolbox(newToolboxData)
logger.info(
f"Тулбокс {newToolbox['title']} успешно создан и закреплен за пользователем {newUser.username}"
)
return newUser.toDict()
async def editUser(userData: dict) -> dict:
id = userData.get("id", None)
if not id:
logger.error("Не указан id пользователя")
return {}
query = select(User).where(User.id == id)
user = await CRUD.read(query)
if not user:
logger.error("Пользователь с таким id не найден")
return {}
changedUserData = userData.get("changedUserData", {})
if len(changedUserData.keys()) == 0:
logger.error("Не указаны изменяемые данные")
return {}
if "password" in changedUserData:
userData["hashed_password"] = pwd_hash(changedUserData.pop("password"))
editedUser = await user.edit(**changedUserData)
if not editedUser:
logger.error("Ошибка обновления пользователя")
return {}
logger.info(
f"Пользователь {editedUser.username} успешно обновлен, изменены данные: {changedUserData.keys()}"
)
if not user.available_own_toolbox:
if editedUser.available_own_toolbox:
newToolboxData = {
"title": f"Тулбокс {editedUser.username}",
"description": f"Оборудование, полученное сотрудником {editedUser.username}, под личную материальную ответственность",
"owner_id": editedUser.id,
}
newToolbox = await addNewToolbox(newToolboxData)
logger.info(
f"Тулбокс {newToolbox['title']} успешно создан и закреплен за пользователем {editedUser.username}"
)
return editedUser.toDict()