82 lines
2.3 KiB
Python
82 lines
2.3 KiB
Python
"""B06 종횡단 조회·확정 응답 검증 모델."""
|
|
|
|
from typing import Any, Literal
|
|
|
|
from pydantic import BaseModel, Field
|
|
|
|
|
|
class SectionRegenerateRequest(BaseModel):
|
|
"""표시 옵션의 횡단 반폭 변경에 따른 종횡단 재생성 요청."""
|
|
|
|
cross_half_width_m: float = Field(..., gt=0)
|
|
|
|
|
|
class CrossDesignRequest(BaseModel):
|
|
"""측점 하나의 표준횡단 설계(지반유형·단면유형) 지정 요청.
|
|
|
|
버튼 클릭 즉시 절·성토 단면적을 계산해 잠정치로 저장한다. 편절편성은 절토측이
|
|
측구측이라 ditch_side가 무시되고, 양절·양성에서만 배수 방향으로 사용된다.
|
|
"""
|
|
|
|
chainage_m: float = Field(..., ge=0)
|
|
ground_type: Literal["soil", "ripping_rock", "blasting_rock"]
|
|
section_mode: Literal["left_cut", "right_cut", "both_cut", "both_fill"]
|
|
ditch_side: Literal["left", "right"] | None = None
|
|
|
|
|
|
class CrossDesignResponse(BaseModel):
|
|
"""측점 표준횡단 설계 계산 결과(잠정치)."""
|
|
|
|
status: str = "success"
|
|
chainage_m: float
|
|
design: dict[str, Any]
|
|
|
|
|
|
class SectionConfirmResponse(BaseModel):
|
|
"""종횡단 확정 결과."""
|
|
|
|
status: str = "success"
|
|
project_id: str
|
|
route_id: int
|
|
confirmed: bool = True
|
|
|
|
|
|
class SectionOptionDefaults(BaseModel):
|
|
"""config에서 읽은 종횡단 생성 기본 옵션."""
|
|
|
|
station_interval_m: float
|
|
cross_half_width_m: float
|
|
cross_sample_interval_m: float
|
|
long_sample_interval_m: float
|
|
vertical_exaggeration: float
|
|
|
|
|
|
class SectionContextResponse(BaseModel):
|
|
"""B06 진입 시 필요한 확정 경로 컨텍스트와 기본 옵션."""
|
|
|
|
project_id: str
|
|
route_id: int | None = None
|
|
filter_key: str | None = None
|
|
method: str | None = None
|
|
smooth: bool | None = None
|
|
crs_epsg: int | None = None
|
|
defaults: SectionOptionDefaults
|
|
|
|
|
|
class SectionSummaryResponse(BaseModel):
|
|
"""종횡단 요약 조회 결과."""
|
|
|
|
status: str = "success"
|
|
project_id: str
|
|
route_id: int
|
|
longitudinal: dict[str, Any] | None = None
|
|
length_m: float | None = None
|
|
cross_section_count: int = 0
|
|
|
|
|
|
class SectionDetailResponse(BaseModel):
|
|
"""종단·횡단 SVG 렌더링에 필요한 원시 샘플 데이터."""
|
|
|
|
longitudinal: dict[str, Any]
|
|
cross_sections: list[dict[str, Any]]
|