Добавлен CI, добавлена отправка письма о получении оплаты, добавлен order_id в success_url
Deploy / deploy (push) Successful in 1m0s

This commit is contained in:
Раис Юсупалиев
2026-05-27 23:29:51 +03:00
parent 50124fb2c9
commit 6caea9e111
27 changed files with 602 additions and 166 deletions
+21
View File
@@ -1,5 +1,6 @@
"""Delivery API controller skeleton."""
import structlog
from fastapi import APIRouter, Depends, HTTPException, Request, status
from fastapi.responses import PlainTextResponse
@@ -10,6 +11,7 @@ from app.adapters.address_suggestions.yandex_geosuggest import (
YandexGeosuggestAddressSuggestionProvider,
)
from app.adapters.delivery_providers.cdek import CDEKProvider
from app.adapters.email import SMTPEmailSender
from app.adapters.tbank import TBankAdapter
from app.config import Settings
from app.controllers.http_client import build_controller_http_client
@@ -35,6 +37,8 @@ from app.services.aggregator import (
UnsupportedAddressSuggestionCountryError,
)
logger = structlog.get_logger(__name__)
router = APIRouter(prefix="/delivery", tags=["delivery"])
@@ -70,6 +74,15 @@ def _build_aggregator_service(settings: Settings) -> AggregatorService:
postgres_engine = create_postgres_engine(settings.postgres)
postgres_session_factory = create_postgres_session_factory(postgres_engine)
order_repository = OrderRepository(session_factory=postgres_session_factory)
email_sender = SMTPEmailSender(
smtp_host=settings.email.smtp_host,
smtp_port=settings.email.smtp_port,
username=settings.email.username,
password=settings.email.password,
from_address=settings.email.from_address,
use_tls=settings.email.use_tls,
timeout_seconds=settings.email.timeout_seconds,
)
service = AggregatorService(
providers=providers,
cache=cache,
@@ -77,6 +90,7 @@ def _build_aggregator_service(settings: Settings) -> AggregatorService:
payment_price_validation_adapter=cdek_provider,
order_repository=order_repository,
order_registration_adapter=cdek_provider,
email_sender=email_sender,
address_suggestion_providers=(
dadata_provider,
yandex_geosuggest_provider,
@@ -138,6 +152,13 @@ async def suggest_addresses(
address_request: AddressSuggestRequest,
service: AggregatorService = Depends(get_aggregator_service),
) -> list[AddressSuggestion]:
logger.info(
"suggest_address_requested",
country_code=address_request.country_code,
city=address_request.city,
query=address_request.query,
limit=address_request.limit,
)
try:
return await service.suggest_addresses(address_request)
except UnsupportedAddressSuggestionCountryError as exc: