заказы

This commit is contained in:
2025-12-21 03:45:02 +03:00
parent 83ecf65abf
commit 546c70cbcd
15 changed files with 862 additions and 38 deletions
+98
View File
@@ -0,0 +1,98 @@
from datetime import date, datetime, time
from sqlalchemy import func, select
from db import CRUD
from db.schemas.orders import Orders
from utils.loggers import logger
class OrdersHandler:
@staticmethod
async def new(user_id: int, order: str):
try:
await Orders(customer_id=user_id, customer_comment=order).save()
except Exception as e:
logger.error(f"Ошибка создания заказа: {str(e)}")
return {"errorMessage": f"Ошибка создания заказа: {str(e)}"}
return {"status": "ok"}
@staticmethod
async def get_all_by_consumer(
user_id: int, startDate: date, endDate: date, toDict: bool = True
):
try:
startDate = datetime.combine(startDate, time.min)
endDate = datetime.combine(endDate, time.max)
query = (
select(Orders)
.where(
Orders.customer_id == user_id,
Orders.created_at.between(startDate, endDate),
)
.order_by(Orders.created_at.asc())
)
orders = await CRUD.read(query, True)
ordresList = [order.toDict() for order in orders] if toDict else orders
return {"orders": ordresList}
except Exception as e:
logger.error(f"Ошибка получения заказов: {str(e)}")
return {"errorMessage": f"Ошибка получения заказов: {str(e)}"}
@staticmethod
async def get_all(startDate: date, endDate: date, toDict: bool = True):
try:
startDate = datetime.combine(startDate, time.min)
endDate = datetime.combine(endDate, time.max)
query = (
select(Orders)
.where(
Orders.created_at.between(startDate, endDate),
)
.order_by(Orders.created_at.asc())
)
orders = await CRUD.read(query, True)
ordresList = [order.toDict() for order in orders] if toDict else orders
return {"orders": ordresList}
except Exception as e:
logger.error(f"Ошибка получения заказов: {str(e)}")
return {"errorMessage": f"Ошибка получения заказов: {str(e)}"}
@staticmethod
async def countNew():
try:
query = select(func.count(Orders.id)).where(Orders.status == "new")
return {"orders": await CRUD.read(query)}
except Exception as e:
logger.error(f"Ошибка получения количества заказов: {str(e)}")
return {"errorMessage": f"Ошибка получения количества заказов: {str(e)}"}
@staticmethod
async def get(order_id: int, toDict: bool = False):
try:
order = await CRUD.read(select(Orders).where(Orders.id == order_id))
return order.toDict() if toDict else order
except Exception as e:
logger.error(f"Ошибка получения заказа: {str(e)}")
return {"errorMessage": f"Ошибка получения заказа: {str(e)}"}
@staticmethod
async def update(
order_id: int, user_id: int, status: str = None, comment: str = None
):
try:
if status is None and comment is None:
logger.error("Не указан статус и комментарий")
return {"errorMessage": "Не указан статус и комментарий"}
order = await OrdersHandler.get(order_id)
if not order or isinstance(order, dict):
logger.error("Заказ не найден")
return {"errorMessage": "Заказ не найден"}
changeData = {"executor_id": user_id}
if status:
changeData["status"] = status
if comment:
changeData["executor_comment"] = comment
await order.edit(**changeData)
except Exception as e:
logger.error(f"Ошибка обновления заказа: {str(e)}")
return {"errorMessage": f"Ошибка обновления заказа: {str(e)}"}
return {"status": "ok"}