This commit is contained in:
@@ -49,7 +49,12 @@ from app.schemas.payment import (
|
||||
InitPaymentResponse,
|
||||
TBankPaymentNotification,
|
||||
)
|
||||
from app.schemas.request import AddressSuggestRequest, DeliveryCalculationRequest
|
||||
from app.cities import cities_map
|
||||
from app.schemas.request import (
|
||||
AddressSuggestRequest,
|
||||
DeliveryCalculationRequest,
|
||||
SuggestAddressRequest,
|
||||
)
|
||||
from app.schemas.response import AddressSuggestion, DeliveryPrice
|
||||
|
||||
logger = structlog.get_logger(__name__)
|
||||
@@ -254,12 +259,15 @@ class AggregatorService:
|
||||
return [self._coerce_delivery_price(price) for price in filtered_and_sorted]
|
||||
|
||||
async def suggest_addresses(
|
||||
self, request: AddressSuggestRequest
|
||||
self, request: SuggestAddressRequest
|
||||
) -> list[AddressSuggestion]:
|
||||
provider = self._resolve_address_suggestion_provider(request.country_code)
|
||||
provider_request = self._build_address_suggest_request(request)
|
||||
provider = self._resolve_address_suggestion_provider(
|
||||
provider_request.country_code
|
||||
)
|
||||
|
||||
try:
|
||||
suggestions = await provider.suggest(request)
|
||||
suggestions = await provider.suggest(provider_request)
|
||||
except AddressSuggestionRequestError as exc:
|
||||
raise InvalidAddressSuggestRequestError(
|
||||
"Address suggestion request is invalid for the configured provider."
|
||||
@@ -739,6 +747,30 @@ class AggregatorService:
|
||||
def _coerce_address_suggestion(value: object) -> AddressSuggestion:
|
||||
return AddressSuggestion.model_validate(value, from_attributes=True)
|
||||
|
||||
@staticmethod
|
||||
def _build_address_suggest_request(
|
||||
request: SuggestAddressRequest,
|
||||
) -> AddressSuggestRequest:
|
||||
city_entry = cities_map.get(request.city)
|
||||
if not isinstance(city_entry, dict):
|
||||
raise InvalidAddressSuggestRequestError(
|
||||
f"City is not configured for id {request.city}."
|
||||
)
|
||||
|
||||
city_name = city_entry.get("city")
|
||||
country_code = city_entry.get("country")
|
||||
if not isinstance(city_name, str) or not isinstance(country_code, str):
|
||||
raise InvalidAddressSuggestRequestError(
|
||||
f"City mapping is invalid for id {request.city}."
|
||||
)
|
||||
|
||||
return AddressSuggestRequest(
|
||||
country_code=country_code,
|
||||
city=city_name,
|
||||
query=request.query,
|
||||
limit=request.limit,
|
||||
)
|
||||
|
||||
def _resolve_address_suggestion_provider(
|
||||
self, country_code: str
|
||||
) -> AddressSuggestionProvider:
|
||||
|
||||
Reference in New Issue
Block a user