UPDATE
This commit is contained in:
+113
@@ -0,0 +1,113 @@
|
||||
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__,
|
||||
)
|
||||
Reference in New Issue
Block a user