pyrohlik/rohlik/models/order.py
2024-11-17 10:38:58 +01:00

79 lines
2 KiB
Python

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]