feat(827-3): 불러오기 재료 걸음 3 — 고를 재료 판 · 그 파일 안 고름(별칭 아님) · SK 상세 같은 파일 물음
- 새 M02_San_MatPick: 종 열쇠(이름 · 규격 · 단위 · 단서) · 고름 자리 = 개인 층 실무자료/재료고름/<파일 지문>.json([끝내기] 뒤 남음 · 같은 파일 다시 올리면 그대로) · 판(블록마다 재료찾기 판정 → 종 · 첫 판 한 번 셈 → 산근 저장본 칸) · 만들 때 얹기 · 이미 만든 SK 얹기(가져온 그대로인 줄만 · 바꿈 · 따로 고른 줄 그대로 · 풀면 가져온 그대로)
- 만들기: from-hopyo 가 그 파일 고름째 만듦(저장 안 한 판 고름 = 만들 때 저장) · 원본 지문 · 고른 줄 = 이음 + 재료찾기.고름 · 문서 셈 우리 값(엑셀 값 기억 없음) · 별도계상 = 품목만(줄 이음 · 단가 0 그대로)
- 문서 머리 가져온.재료(판정 · 후보 · 단서 · 처음 연결) · 가져온.지문
- 길: GET/POST hopyo-materials/{HP}(판 · [저장] · 만든 것 적용은 물음 예일 때만) · GET/POST material-picks/{지문}(SK 상세 물음)
- 화면: 단가산출 목록 위 「고를 재료」 판(후보 고름 · 찾기 · 고름 풀기 · n 블록에 적용 · 이어진 재료 접힘 · [저장]) · 저장 안 한 고름 = 떠날 때 물음 · 줄 쌓기 재료 줄 판정 배지 · 풍선말(판정 · 단서 · 후보) · 이름 단추 · [이음 고르기] 뒤 「같은 파일 n 줄」 물음
- 별도계상 설명 = 「별도계상 · 품목: 이름 규격」(엔진 이은 품목은 자재표 이름) — test_827_2 기대 글 고침(품목 이음 → 품목 이름)
- 시험 test_827_3 셋(파일 고름 블록 둘 · 다른 파일 0 · 별칭 · 마스터 그대로 · 풀기 · 다시 올림 유지 · 물음 예일 때만 · 따로 바꾼 줄 보존 · 별도계상 품목 + 단가 0)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
@@ -26,11 +26,12 @@ from M02_MasterTemplete import M02_Hopyo_Forget as hopyo_forget
|
||||
from M02_MasterTemplete import M02_Hopyo_Grid as hopyo_grid
|
||||
from M02_MasterTemplete import M02_Hopyo_Item as hopyo_item
|
||||
from M02_MasterTemplete import M02_Hopyo_Marks as hopyo_marks
|
||||
from M02_MasterTemplete import M02_Hopyo_View as hopyo_view_
|
||||
from M02_MasterTemplete import M02_Hopyo_Paste as hopyo_paste
|
||||
from M02_MasterTemplete import M02_Hopyo_Relink as hopyo_relink
|
||||
from M02_MasterTemplete import M02_Hopyo_Store as hopyo_store
|
||||
from M02_MasterTemplete import M02_Hopyo_View as hopyo_view_
|
||||
from M02_MasterTemplete import M02_MasterTemplete_Store as store
|
||||
from M02_MasterTemplete import M02_San_MatPick as mat_pick
|
||||
from M02_MasterTemplete import M02_Sangeun_FromHopyo as from_hopyo
|
||||
from M02_MasterTemplete.M02_MasterTemplete_Router_Items import Layer, Session, _call, _root
|
||||
|
||||
@@ -330,3 +331,105 @@ def hopyo_marks_read(
|
||||
folder = _root(session, layer, owner)
|
||||
target = _root(session, to, to_owner) if to else folder
|
||||
return _call(folder, lambda: {"블록": hopyo_marks.blocks(folder, key, target)})
|
||||
|
||||
|
||||
# ── 불러오기 재료 고름(827-3 · 별칭 아님 · 고름 자리 = 개인 층) ──────────────────
|
||||
class MatPickBody(_Strict):
|
||||
"""`고름` {종: 고른 것 | null(풂)} · `만든적용` = 이미 만든 SK 에도(물음 예) · `종` = 얹을 종(없으면 `고름` 의 종)."""
|
||||
|
||||
고름: dict[str, dict[str, Any] | None] = Field(default_factory=dict, max_length=500)
|
||||
만든적용: bool = False
|
||||
종: list[str] | None = Field(default=None, max_length=500)
|
||||
|
||||
|
||||
@router.get("/layers/{layer}/hopyo-materials/{key}")
|
||||
def hopyo_materials(
|
||||
layer: Layer,
|
||||
key: str,
|
||||
owner: str | None = None,
|
||||
to: Layer | None = None,
|
||||
to_owner: str | None = None,
|
||||
session: Session = Depends(verify_session),
|
||||
) -> dict:
|
||||
"""고를 재료 판 — `{지문, 파일, 종 [판정 · 후보 · 단서 · 블록 · 고름?], 만든 [SK]}`(첫 판 = 블록 셈 한 번)."""
|
||||
folder = _root(session, layer, owner)
|
||||
target = _root(session, to, to_owner) if to else folder
|
||||
mine = _root(session, "personal", None)
|
||||
|
||||
def run() -> dict:
|
||||
fp, name = mat_pick.fingerprint(folder, key)
|
||||
picks = mat_pick.read(mine, fp)["고름"]
|
||||
kinds = [g | ({"고름": picks[g["종"]]} if g["종"] in picks else {}) for g in mat_pick.census(folder, key)] # fmt: skip
|
||||
return {"지문": fp, "파일": name, "종": kinds, "만든": mat_pick.made(target, fp)}
|
||||
|
||||
return _call(folder, run)
|
||||
|
||||
|
||||
@router.post("/layers/{layer}/hopyo-materials/{key}")
|
||||
def hopyo_materials_save(
|
||||
layer: Layer,
|
||||
key: str,
|
||||
body: MatPickBody,
|
||||
owner: str | None = None,
|
||||
to: Layer | None = None,
|
||||
to_owner: str | None = None,
|
||||
session: Session = Depends(verify_session),
|
||||
) -> dict:
|
||||
"""[저장] — 고름을 개인 층 그 파일 자리에 · 만든적용 = 그 파일 SK(만들 층)의 가져온 그대로인 줄에도 → `{고름, 고침?, 그대로?}`."""
|
||||
folder = _root(session, layer, owner)
|
||||
mine = _root(session, "personal", None, write=True)
|
||||
fp, name = _call(folder, mat_pick.fingerprint, folder, key)
|
||||
out: dict[str, Any] = {"고름": _call(mine, mat_pick.write, mine, fp, name, body.고름)}
|
||||
if body.만든적용:
|
||||
target = _root(session, to or layer, to_owner if to else owner, write=True)
|
||||
kinds = set(body.종 if body.종 is not None else body.고름)
|
||||
out |= _call(target, mat_pick.apply_made, fp, out["고름"], kinds)
|
||||
return out
|
||||
|
||||
|
||||
class SkPickBody(_Strict):
|
||||
"""SK 상세에서 고른 재료 줄 → 같은 파일 같은 종(물음 예) — `빼기` = 지금 SK(화면 [저장] 몫)."""
|
||||
|
||||
종: str = Field(max_length=4000)
|
||||
고름: dict[str, Any] | None = None
|
||||
파일: str = Field(default="", max_length=200)
|
||||
빼기: list[str] = Field(default_factory=list, max_length=20)
|
||||
|
||||
|
||||
@router.get("/layers/{layer}/material-picks/{fp}")
|
||||
def material_pick_uses(
|
||||
layer: Layer,
|
||||
fp: str,
|
||||
종: str,
|
||||
owner: str | None = None,
|
||||
me: str = "",
|
||||
session: Session = Depends(verify_session),
|
||||
) -> dict:
|
||||
"""SK 상세 물음 — `{수 {블록, 줄}(작업 중 HP 판 · 없으면 null), 만든 [그 종 줄 있는 다른 SK], 고름?}`."""
|
||||
folder = _root(session, layer, owner)
|
||||
mine = _root(session, "personal", None)
|
||||
|
||||
def run() -> dict:
|
||||
n = mat_pick.tally(folder, fp, 종)
|
||||
n = n if n is not None or mine == folder else mat_pick.tally(mine, fp, 종)
|
||||
return {"수": n, "만든": mat_pick.uses(fp, 종, (me,)), "고름": mat_pick.read(mine, fp)["고름"].get(종)} # fmt: skip
|
||||
|
||||
return _call(folder, run)
|
||||
|
||||
|
||||
@router.post("/layers/{layer}/material-picks/{fp}")
|
||||
def material_pick_save(
|
||||
layer: Layer,
|
||||
fp: str,
|
||||
body: SkPickBody,
|
||||
owner: str | None = None,
|
||||
session: Session = Depends(verify_session),
|
||||
) -> dict:
|
||||
"""그 종 고름을 개인 층 파일 자리에 + 이 층 그 파일 다른 SK 의 가져온 그대로인 줄에 → `{고름, 고침, 그대로}`."""
|
||||
folder = _root(session, layer, owner, write=True)
|
||||
mine = _root(session, "personal", None, write=True)
|
||||
picks = _call(mine, mat_pick.write, mine, fp, body.파일, {body.종: body.고름})
|
||||
return {
|
||||
"고름": picks,
|
||||
**_call(folder, mat_pick.apply_made, fp, picks, {body.종}, tuple(body.빼기)),
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user