- 「예상노선으로」를 「초기화」로 — 마지막에 적용한 초기값(처음엔 예상노선 추종)으로 편집값만 되돌림 · 즉시 재계산 없앰 - 옛 「초기화」(창을 연 상태로)는 「연 상태로」 - 로직 단추 토공 최소 · 기울기 순한 노선 · 비중 계산(예상 · 토공 · 기울기 슬라이더 · 합 100 자동 · 기본 50/25/25 · [계산]) - 누르면 서버 갈래(POST /route/initial)를 불러 받은 노드를 편집값에 싣고(되돌리기 한 걸음) 결과 캐시(routeedit-initial)에 새 초기값으로 적음 - 「현재 초기값: ○○」 · 결과 비교값(연장 · 최대/평균 기울기 · 절성토량 · 기준 초과 구간 · 이격) · 공통 제약 기준값은 서버 값만 보임(확정 표시 없으면 「후보 · 사용자 확정 대기」) - 다시 계산은 노선이 바뀐 뒤 [확인]에서만 — 그대로면 계산 없이 닫음 · [확인] 몸통에 초기값(initial) 실음 · [취소]는 이 창에서 바꾼 초기값도 되돌림 - 서버 길이 아직 없으면 알림만(고친 적 없는 노선의 [초기화]는 창을 연 노선으로) - 700줄 한도 — 노드 끼우기·빼기 배선은 _Input(bindNodeSplice), 셈은 _Initial_Model - 시험 test_b05_routeedit_initial.py (비중 합 100 · 서버 답 두 꼴 펴기 · 글 · 캐시 칸) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_015sCeZz8z8YnbovsKgn7HK7
55 lines
2.2 KiB
TypeScript
55 lines
2.2 KiB
TypeScript
/* =============================================================================
|
|
* B05_Profile_Api_RouteInitial.ts
|
|
* 초기노선 갈래 요청(계획서 20) — 로직 하나를 골라 서버가 새 계획노선 노드를 낸다.
|
|
*
|
|
* POST /projects/{id}/route/initial { logic, weights? } → 노드 · 비교값 · 공통 제약 기준값
|
|
*
|
|
* 계산 자리는 **서버 단독**(CLAUDE.md 5장 ③) — 화면은 부르고, 받은 노드를 편집 캐시에 싣고,
|
|
* 받은 비교값·기준값을 보이기만 한다. 서버 길은 sub3 몫이라 모양이 오면 `normalizeRouteInitial`
|
|
* (`_RouteEdit_Initial_Model`) 한 곳만 맞춘다.
|
|
* ========================================================================== */
|
|
|
|
import { requestJson } from "./B05_Profile_Api_Replan";
|
|
|
|
/** 갈래 셈 대기 상한 — 노선 여러 벌을 셈해 견주므로 넉넉히 잡는다. */
|
|
const INITIAL_TIMEOUT_MS = 5 * 60 * 1000;
|
|
|
|
/** 로직 이름 — 서버와 같은 낱말을 쓴다. `follow` 는 예상노선 추종(처음 초기값). */
|
|
export type RouteInitialLogic = "follow" | "earthwork" | "gentle" | "weighted";
|
|
|
|
/** 비중 계산의 세 비중(%) — 합 100. */
|
|
export interface RouteInitialWeights {
|
|
expected: number;
|
|
earthwork: number;
|
|
slope: number;
|
|
}
|
|
|
|
export interface RouteInitialRequest {
|
|
logic: RouteInitialLogic;
|
|
weights?: RouteInitialWeights;
|
|
}
|
|
|
|
/** 서버 길이 아직 없다(404·405) — 화면은 이 글로 알린다. */
|
|
export const ROUTE_INITIAL_MISSING =
|
|
"초기노선 갈래 서버 길이 아직 없습니다(계획서 20 · sub3 대기).";
|
|
|
|
/** 로직 하나로 초기노선을 묻는다. 답의 모양은 `normalizeRouteInitial` 이 편다. */
|
|
export async function fetchRouteInitial(
|
|
projectId: string,
|
|
request: RouteInitialRequest,
|
|
): Promise<unknown> {
|
|
try {
|
|
return await requestJson<unknown>(
|
|
`/projects/${projectId}/route/initial`,
|
|
{ method: "POST", body: JSON.stringify(request) },
|
|
INITIAL_TIMEOUT_MS,
|
|
);
|
|
} catch (error) {
|
|
const message = error instanceof Error ? error.message : "";
|
|
if (/HTTP 40[45]|Not Found|Method Not Allowed/.test(message)) {
|
|
throw new Error(ROUTE_INITIAL_MISSING);
|
|
}
|
|
throw error;
|
|
}
|
|
}
|