UPDATE
This commit is contained in:
@@ -0,0 +1,53 @@
|
||||
from __future__ import annotations
|
||||
|
||||
from uuid import UUID
|
||||
|
||||
from pydantic import Field, model_validator
|
||||
|
||||
from .common import ApiEnvelope, JsonObject, RouteContract, SchemaModel
|
||||
|
||||
HTTP_METHOD = 'POST'
|
||||
ROUTE_PATH = '/api/farm-data/'
|
||||
|
||||
|
||||
class FarmBoundaryCorner(SchemaModel):
|
||||
lat: float
|
||||
lon: float
|
||||
|
||||
|
||||
class FarmDataUpsertRequest(SchemaModel):
|
||||
farm_uuid: UUID
|
||||
farm_boundary: JsonObject
|
||||
sensor_key: str | None = 'sensor-7-1'
|
||||
sensor_payload: JsonObject | None = None
|
||||
plant_ids: list[int] = Field(default_factory=list)
|
||||
irrigation_method_id: int | None = None
|
||||
|
||||
@model_validator(mode='after')
|
||||
def validate_payload_sources(self) -> 'FarmDataUpsertRequest':
|
||||
if not self.sensor_payload and not self.plant_ids and self.irrigation_method_id is None:
|
||||
raise ValueError('At least one of sensor_payload, plant_ids or irrigation_method_id must be provided.')
|
||||
return self
|
||||
|
||||
|
||||
class FarmDataUpsertResponseData(SchemaModel):
|
||||
farm_uuid: UUID
|
||||
center_location_id: int | None = None
|
||||
weather_forecast_id: int | None = None
|
||||
sensor_payload: JsonObject = Field(default_factory=dict)
|
||||
plant_ids: list[int] = Field(default_factory=list)
|
||||
irrigation_method_id: int | None = None
|
||||
created_at: str | None = None
|
||||
updated_at: str | None = None
|
||||
|
||||
|
||||
class FarmDataUpsertResponse(ApiEnvelope[FarmDataUpsertResponseData]):
|
||||
pass
|
||||
|
||||
|
||||
CONTRACT = RouteContract(
|
||||
method=HTTP_METHOD,
|
||||
path=ROUTE_PATH,
|
||||
request_model=FarmDataUpsertRequest.__name__,
|
||||
response_model=FarmDataUpsertResponse.__name__,
|
||||
)
|
||||
Reference in New Issue
Block a user