Files
Aislo/A00_Common/design/design_profile_save.ts
T
eomsangdonandClaude Opus 5.5 8d577ef330 refactor(472 마무리): 종단도 계획고 [저장] 조각을 design_profile_save 로 떼어 냄 — design_profile 708 → 683 줄 · 동작 같음
- design_profile_save.ts 새 파일 — 한 본문 [저장] 조각 · [확정] 직전 저장 · 저장 뒤 서버 선형 넘김
- 높이 캐스케이드 설명을 B05_Profile_UI_Profile_Heights 머리로 옮김
- 팝아웃 시험 목록에 새 파일 · 저장 조각 시험(test_472_6_profile_save) 추가

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-19 15:33:08 +09:00

53 lines
2.1 KiB
TypeScript

/* =============================================================================
* A00_Common/design/design_profile_save.ts
* 종단도 계획고 편집 저장 — 한 본문 [저장] 조각(472-6) · [확정] 직전 따로 저장.
* 편집 없음 · 노선 초안 미리보기면 안 보냄 · 저장 뒤 서버 선형은 `adopt` 로 종단도에 넘김.
* `design_profile.ts` 에서 떼어 냄(700줄 한계).
* ========================================================================== */
import {
saveProfileAlignment,
type ProfileAlignmentSaveResponse,
} from "../../B05_Profile/B05_Profile_Api_Fetch";
import type {
AlignmentEdits,
ProfileAlignment,
} from "../../B05_Profile/logic/B05_Profile_UI_Profile_Alignment";
import type { SavePart } from "./design_save_api";
import { noticeDroppedEdits } from "./design_save";
export function createProfileSave(deps: {
projectId: string;
routeId: () => number | null;
edits: () => AlignmentEdits;
dirty: () => boolean;
/** 노선 초안 미리보기 편집 중 — 안 보냄. */
previewing: () => boolean;
/** 서버가 돌려준 선형(없을 수 있음) — 기준 갈아끼움 · 저장 표시 · 다시 그림. */
adopt: (saved: ProfileAlignment | undefined) => void;
}) {
/** 한 본문 [저장] 조각 — 편집 없음 · 노선 초안 미리보기면 null. */
function savePart(): SavePart | null {
const routeId = deps.routeId();
if (!routeId || !deps.dirty() || deps.previewing()) return null;
return {
body: { route_id: routeId, ...deps.edits() },
after: (response) => {
const saved = response as unknown as ProfileAlignmentSaveResponse;
noticeDroppedEdits(saved);
deps.adopt(saved.profile_alignment as ProfileAlignment | undefined);
},
};
}
/** [확정] 직전에 호출한다. 편집이 없으면 아무 것도 하지 않는다. */
async function save(): Promise<void> {
const part = savePart();
if (!part) return;
const saved = await saveProfileAlignment(deps.projectId, deps.routeId()!, deps.edits());
await part.after?.(saved as unknown as Record<string, unknown>);
}
return { savePart, save };
}