103 lines
3.0 KiB
Python
103 lines
3.0 KiB
Python
from __future__ import annotations
|
|
|
|
from datetime import datetime
|
|
from typing import Literal
|
|
|
|
from pydantic import BaseModel, Field
|
|
|
|
|
|
ElevationDatasetStatus = Literal["active", "disabled"]
|
|
ElevationApplyMode = Literal["fill_null_only", "overwrite_all"]
|
|
ElevationApplyJobStatus = Literal["pending", "running", "success", "failed"]
|
|
|
|
|
|
class ElevationDatasetSummary(BaseModel):
|
|
id: str
|
|
code: str
|
|
name: str
|
|
source: str | None = None
|
|
file_format: str
|
|
mount_code: str
|
|
file_path: str
|
|
resolution_m: float | None = None
|
|
status: ElevationDatasetStatus
|
|
sample_count: int = 0
|
|
bbox_min_lon: float | None = None
|
|
bbox_max_lon: float | None = None
|
|
bbox_min_lat: float | None = None
|
|
bbox_max_lat: float | None = None
|
|
notes: str | None = None
|
|
create_date: datetime
|
|
create_user: str | None = None
|
|
update_date: datetime
|
|
update_user: str | None = None
|
|
|
|
|
|
class ElevationDatasetListResponse(BaseModel):
|
|
items: list[ElevationDatasetSummary]
|
|
total: int
|
|
|
|
|
|
class ElevationDatasetCreateRequest(BaseModel):
|
|
code: str = Field(min_length=2, max_length=64)
|
|
name: str = Field(min_length=2, max_length=255)
|
|
source: str | None = Field(default=None, max_length=128)
|
|
mount_code: str = Field(min_length=2, max_length=64)
|
|
file_path: str = Field(min_length=1, max_length=2048)
|
|
resolution_m: float | None = Field(default=None, gt=0)
|
|
notes: str | None = Field(default=None, max_length=2000)
|
|
|
|
|
|
class ElevationDatasetUpdateRequest(BaseModel):
|
|
name: str | None = Field(default=None, min_length=2, max_length=255)
|
|
source: str | None = Field(default=None, max_length=128)
|
|
resolution_m: float | None = Field(default=None, gt=0)
|
|
status: ElevationDatasetStatus | None = None
|
|
notes: str | None = Field(default=None, max_length=2000)
|
|
|
|
|
|
class ElevationDatasetAnalyzeResponse(BaseModel):
|
|
dataset: ElevationDatasetSummary
|
|
warnings: list[str] = Field(default_factory=list)
|
|
|
|
|
|
class ElevationApplyJobSummary(BaseModel):
|
|
id: str
|
|
line_id: str
|
|
line_code: str | None = None
|
|
line_name: str | None = None
|
|
dataset_id: str
|
|
dataset_code: str | None = None
|
|
dataset_name: str | None = None
|
|
mode: ElevationApplyMode
|
|
status: ElevationApplyJobStatus
|
|
task_id: str | None = None
|
|
total_tower_count: int = 0
|
|
updated_tower_count: int = 0
|
|
skipped_tower_count: int = 0
|
|
missing_geo_count: int = 0
|
|
unmatched_count: int = 0
|
|
error_message: str | None = None
|
|
started_at: datetime | None = None
|
|
finished_at: datetime | None = None
|
|
create_date: datetime
|
|
create_user: str | None = None
|
|
update_date: datetime
|
|
update_user: str | None = None
|
|
|
|
|
|
class ElevationApplyJobListResponse(BaseModel):
|
|
items: list[ElevationApplyJobSummary]
|
|
total: int
|
|
|
|
|
|
class ElevationApplyJobCreateRequest(BaseModel):
|
|
line_id: str = Field(min_length=1, max_length=64)
|
|
dataset_id: str = Field(min_length=1, max_length=64)
|
|
mode: ElevationApplyMode = "fill_null_only"
|
|
|
|
|
|
class ElevationApplyJobCreateResponse(BaseModel):
|
|
job: ElevationApplyJobSummary
|
|
queued: bool = True
|