56 lines
1.1 KiB
Python
56 lines
1.1 KiB
Python
|
|
from typing import List, Optional
|
||
|
|
|
||
|
|
from pydantic import BaseModel
|
||
|
|
|
||
|
|
|
||
|
|
class StationBase(BaseModel):
|
||
|
|
station_hash: str
|
||
|
|
operator: str
|
||
|
|
station_name: str
|
||
|
|
address: Optional[str]
|
||
|
|
coord_x: Optional[float]
|
||
|
|
coord_y: Optional[float]
|
||
|
|
current_price: Optional[float]
|
||
|
|
|
||
|
|
|
||
|
|
class CompetitorStation(BaseModel):
|
||
|
|
station_hash: str
|
||
|
|
operator: str
|
||
|
|
station_name: str
|
||
|
|
distance_km: float
|
||
|
|
current_price: Optional[float]
|
||
|
|
|
||
|
|
|
||
|
|
class GeoCompetitionResponse(BaseModel):
|
||
|
|
base_station: StationBase
|
||
|
|
competitors: List[CompetitorStation]
|
||
|
|
ylt_price: Optional[float]
|
||
|
|
min_competitor_price: Optional[float]
|
||
|
|
max_competitor_price: Optional[float]
|
||
|
|
cheaper_count: int
|
||
|
|
same_count: int
|
||
|
|
more_expensive_count: int
|
||
|
|
|
||
|
|
|
||
|
|
class GeoCompetitionSummary(BaseModel):
|
||
|
|
summary: str
|
||
|
|
|
||
|
|
|
||
|
|
class PriceSeries(BaseModel):
|
||
|
|
operator: str
|
||
|
|
series: List[Optional[float]]
|
||
|
|
|
||
|
|
|
||
|
|
class PriceComparisonResponse(BaseModel):
|
||
|
|
hours: List[int]
|
||
|
|
ylt: PriceSeries
|
||
|
|
competitors: List[PriceSeries]
|
||
|
|
min_diff: Optional[float]
|
||
|
|
max_diff: Optional[float]
|
||
|
|
avg_diff: Optional[float]
|
||
|
|
|
||
|
|
|
||
|
|
class PriceComparisonSummary(BaseModel):
|
||
|
|
summary: str
|
||
|
|
|