94 lines
3.9 KiB
Python
94 lines
3.9 KiB
Python
from sqlalchemy import select
|
|
from utils import logger
|
|
from db import CRUD
|
|
from db.schemas import Category
|
|
from db.handlers 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
|