From 214c55a3892d711bf0158c5191b34ae1b0293989 Mon Sep 17 00:00:00 2001 From: umsangdon Date: Mon, 28 Sep 2026 22:14:35 +0900 Subject: [PATCH] =?UTF-8?q?fix(M02):=20=EC=93=B0=EB=8A=94=20=EC=96=91?= =?UTF-8?q?=EC=8B=9D=20=EC=A7=80=EC=9A=B0=EA=B8=B0=EB=8A=94=20=ED=99=95?= =?UTF-8?q?=EC=9D=B8=20=EC=B0=BD=20=EC=A0=84=EC=97=90=20=EB=B0=94=EB=A1=9C?= =?UTF-8?q?=20=EB=A7=89=EC=9D=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 서버 목록이 쓰는 양식(구조물집계표 · B07 도각 · 방위표 · 표지)에 `쓰는곳` 을 실음 — IN_USE 한 벌 - 좌측 [지우기] 가 `쓰는곳` 이 있으면 확인 창 없이 「쓰는 양식이라 못 지움 「이름」 — 쓰는 곳」 알림 - 서버 409 막기(6606ef16)는 그대로 두 겹 · M01 화면은 안 건드림 - 시험: 목록의 `쓰는곳` 대조 · ORCA 5180 에서 방위표 · 구조물집계표는 확인 창 없이 알림, 임시 양식은 확인 창 뒤 지워짐(만든 것 되돌림) Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_013zGnt85s95baQ72rhKBCJ4 --- M02_MasterTemplete/M02_MasterTemplete_Api_Fetch.ts | 2 ++ M02_MasterTemplete/M02_MasterTemplete_Store.py | 5 ++++- M02_MasterTemplete/M02_MasterTemplete_UI_Side.ts | 7 +++++++ resources/tester/test_m02_store.py | 6 ++++++ ui_template/ui_template_locale_m2.ts | 4 ++++ 5 files changed, 23 insertions(+), 1 deletion(-) diff --git a/M02_MasterTemplete/M02_MasterTemplete_Api_Fetch.ts b/M02_MasterTemplete/M02_MasterTemplete_Api_Fetch.ts index d35080df..dd9d713d 100644 --- a/M02_MasterTemplete/M02_MasterTemplete_Api_Fetch.ts +++ b/M02_MasterTemplete/M02_MasterTemplete_Api_Fetch.ts @@ -16,6 +16,8 @@ export interface TemplateInfo { 이름: string; 판: string; 수정일: string; + /** 프로그램이 이름으로 부르는 양식이면 그 쓰는 곳 — 있으면 못 지움 */ + 쓰는곳?: string; } export interface TemplateDoc { diff --git a/M02_MasterTemplete/M02_MasterTemplete_Store.py b/M02_MasterTemplete/M02_MasterTemplete_Store.py index 04fe316d..306a8d72 100644 --- a/M02_MasterTemplete/M02_MasterTemplete_Store.py +++ b/M02_MasterTemplete/M02_MasterTemplete_Store.py @@ -81,7 +81,10 @@ def _path(kind: str, name: str) -> Path: def _info(kind: str, path: Path) -> dict[str, Any]: raw = path.read_bytes() stamp = datetime.fromtimestamp(path.stat().st_mtime).isoformat(timespec="seconds") - return {"종류": kind, "이름": path.stem, "판": version_of(raw), "수정일": stamp} + row = {"종류": kind, "이름": path.stem, "판": version_of(raw), "수정일": stamp} + if (kind, path.stem) in IN_USE: + row["쓰는곳"] = IN_USE[(kind, path.stem)] # 화면이 지우기 확인 창 전에 막음 + return row def list_all() -> list[dict[str, Any]]: diff --git a/M02_MasterTemplete/M02_MasterTemplete_UI_Side.ts b/M02_MasterTemplete/M02_MasterTemplete_UI_Side.ts index cffc043f..9eec9861 100644 --- a/M02_MasterTemplete/M02_MasterTemplete_UI_Side.ts +++ b/M02_MasterTemplete/M02_MasterTemplete_UI_Side.ts @@ -309,6 +309,13 @@ export function buildSide(opt: SideOptions): SideHandle { await refresh(); // 저장 직후여도 최신 판으로 const info = currentInfo(); if (!info) return; + if (info.쓰는곳) { + showToast( + L("M02_InUse").replace("{value}", info.이름).replace("{use}", info.쓰는곳), + "error", + ); + return; + } if (!(await showConfirmDialog(L("M02_DeleteConfirm").replace("{value}", info.이름)))) return; try { await deleteTemplate(info.종류, info.이름, info.판); diff --git a/resources/tester/test_m02_store.py b/resources/tester/test_m02_store.py index b4fb860a..fdf15849 100644 --- a/resources/tester/test_m02_store.py +++ b/resources/tester/test_m02_store.py @@ -100,6 +100,12 @@ def test_in_use_templates_not_deleted(client): got = client.delete(f"/api/m02/templates/{kind}/{name}") assert got.status_code == 409 and "쓰는 양식" in got.json()["detail"] assert client.get(f"/api/m02/templates/{kind}/{name}").status_code == 200 + # 목록이 쓰는 곳을 실어 화면이 확인 창 전에 막음 · 안 쓰는 양식엔 없음 + client.put("/api/m02/templates/drawing/아무도", json={"판": "", "문서": doc}) + rows = {(r["종류"], r["이름"]): r for r in client.get("/api/m02/templates").json()} + for key, use in store.IN_USE.items(): + assert rows[key]["쓰는곳"] == use + assert "쓰는곳" not in rows[("drawing", "아무도")] def test_empty_doc_rejected_and_file_untouched(client): diff --git a/ui_template/ui_template_locale_m2.ts b/ui_template/ui_template_locale_m2.ts index 27c7a5a4..bb81c0ae 100644 --- a/ui_template/ui_template_locale_m2.ts +++ b/ui_template/ui_template_locale_m2.ts @@ -23,6 +23,10 @@ export const ui_locales_m2 = { M02_Close: ["닫기", "Close"], M02_NameNeeded: ["이름을 적을 것", "Enter a name"], M02_DeleteConfirm: ["「{value}」 양식을 지울까?", "Delete template “{value}”?"], + M02_InUse: [ + "쓰는 양식이라 못 지움 「{value}」 — {use}", + "“{value}” is in use and cannot be deleted — {use}", + ], M02_Deleted: ["지웠음", "Deleted"], M02_Created: ["만들었음", "Created"], M02_Saved: ["저장했음", "Saved"],