48 lines
1.2 KiB
Python
48 lines
1.2 KiB
Python
"""Input schemas for delivery-related API requests."""
|
|
|
|
from enum import StrEnum
|
|
|
|
from pydantic import BaseModel, Field, StrictInt
|
|
|
|
|
|
class DeliveryEntity(StrEnum):
|
|
INDIVIDUAL = "individual"
|
|
LEGAL = "legal"
|
|
|
|
|
|
class ParcelType(StrEnum):
|
|
DOC = "doc"
|
|
PARCEL = "parcel"
|
|
|
|
|
|
class DeliveryCalculationRequest(BaseModel):
|
|
entity: DeliveryEntity
|
|
from_city: StrictInt
|
|
to_city: StrictInt
|
|
weight_kg: float = Field(gt=0)
|
|
length_cm: float = Field(gt=0)
|
|
width_cm: float = Field(gt=0)
|
|
height_cm: float = Field(gt=0)
|
|
parcel_type: ParcelType | None = None
|
|
|
|
|
|
class SuggestAddressRequest(BaseModel):
|
|
"""API request for the /suggest-address endpoint.
|
|
|
|
``city`` is a city identifier (key in ``cities_map``); the city name and
|
|
country code are resolved from it by the service layer.
|
|
"""
|
|
|
|
city: str = Field(min_length=1)
|
|
query: str = Field(min_length=1)
|
|
limit: int | None = Field(default=None, gt=0)
|
|
|
|
|
|
class AddressSuggestRequest(BaseModel):
|
|
"""Provider-facing address suggestion request."""
|
|
|
|
country_code: str = Field(min_length=2, max_length=2)
|
|
city: str = Field(min_length=1)
|
|
query: str = Field(min_length=1)
|
|
limit: int | None = Field(default=None, gt=0)
|