Files

125 lines
2.9 KiB
Python
Raw Permalink Normal View History

2026-05-11 03:27:21 +03:30
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