feat(733-2): 사람 길 만들 때 같은 내용 409 물음 · 복사 딸림 재사용

- 새 M02_Library_Ask — 같은 층 같은 내용(733-1 지문) = 409 {같은것: [{키, 이름, 층, 주인}], 까닭} · 몸 새로 = 그래도 새로 · 씀 = 그 키(새 문서 0 · 같은 내용 아닌 키 = 다시 409)
- 길 = 새로 만들기(빈 문서 · 같은 층 복사 = 안 물음) · [단가산출로 저장] from-line · B09 내 자료집(같은이름 409 와 한 몸 · 하위 호표 지문 = 굳힌 문서) · 공유 요청 승인(일위대가 · 씀 = 사본 키) · 실무 호표 [구조물 조합으로](구조물 조합 지문 = 줄 수량 넣음)
- 복사 딸림 carry — 받는 층에 같은 원본 + 같은 내용 사본이 있으면 그 키 재사용(refs.copied_from) · B09 하위 호표 재사용 목록 = 실무자료 한정 → 모든 사본 원본
- 낡은 시험 고침: test_703 자료집 같은 이름 물음 — 새 이름이라도 같은 내용이면 409(정함 3장 3) → new=True 로 새로 · 씀 확인 더함
- 새 시험 test_733_2_library_ask(새로 · from-line · 승인 · carry) · test_705_2 구조물 조합으로 409

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
2026-11-02 13:54:28 +09:00
co-authored by Claude Opus 5.5
parent 8588743906
commit 40980910fa
12 changed files with 379 additions and 33 deletions
+11 -4
View File
@@ -29,6 +29,7 @@ from common_util.common_util_json import atomic_write_json
from M02_MasterTemplete import M02_Item_Paste as paste_store
from M02_MasterTemplete import M02_Labor_Ref as refs
from M02_MasterTemplete import M02_Layer_Access as access
from M02_MasterTemplete import M02_Library_Ask as library_ask
from M02_MasterTemplete import M02_MasterTemplete_Items as items_store
from M02_MasterTemplete import M02_MasterTemplete_Store as store
from M02_MasterTemplete import M02_Precombo_Folders as pre_folders
@@ -54,6 +55,8 @@ class AskBody(BaseModel):
class ApproveBody(BaseModel):
경로: list[str] = []
새로: bool = False # 회사 층 같은 내용 409 뒤 — 그래도 새로(733-2 · 일위대가)
씀: str | None = None # 같은 내용 409 뒤 — 그 회사 문서를 사본으로(새로 안 만듦)
class RejectBody(BaseModel):
@@ -171,9 +174,9 @@ def _settle(session: Session, company: str | None, rid: str, done: dict[str, Any
return row
def _copy(session: Session, dest: list[str]):
def _copy(session: Session, dest: list[str], new: bool = False, use: str | None = None):
"""승인 = 「회사로 복사…」와 같은 길 — 구조물 항목 = 붙여넣기 ·
사전조합 = 서고 복사(+ 폴더 자리)."""
사전조합 = 서고 복사(+ 폴더 자리) · 회사 층 같은 내용 = 409 물음(733-2 · `M02_Library_Ask`)."""
def run(row: dict[str, Any], company: str) -> str:
target = _root(session, "company", company, write=True)
@@ -194,11 +197,14 @@ def _copy(session: Session, dest: list[str]):
def make() -> dict[
str, Any
]: # 못 읽는 참조 같이 복사 = 받는 층 안에서(`new_library` 와 같음)
got = library_ask.ask("precombo", doc, new, use) # 참조 지문 = 내용 → 옮기기 전 견줌
if got:
return {"이름": got, "씀": True}
return refs.create("precombo", refs.carry(refs.origin_mark(doc, ref), here))
here = ("personal", row["주인"])
made = _call(target, make)
if dest:
if dest and not made.get("씀"):
view = _call(target, pre_folders.view)
move = {"op": "move", "키": made["이름"], "새경로": dest, "판": view["판"]}
_call(target, pre_folders.edit, move)
@@ -215,7 +221,8 @@ def approve(
session: Session = Depends(verify_session),
) -> dict[str, Any]:
"""승인 — 회사 층 `경로` 폴더에 사본(새 키 · 같은 이름 「(1)」) · 원본 개인 것은 그대로."""
return _settle(session, company, rid, {"상태": "승인", "run": _copy(session, body.경로)})
run = _copy(session, body.경로, body.새로, body.씀)
return _settle(session, company, rid, {"상태": "승인", "run": run})
@router.post("/share-requests/{rid}/reject")