Перевел /suggest-address на id города и убрал country_code
Deploy / deploy (push) Successful in 59s

This commit is contained in:
Раис Юсупалиев
2026-05-29 04:01:09 +03:00
parent 6caea9e111
commit 6a2bf05ba5
5 changed files with 128 additions and 52 deletions
+36 -4
View File
@@ -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: