Files
Fulfillment-Backend/services/shipping_warehouse.py
2024-08-25 04:19:42 +03:00

110 lines
4.3 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

from idlelib.rpc import response_queue
from typing import Union
from sqlalchemy import select, update, delete
import models
from models import ShippingWarehouse
from schemas.shipping_warehouse import GetAllShippingWarehousesResponse, ShippingWarehouseSchema, \
CreateShippingWarehouseResponse, CreateShippingWarehouseRequest, UpdateShippingWarehouseRequest, \
UpdateShippingWarehouseResponse, DeleteShippingWarehouseRequest, DeleteShippingWarehouseResponse
from services.base import BaseService
class ShippingWarehouseService(BaseService):
async def get_all(self) -> GetAllShippingWarehousesResponse:
stmt = (
select(
models.ShippingWarehouse
)
.where(
models.ShippingWarehouse.is_deleted == False
)
.order_by(
models.ShippingWarehouse.id
)
)
shipping_warehouses = (await self.session.scalars(stmt)).all()
result = []
for shipping_warehouse in shipping_warehouses:
result.append(ShippingWarehouseSchema.model_validate(shipping_warehouse))
return GetAllShippingWarehousesResponse(shipping_warehouses=result)
async def get_by_name(self, name: str) -> Union[models.ShippingWarehouse, None]:
stmt = (
select(
models.ShippingWarehouse
)
.where(
models.ShippingWarehouse.name == name,
models.ShippingWarehouse.is_deleted == False
)
)
shipping_warehouse = await self.session.scalar(stmt)
return shipping_warehouse
async def create_by_name(self, name: str) -> models.ShippingWarehouse:
shipping_warehouse = models.ShippingWarehouse(
name=name
)
self.session.add(shipping_warehouse)
await self.session.flush()
return shipping_warehouse
async def create(self, request: CreateShippingWarehouseRequest) -> CreateShippingWarehouseResponse:
try:
if await self.get_by_name(request.shipping_warehouse.name):
return CreateShippingWarehouseResponse(ok=False,
message="Склад отгрузки с таким названием уже существует")
await self.create_by_name(request.shipping_warehouse.name)
await self.session.commit()
return CreateShippingWarehouseResponse(
ok=True,
message="Склад отгрузки успешно создан"
)
except Exception as e:
return CreateShippingWarehouseResponse(ok=False,
message=str(e))
async def update(self, request: UpdateShippingWarehouseRequest) -> UpdateShippingWarehouseResponse:
try:
stmt = (
update(
ShippingWarehouse
)
.values(
request.shipping_warehouse.model_dump(
by_alias=False
)
)
.where(
ShippingWarehouse.id == request.shipping_warehouse.id
)
)
await self.session.execute(
stmt
)
await self.session.commit()
return UpdateShippingWarehouseResponse(ok=True, message='Склад отгрузки успешно обновлен')
except Exception as e:
return UpdateShippingWarehouseResponse(ok=False, message=str(e))
async def delete(self, request: DeleteShippingWarehouseRequest) -> DeleteShippingWarehouseResponse:
try:
stmt = (
update(
ShippingWarehouse
)
.values({
'is_deleted': True
})
.where(
ShippingWarehouse.id == request.shipping_warehouse_id
)
)
await self.session.execute(stmt)
await self.session.commit()
return DeleteShippingWarehouseResponse(ok=True, message='Склад отгрузки успешно удален')
except Exception as e:
return DeleteShippingWarehouseResponse(ok=False, message=str(e))