feat: product search
This commit is contained in:
@@ -1,9 +1,13 @@
|
||||
from idlelib.rpc import response_queue
|
||||
from typing import Union
|
||||
|
||||
from sqlalchemy import select
|
||||
from sqlalchemy import select, update, delete
|
||||
|
||||
import models
|
||||
from schemas.shipping_warehouse import GetAllShippingWarehousesResponse, ShippingWarehouseSchema
|
||||
from models import ShippingWarehouse
|
||||
from schemas.shipping_warehouse import GetAllShippingWarehousesResponse, ShippingWarehouseSchema, \
|
||||
CreateShippingWarehouseResponse, CreateShippingWarehouseRequest, UpdateShippingWarehouseRequest, \
|
||||
UpdateShippingWarehouseResponse, DeleteShippingWarehouseRequest, DeleteShippingWarehouseResponse
|
||||
from services.base import BaseService
|
||||
|
||||
|
||||
@@ -13,6 +17,9 @@ class ShippingWarehouseService(BaseService):
|
||||
select(
|
||||
models.ShippingWarehouse
|
||||
)
|
||||
.where(
|
||||
models.ShippingWarehouse.is_deleted == False
|
||||
)
|
||||
.order_by(
|
||||
models.ShippingWarehouse.id
|
||||
)
|
||||
@@ -24,7 +31,15 @@ class ShippingWarehouseService(BaseService):
|
||||
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)
|
||||
stmt = (
|
||||
select(
|
||||
models.ShippingWarehouse
|
||||
)
|
||||
.where(
|
||||
models.ShippingWarehouse.name == name,
|
||||
models.ShippingWarehouse.is_deleted == False
|
||||
)
|
||||
)
|
||||
shipping_warehouse = await self.session.scalar(stmt)
|
||||
return shipping_warehouse
|
||||
|
||||
@@ -35,3 +50,60 @@ class ShippingWarehouseService(BaseService):
|
||||
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))
|
||||
|
||||
Reference in New Issue
Block a user