UPDATE
This commit is contained in:
+124
@@ -0,0 +1,124 @@
|
||||
from __future__ import annotations
|
||||
|
||||
from uuid import UUID
|
||||
|
||||
from pydantic import Field
|
||||
|
||||
from .common import ApiEnvelope, JsonObject, JsonValue, RouteContract, SchemaModel
|
||||
|
||||
|
||||
class SoilDataCoordinatesRequest(SchemaModel):
|
||||
lat: float
|
||||
lon: float
|
||||
|
||||
|
||||
class SoilDepthDataSchema(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 SoilLocationPayload(SchemaModel):
|
||||
source: str
|
||||
id: int
|
||||
lon: float
|
||||
lat: float
|
||||
depths: list[SoilDepthDataSchema] = Field(default_factory=list)
|
||||
|
||||
|
||||
class SoilTaskQueuedResponseData(SchemaModel):
|
||||
source: str = 'task'
|
||||
task_id: str
|
||||
lon: float
|
||||
lat: float
|
||||
status_url: str | None = None
|
||||
|
||||
|
||||
class SoilTaskStatusResponseData(SchemaModel):
|
||||
task_id: str
|
||||
status: str
|
||||
message: str | None = None
|
||||
progress: JsonObject = Field(default_factory=dict)
|
||||
result: JsonValue | None = None
|
||||
error: str | None = None
|
||||
|
||||
|
||||
class NdviHealthRequest(SchemaModel):
|
||||
farm_uuid: UUID
|
||||
|
||||
|
||||
class NdviHealthDataItem(SchemaModel):
|
||||
title: str
|
||||
value: JsonValue | None = None
|
||||
color: str
|
||||
icon: str
|
||||
|
||||
|
||||
class NdviHealthResponseData(SchemaModel):
|
||||
ndviIndex: float | None = None
|
||||
mean_ndvi: float | None = None
|
||||
ndvi_map: JsonObject = Field(default_factory=dict)
|
||||
vegetation_health_class: str | None = None
|
||||
observation_date: str | None = None
|
||||
satellite_source: str | None = None
|
||||
healthData: list[NdviHealthDataItem] = Field(default_factory=list)
|
||||
|
||||
|
||||
class SoilDataResponse(ApiEnvelope[SoilLocationPayload]):
|
||||
pass
|
||||
|
||||
|
||||
class SoilTaskQueuedResponse(ApiEnvelope[SoilTaskQueuedResponseData]):
|
||||
pass
|
||||
|
||||
|
||||
class SoilTaskStatusResponse(ApiEnvelope[SoilTaskStatusResponseData]):
|
||||
pass
|
||||
|
||||
|
||||
class NdviHealthResponse(ApiEnvelope[NdviHealthResponseData]):
|
||||
pass
|
||||
|
||||
|
||||
CONTRACTS = [
|
||||
RouteContract(
|
||||
method='GET',
|
||||
path='/api/soil-data/',
|
||||
request_model=SoilDataCoordinatesRequest.__name__,
|
||||
response_model=SoilDataResponse.__name__,
|
||||
),
|
||||
RouteContract(
|
||||
method='POST',
|
||||
path='/api/soil-data/',
|
||||
request_model=SoilDataCoordinatesRequest.__name__,
|
||||
response_model=SoilDataResponse.__name__,
|
||||
),
|
||||
RouteContract(
|
||||
method='GET',
|
||||
path='/api/soil-data/tasks/<task_id>/status/',
|
||||
request_model='SoilTaskStatusRequest',
|
||||
response_model=SoilTaskStatusResponse.__name__,
|
||||
),
|
||||
RouteContract(
|
||||
method='POST',
|
||||
path='/api/soil-data/ndvi-health/',
|
||||
request_model=NdviHealthRequest.__name__,
|
||||
response_model=NdviHealthResponse.__name__,
|
||||
),
|
||||
]
|
||||
|
||||
|
||||
class SoilTaskStatusRequest(SchemaModel):
|
||||
task_id: str
|
||||
Reference in New Issue
Block a user