Files
fquiz/api/app/schemas/elevation.py
T

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