создана часть бекенда
This commit is contained in:
@@ -0,0 +1,92 @@
|
||||
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": "Инструмент для слесарного цеха"},
|
||||
]
|
||||
|
||||
for categoryData in baseCategories:
|
||||
await CategoryHandler.add(categoryData)
|
||||
|
||||
logger.info("Категории успешно созданы")
|
||||
return
|
||||
Reference in New Issue
Block a user