Files

114 lines
3.2 KiB
Python
Raw Permalink Normal View History

2026-05-11 03:27:21 +03:30
from __future__ import annotations
from pydantic import Field
from .common import ApiEnvelope, JsonObject, RouteContract, SchemaModel
HTTP_METHOD = 'GET'
ROUTE_PATH = '/api/farm-data/<farm_uuid>/detail/'
class FarmDetailRequest(SchemaModel):
farm_uuid: str
class FarmCenterLocationSchema(SchemaModel):
id: int
lat: float
lon: float
farm_boundary: JsonObject = Field(default_factory=dict)
class WeatherForecastDetailSchema(SchemaModel):
id: int
forecast_date: str | None = None
temperature_min: float | None = None
temperature_max: float | None = None
temperature_mean: float | None = None
precipitation: float | None = None
precipitation_probability: float | None = None
humidity_mean: float | None = None
wind_speed_max: float | None = None
et0: float | None = None
weather_code: int | None = None
class FarmSoilDepthSchema(SchemaModel):
depth_label: str
bdod: float | None = None
cec: float | None = None
cfvo: float | None = None
clay: float | None = None
nitrogen: float | None = None
ocd: float | None = None
ocs: float | None = None
phh2o: float | None = None
sand: float | None = None
silt: float | None = None
soc: float | None = None
wv0010: float | None = None
wv0033: float | None = None
wv1500: float | None = None
class FarmSoilPayloadSchema(SchemaModel):
resolved_metrics: JsonObject = Field(default_factory=dict)
metric_sources: JsonObject = Field(default_factory=dict)
depths: list[FarmSoilDepthSchema] = Field(default_factory=list)
class FarmPlantSchema(SchemaModel):
id: int
name: str
light: str | None = None
watering: str | None = None
soil: str | None = None
temperature: str | None = None
growth_stage: str | None = None
planting_season: str | None = None
harvest_time: str | None = None
spacing: str | None = None
fertilizer: str | None = None
created_at: str | None = None
updated_at: str | None = None
class FarmIrrigationMethodSchema(SchemaModel):
id: int
name: str
category: str | None = None
description: str | None = None
water_efficiency_percent: float | None = None
water_pressure_required: str | None = None
flow_rate: str | None = None
coverage_area: str | None = None
soil_type: str | None = None
climate_suitability: str | None = None
created_at: str | None = None
updated_at: str | None = None
class FarmDetailResponseData(SchemaModel):
center_location: FarmCenterLocationSchema
weather: WeatherForecastDetailSchema | None = None
sensor_payload: JsonObject = Field(default_factory=dict)
soil: FarmSoilPayloadSchema
plant_ids: list[int] = Field(default_factory=list)
plants: list[FarmPlantSchema] = Field(default_factory=list)
irrigation_method_id: int | None = None
irrigation_method: FarmIrrigationMethodSchema | None = None
created_at: str | None = None
updated_at: str | None = None
class FarmDetailResponse(ApiEnvelope[FarmDetailResponseData]):
pass
CONTRACT = RouteContract(
method=HTTP_METHOD,
path=ROUTE_PATH,
request_model=FarmDetailRequest.__name__,
response_model=FarmDetailResponse.__name__,
)