feat: product search

This commit is contained in:
2024-08-25 04:19:42 +03:00
parent 2b79e0deba
commit a95aafb54b
7 changed files with 159 additions and 10 deletions

View File

@@ -213,7 +213,8 @@ class DealService(BaseService):
total_price=total_price,
rank=rank,
base_marketplace=base_marketplace,
created_at=deal.created_at
created_at=deal.created_at,
shipment_warehouse_id=deal.shipping_warehouse_id
)
)
return DealSummaryResponse(summaries=summaries)

View File

@@ -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))