fix order form

This commit is contained in:
Раис Юсупалиев
2026-04-11 00:36:37 +03:00
parent 18f7e251e3
commit ab0b66e1c2
9 changed files with 269 additions and 36 deletions
@@ -2,7 +2,12 @@
from typing import Any
from app.schemas.order import OrderCreateRequest, OrderCreateResponse
from app.schemas.order import (
OrderCreateRequest,
OrderCreateResponse,
OrderPackage,
OrderParty,
)
class CDEKOrderMappingError(ValueError):
@@ -10,7 +15,22 @@ class CDEKOrderMappingError(ValueError):
def map_cdek_order_request(request: OrderCreateRequest) -> dict[str, Any]:
return request.model_dump(mode="python", exclude_none=True)
payload: dict[str, Any] = {
"type": request.type,
"tariff_code": request.tariff_code,
"sender": _map_order_party(request.sender),
"recipient": _map_order_party(request.recipient),
"from_location": request.from_location.model_dump(mode="python"),
"to_location": request.to_location.model_dump(mode="python"),
"packages": [_map_order_package(package) for package in request.packages],
}
if request.comment is not None:
payload["comment"] = request.comment
if request.services is not None:
payload["services"] = [
service.model_dump(mode="python") for service in request.services
]
return payload
def map_cdek_order_response(payload: dict[str, Any]) -> OrderCreateResponse:
@@ -23,3 +43,17 @@ def map_cdek_order_response(payload: dict[str, Any]) -> OrderCreateResponse:
raise CDEKOrderMappingError("CDEK order response must include entity.uuid.")
return OrderCreateResponse(provider="cdek", order_uuid=order_uuid)
def _map_order_party(party: OrderParty) -> dict[str, Any]:
return {
"name": party.name,
"email": party.email,
"phones": [party.phone.model_dump(mode="python")],
}
def _map_order_package(package: OrderPackage) -> dict[str, Any]:
payload = package.model_dump(mode="python", exclude_none=True)
payload["weight"] = package.weight * 1000
return payload