feat(b08): 조합 연결 [연결 끊기] · 단추 모달 [닫기] 양식(156-1 · 156-3)

- 모달 「조합 연결」 칸 = 그 측점 모든 시설 칸(집계 응답 facilities) · 연결된 칸만 [연결 끊기]
- 끊기 = 확인 창 → link 길에 null(그 칸만 비움 · 판 +1 · 노선 지문 그대로) · 사본 맞춤 안 부름(사본 폴더 그대로)
- B05/B06 초안이면 막고 알림 · 끊은 뒤 다시 셈(「· 미연결」)
- [선택] · [연결 끊기] = ghost 기본 크기(모달 [닫기] 같은 양식)
- 시험 test_156_1_b08_unlink

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01STqEqztUthVFBmEP18wBSz
This commit is contained in:
2026-10-09 20:38:37 +09:00
co-authored by Claude Opus 5.5
parent 6b0c1a889f
commit ca98d9799e
8 changed files with 178 additions and 29 deletions
@@ -9,7 +9,8 @@
POST …/items/{폴더}/reapply 재적용(입력값 · 고른자재는 같은 키면 살림 · `덮임` 알림)
POST …/items/{폴더}/save-as {to, 경로, 이름} 개인 층에 새 항목으로(단가 묶음은 안 가져감)
PUT …/items/{사본 id}/link {summary_item | null, facility} B08 바로 연결(154-2) — 그 시설
조합 칸 하나만 정본에 씀 → 사본 맞춤 → {폴더, snapshot_failed}
조합 칸 하나만 정본에 씀 → 사본 맞춤 → {폴더, snapshot_failed} · null = 끊기(156-1 ·
맞춤 안 함 · 사본 폴더 그대로)
POST …/items/{폴더}/calc 복사본만으로 계산 — 층 셈 한 벌(142-1 · 줄 · 자재 ·
기준합 · 반영합 + 알약 · 빠진입력 · 빈 입력 = 자동값)
종류 = 도면 · 면적 · 입력값 · 고른자재 · 일위대가(읽기만 · 쓰면 400) ·
@@ -164,6 +165,8 @@ async def link_item(
raise HTTPException(status_code=404, detail=str(error)) from error
root = await _root(session, project_id)
await _run(copies.link, root, copy, body.facility, item)
if item is None: # 끊기(156-1) — 맞춤은 고아 사본을 지우므로 안 부름 · 사본 폴더 그대로
return {"폴더": folder_name(copy), "snapshot_failed": []}
failed = await asyncio.to_thread(safe_sync, root, importer(session))
return {"폴더": folder_name(copy), "snapshot_failed": failed}