Управление категориями

This commit is contained in:
2025-12-11 23:07:22 +03:00
parent 56584cc8ff
commit 8b38d69980
11 changed files with 902 additions and 38 deletions
Binary file not shown.
Binary file not shown.
+15 -4
View File
@@ -1,4 +1,5 @@
from sqlalchemy import select
from db.handlers.toolkit import ToolkitHandler
from utils import logger
from db import CRUD
from db.schemas.categories import Category
@@ -32,15 +33,21 @@ class CategoryHandler:
)
return newCategory.toDict()
async def edit(categoryId: int, **kwargs):
async def edit(categoryData: dict, userId: int):
categoryId = categoryData.pop("id", None)
if not categoryId:
logger.error("Не указан id категории")
return {}
query = select(Category).where(Category.id == categoryId)
category = await CRUD.read(query)
if not category:
logger.error("Категория не найдена")
return {}
try:
user_id = kwargs.get("user_id", None)
editedCategory = await category.edit(**kwargs)
logger.info(
f"Обновление категории {category.title} -> {categoryData.get('title')}"
)
editedCategory = await category.edit(**categoryData)
except Exception as e:
logger.error(f"Ошибка обновления категории: {str(e)}")
return {}
@@ -48,7 +55,7 @@ class CategoryHandler:
logger.error("Категория не обновлена")
return {}
await ServiceRecordsHandler.add(
user_id, {f"Обновлена категория {category.title}": editedCategory.toDict()}
userId, {f"Обновлена категория {category.title}": editedCategory.toDict()}
)
logger.info(f"Категория {editedCategory.title} успешно обновлена")
return editedCategory.toDict()
@@ -64,6 +71,10 @@ class CategoryHandler:
return [category.toDict() for category in categories] if categories else []
async def delete(categoryId: int, user_id: int = None):
categoryInUse = await ToolkitHandler.checkCatogoryUse(categoryId)
if categoryInUse:
logger.error("Категория используется в инструментах")
return True
query = select(Category).where(Category.id == categoryId)
category = await CRUD.read(query)
if not category:
+5
View File
@@ -160,6 +160,11 @@ class ToolkitHandler:
toolkits = await CRUD.read(query, True)
return [toolkit.toDict() for toolkit in toolkits] if toolkits else []
async def checkCatogoryUse(category_id: int):
query = select(Toolkit).where(Toolkit.category_id == category_id)
toolkit = await CRUD.read(query)
return True if toolkit else False
async def delete(toolkitId: int, user_id: int = None):
query = select(Toolkit).where(Toolkit.id == toolkitId)
toolkit = await CRUD.read(query)
Binary file not shown.
+2 -2
View File
@@ -23,5 +23,5 @@ class Category(Base):
async def save(self):
return await CRUD.create(self, refresh=True)
async def edit(id: int, **kwargs):
return await CRUD.update(Category, id, **kwargs)
async def edit(self, **kwargs):
return await CRUD.update(Category, self.id, **kwargs)