/* ============================================================================= * B05_Profile_Api_Pipes_Draft.ts * B05 배수유역도에서 고친 **관 목록 초안**(세션) — [저장]·[확정]에서만 정본으로 나간다. * * 왜 생겼나(2026-09-06 대응표 조사) — 관 추가·이동·삭제가 패널 메모리에만 있어, B06 으로 * 넘어가 [저장]하면 그 편집이 통째로 사라졌다(`savePipes()` 를 부르는 곳이 B05 [임시저장] * 하나뿐이었다). 다른 조작값과 같은 규칙으로 세션에 쌓고 저장 앞단에서 함께 내보낸다. * * 자동저장은 하지 않는다(CLAUDE.md 5장). * * 관 목록의 주인은 설계 가게(`design_store` 의 `pipes`) 하나다(계획서 24-2a) — B05 배수유역도 · * B06 구조물 목록 모두 이 창구로 읽고 쓴다. * ========================================================================== */ import { useDesignStore } from "../A00_Common/design/design_store"; import type { DetailPipeInput } from "../B04_PreProcess/B04_PreProcess_Api_Fetch"; import type { SavePart } from "../A00_Common/design/design_save_api"; /** 세션에 담는 관 한 벌 — 정본 PUT 이 그대로 받는 꼴이다. */ export type PendingPipes = DetailPipeInput[]; export function readPendingPipes(projectId: string): PendingPipes | null { return useDesignStore(projectId, null).get("pipes"); } export function writePendingPipes(projectId: string, next: PendingPipes | null): void { useDesignStore(projectId, null).set("pipes", next); } /** 한 본문 [저장] 조각(472-6) — 초안 = `{points}` · 초안 없는 [확정] = 빈 본문(서버 저장분으로 다시 셈) · * 초안 없는 [저장] = null. 저장 뒤 초안 비움. */ export function pipesPart(projectId: string, confirm: boolean): SavePart | null { const pending = readPendingPipes(projectId); if (!pending && !confirm) return null; return { body: pending ? { points: pending } : {}, after: () => writePendingPipes(projectId, null), }; }