refactor(M02): 일위대가 조합 나무 서버 길 지움 — /tree · /tree-many · /paste(39-2)

- Combo_Store 나무 고침 함수(_apply · edit_tree(_many) · commit · _write_master_folders · _set_path) 지움 · 목록 폴더는 읽기만
- Combo_Copy.py(층 사이 붙여넣기) 지움 · Labor_Api 나무 · 붙여넣기 함수 지움
- 옛 나무 · 붙여넣기 시험을 「길 없음」 검사로 갈음

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01BVPp2o6Mh2FZJr72yW3ofZ
This commit is contained in:
2026-10-04 17:44:31 +09:00
co-authored by Claude Opus 5.5
parent 0e28b5be4a
commit f8d024fc28
5 changed files with 10 additions and 498 deletions
@@ -19,7 +19,6 @@ from pydantic import BaseModel
from common_util.common_util_auth import verify_session
from M01_MasterData import M01_MasterData_Store as m01
from M02_MasterTemplete import M02_Layer_Access as access
from M02_MasterTemplete import M02_MasterTemplete_Combo_Copy as combo_copy
from M02_MasterTemplete import M02_MasterTemplete_Combo_Store as combos
from M02_MasterTemplete.M02_MasterTemplete_Router_Items import Layer, Session, _call, _root
@@ -31,36 +30,6 @@ class ComboBody(BaseModel):
판: str | None = None # 새로 만들 때 빈 글 = 지금 판 · 고칠 때 어긋나면 409
class ComboTreeBody(BaseModel):
"""`{op: add-folder|rename|move|delete, 경로?, 이름?, 새경로?, 키?, 판}` — 폴더 깊이 2."""
op: str
경로: list[str] | None = None
이름: str | None = None
새경로: list[str] | None = None
키: str | None = None
판: str
class TreeManyBody(BaseModel):
"""여러 개 옮기기 · 지우기(PLAN 30-3) — `ops` = 나무 고침(`ComboTreeBody` 모양) · 저장 한 번."""
판: str
ops: list[dict[str, Any]]
class PasteBody(BaseModel):
"""층 사이 복사(PLAN 30-3) — 원본 층(`from_layer` · `from_owner`)의 조합 `키` · 폴더 `폴더` →
이 층 `경로` 폴더에 새 키로. `판` = 이 층 조합 표 판."""
from_layer: Layer
from_owner: str | None = None
키: list[str] = []
폴더: list[list[str]] = []
경로: list[str] = []
판: str = ""
class PreviewBody(BaseModel):
"""저장 전 미리 보기 — `combo` 는 조합 줄 통째 또는 그 층 키 · `inputs` 는 로직마다."""
@@ -166,41 +135,6 @@ def delete_practice(판: str = "", session: Session = Depends(verify_session)) -
return _call(_root(session, "system", None, write=True), combos.drop_practice, 판)
@router.post("/layers/{layer}/combos/tree")
def post_tree(
layer: Layer,
body: ComboTreeBody,
owner: str | None = None,
session: Session = Depends(verify_session),
):
folder = _root(session, layer, owner, write=True)
return _call(folder, combos.edit_tree, body.model_dump())
@router.post("/layers/{layer}/combos/tree-many")
def post_tree_many(
layer: Layer,
body: TreeManyBody,
owner: str | None = None,
session: Session = Depends(verify_session),
):
folder = _root(session, layer, owner, write=True)
return _call(folder, combos.edit_tree_many, body.model_dump())
@router.post("/layers/{layer}/combos/paste")
def post_paste(
layer: Layer,
body: PasteBody,
owner: str | None = None,
session: Session = Depends(verify_session),
):
"""원본 층 읽기 권한 · 이 층 쓰기 권한(M02_Layer_Access) — 마스터 붙이기 = 시스템 관리자."""
source = _call(_root(session, body.from_layer, body.from_owner), lambda: combos._load()[0])
folder = _root(session, layer, owner, write=True)
return _call(folder, combo_copy.paste, source, body.model_dump())
@router.post("/layers/{layer}/combos/preview")
def post_preview(
layer: Layer,