Files
toolbox/db/handlers/categories.py
T

94 lines
4.0 KiB
Python

from sqlalchemy import select
from utils import logger
from db import CRUD
from db.schemas.categories import Category
from db.handlers.records import ServiceRecordsHandler
class CategoryHandler:
async def add(newCategoryData: dict, user_id: int = None):
title = newCategoryData.get("title", None)
if not title:
logger.error("Не указано название категории")
return {}
query = select(Category).where(Category.title == title)
category = await CRUD.read(query)
if category:
logger.error("Категория с таким названием уже существует")
return {}
try:
newCategory = await Category(**newCategoryData).save()
except Exception as e:
logger.error(f"Ошибка сохранения категории: {str(e)}")
return {}
if not newCategory:
logger.error("Категория не сохранена")
return {}
await ServiceRecordsHandler.add(
user_id, {"Добавлена категория": newCategory.toDict()}
)
logger.info(
f"Категория {newCategory.title} успешно добавлена, id: {newCategory.id}"
)
return newCategory.toDict()
async def edit(categoryId: int, **kwargs):
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)
except Exception as e:
logger.error(f"Ошибка обновления категории: {str(e)}")
return {}
if not editedCategory:
logger.error("Категория не обновлена")
return {}
await ServiceRecordsHandler.add(
user_id, {f"Обновлена категория {category.title}": editedCategory.toDict()}
)
logger.info(f"Категория {editedCategory.title} успешно обновлена")
return editedCategory.toDict()
async def getAll() -> list[dict]:
query = select(Category)
categories = await CRUD.read(query, True)
return [category.toDict() for category in categories] if categories else []
async def delete(categoryId: int, user_id: int = None):
query = select(Category).where(Category.id == categoryId)
category = await CRUD.read(query)
if not category:
logger.error("Категория не найдена")
return False
try:
categoryTitle = category.title
result = await CRUD.delete(category)
except Exception as e:
logger.error(f"Ошибка удаления категории: {str(e)}")
return False
await ServiceRecordsHandler.add(
user_id, {"Удалена категория": f"Название: {categoryTitle}"}
)
logger.info(
f"Категория {categoryTitle} {'успешно удалена' if result else 'не удалена'}"
)
return result
async def initialize():
baseCategories = [
{"title": "Фрезеровка", "description": "Инструмент для фрезерного цеха"},
{"title": "Токарка", "description": "Инструмент для токарного цеха"},
{"title": "Слесарка", "description": "Инструмент для слесарного цеха"},
]
logger.info("Создание базовых категорий")
for categoryData in baseCategories:
await CategoryHandler.add(categoryData)
logger.info("Категории успешно созданы")
return