from decimal import Decimal from datetime import datetime from typing import List, Optional from pydantic import BaseModel, Field, RootModel class Price(BaseModel): amount: Decimal currency: str class PriceCompositionOrder(BaseModel): total: Price goods: Price delivery: Price credits_used: Price = Field(alias='creditsUsed') courier_tip: Price = Field(alias='courierTip') fines: Price reusable_bags_deposit: Price = Field(alias='reusableBagsDeposit') class PriceCompositionOrderProduct(BaseModel): total: Price unit: Price class PriceCompositionOrderList(BaseModel): total: Price class OrderProduct(BaseModel): name: str unit: str textual_amount: str = Field(..., alias='textualAmount') amount: int images: List[str] price_composition: PriceCompositionOrderProduct = Field(..., alias='priceComposition') compensated: bool id: int class DeliverySlot(BaseModel): id: int type: str since: datetime till: datetime class OrderList(BaseModel): id: int items_count: int = Field(alias='itemsCount') order_time: datetime = Field(alias='orderTime') price_composition: PriceCompositionOrderList = Field(..., alias='priceComposition') delivery_slot: Optional[DeliverySlot] = Field(..., alias='deliverySlot') class Document(BaseModel): type: str title: str link: str class Order(BaseModel): id: int items_count: int = Field(..., alias='itemsCount') price_composition: PriceCompositionOrder = Field(..., alias='priceComposition') order_time: datetime = Field(..., alias='orderTime') delivery_type: str = Field(..., alias='deliveryType') delivery_slot: DeliverySlot = Field(..., alias='deliverySlot') state: str payment: int address: str delivery_note: str = Field(..., alias='deliveryNote') documents: List[Document] available_actions: List[str] = Field(..., alias='availableActions') items: List[OrderProduct] class Orders(RootModel): root: List[OrderList]