feat: product search
This commit is contained in:
@@ -11,5 +11,6 @@ allowed_telegram_ids = [
|
||||
5734685107, # Seller manager,
|
||||
355242295, # Dsnonchik
|
||||
651158209, # kristina
|
||||
502869937 # Sasha
|
||||
502869937, # Sasha
|
||||
7399730533
|
||||
]
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
from sqlalchemy.orm import Mapped, mapped_column
|
||||
from sqlalchemy.orm import Mapped, mapped_column, MapperEvents
|
||||
|
||||
from models import BaseModel
|
||||
|
||||
@@ -7,3 +7,4 @@ class ShippingWarehouse(BaseModel):
|
||||
__tablename__ = 'shipping_warehouses'
|
||||
id: Mapped[int] = mapped_column(primary_key=True)
|
||||
name: Mapped[str] = mapped_column(nullable=False)
|
||||
is_deleted: Mapped[bool] = mapped_column(nullable=False, default=False, server_default='0')
|
||||
|
||||
@@ -1,10 +1,12 @@
|
||||
from idlelib.rpc import response_queue
|
||||
from typing import Annotated
|
||||
|
||||
from fastapi import APIRouter, Depends
|
||||
from sqlalchemy.ext.asyncio import AsyncSession
|
||||
|
||||
from backend.dependecies import SessionDependency
|
||||
from backend.session import get_session
|
||||
from schemas.shipping_warehouse import GetAllShippingWarehousesResponse
|
||||
from schemas.shipping_warehouse import *
|
||||
from services.auth import authorized_user
|
||||
from services.shipping_warehouse import ShippingWarehouseService
|
||||
|
||||
@@ -26,3 +28,38 @@ async def get_all(
|
||||
return await ShippingWarehouseService(session).get_all()
|
||||
|
||||
|
||||
@shipping_warehouse_router.post(
|
||||
'/create',
|
||||
response_model=CreateShippingWarehouseResponse,
|
||||
operation_id='create_shipping_warehouse'
|
||||
)
|
||||
async def create(
|
||||
session: SessionDependency,
|
||||
request: CreateShippingWarehouseRequest
|
||||
):
|
||||
return await ShippingWarehouseService(session).create(request)
|
||||
|
||||
|
||||
@shipping_warehouse_router.post(
|
||||
'/update',
|
||||
response_model=UpdateShippingWarehouseResponse,
|
||||
operation_id='update_shipping_warehouse'
|
||||
)
|
||||
async def update(
|
||||
session: SessionDependency,
|
||||
request: UpdateShippingWarehouseRequest
|
||||
):
|
||||
return await ShippingWarehouseService(session).update(request)
|
||||
|
||||
|
||||
|
||||
@shipping_warehouse_router.post(
|
||||
'/delete',
|
||||
response_model=DeleteShippingWarehouseResponse,
|
||||
operation_id='delete_shipping_warehouse'
|
||||
)
|
||||
async def delete(
|
||||
session: SessionDependency,
|
||||
request: DeleteShippingWarehouseRequest
|
||||
):
|
||||
return await ShippingWarehouseService(session).delete(request)
|
||||
|
||||
@@ -33,6 +33,8 @@ class DealSummary(BaseSchema):
|
||||
rank: int
|
||||
base_marketplace: Optional[BaseMarketplaceSchema] = None
|
||||
|
||||
shipment_warehouse_id: Optional[int]
|
||||
|
||||
|
||||
class DealServiceSchema(BaseSchema):
|
||||
service: ServiceSchema
|
||||
|
||||
@@ -1,12 +1,47 @@
|
||||
from typing import List
|
||||
|
||||
from schemas.base import BaseSchema
|
||||
from schemas.base import BaseSchema, OkMessageSchema
|
||||
|
||||
|
||||
class ShippingWarehouseSchema(BaseSchema):
|
||||
id: int
|
||||
# region Entities
|
||||
class BaseShippingWarehouseSchema(BaseSchema):
|
||||
name: str
|
||||
|
||||
|
||||
class ShippingWarehouseSchema(BaseShippingWarehouseSchema):
|
||||
id: int
|
||||
|
||||
|
||||
# endregion
|
||||
|
||||
# region Requests
|
||||
class CreateShippingWarehouseRequest(BaseSchema):
|
||||
shipping_warehouse: BaseShippingWarehouseSchema
|
||||
|
||||
|
||||
class UpdateShippingWarehouseRequest(BaseSchema):
|
||||
shipping_warehouse: ShippingWarehouseSchema
|
||||
|
||||
|
||||
class DeleteShippingWarehouseRequest(BaseSchema):
|
||||
shipping_warehouse_id: int
|
||||
|
||||
|
||||
# endregion
|
||||
|
||||
# region Responses
|
||||
class GetAllShippingWarehousesResponse(BaseSchema):
|
||||
shipping_warehouses: List[ShippingWarehouseSchema]
|
||||
|
||||
|
||||
class CreateShippingWarehouseResponse(OkMessageSchema):
|
||||
pass
|
||||
|
||||
|
||||
class UpdateShippingWarehouseResponse(OkMessageSchema):
|
||||
pass
|
||||
|
||||
|
||||
class DeleteShippingWarehouseResponse(OkMessageSchema):
|
||||
pass
|
||||
# endregion
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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