92 lines
2.2 KiB
Python
92 lines
2.2 KiB
Python
from __future__ import annotations
|
|
|
|
from datetime import datetime
|
|
from uuid import UUID
|
|
|
|
from pydantic import BaseModel, Field
|
|
|
|
from app.schemas.operations import VectorSelectionBBox
|
|
|
|
|
|
class TemporalComparisonRequest(BaseModel):
|
|
earlier_dataset_id: UUID
|
|
later_dataset_id: UUID
|
|
bbox: VectorSelectionBBox
|
|
area_id: UUID | None = None
|
|
preview_limit: int = Field(default=500, ge=1, le=1000)
|
|
|
|
|
|
class TemporalDatasetRef(BaseModel):
|
|
id: UUID
|
|
name: str
|
|
observed_at: datetime
|
|
source_version: str | None = None
|
|
|
|
|
|
class TemporalMetricComparison(BaseModel):
|
|
metric_key: str = "primary"
|
|
label: str
|
|
unit: str
|
|
aggregation_method: str
|
|
earlier_value: float
|
|
later_value: float
|
|
absolute_change: float
|
|
percent_change: float | None = None
|
|
is_estimate: bool = False
|
|
warning: str | None = None
|
|
|
|
|
|
class TemporalObservationMetric(BaseModel):
|
|
metric_key: str
|
|
label: str
|
|
value: float
|
|
unit: str
|
|
aggregation_method: str
|
|
is_estimate: bool = False
|
|
|
|
|
|
class TemporalObservation(BaseModel):
|
|
dataset: TemporalDatasetRef
|
|
metrics: list[TemporalObservationMetric]
|
|
|
|
|
|
class TemporalObjectChanges(BaseModel):
|
|
available: bool
|
|
added_count: int | None = None
|
|
removed_count: int | None = None
|
|
modified_count: int | None = None
|
|
unchanged_count: int | None = None
|
|
|
|
|
|
class TemporalComparisonResponse(BaseModel):
|
|
temporal_series_key: str
|
|
earlier: TemporalDatasetRef
|
|
later: TemporalDatasetRef
|
|
selection_bbox: VectorSelectionBBox
|
|
selection_area_id: UUID | None = None
|
|
metric: TemporalMetricComparison
|
|
metrics: list[TemporalMetricComparison] = Field(default_factory=list)
|
|
timeline: list[TemporalObservation] = Field(default_factory=list)
|
|
object_changes: TemporalObjectChanges
|
|
geojson: dict
|
|
warnings: list[str]
|
|
generated_at: datetime
|
|
|
|
|
|
class TemporalSeriesDataset(BaseModel):
|
|
id: UUID
|
|
name: str
|
|
observed_at: datetime
|
|
source_version: str | None = None
|
|
feature_count: int | None = None
|
|
|
|
|
|
class TemporalSeriesRead(BaseModel):
|
|
temporal_series_key: str
|
|
source_name: str | None = None
|
|
reference_layer_name: str | None = None
|
|
dataset_count: int
|
|
first_observed_at: datetime
|
|
last_observed_at: datetime
|
|
datasets: list[TemporalSeriesDataset]
|