feat(M01): 복사해서 만들기 엔진·서버 — 정본 로직을 별칭 꼴 식으로 펴고 되돌려 자체 로직으로 저장
- `scripts/master_copy.py` — `찾기()`·`로직()` 한 덩이를 별칭 이름으로 · 원문은 별칭표에 그대로 (자르기는 `master_formula` 파서 그대로 · 완전 같은 부르기는 합침 · 인자가 갈리면 등장 차례로 번호) - `GET /logic/formula` · `POST /logic/formula/save` — 저장은 별칭을 원문으로 되돌린 뒤 `logic/new` 재사용 - 계약 `_화면_계약.md` 7장 · 시험 `test_m01_copy.py` 8 통과(로직 1,354줄 되돌리기 전수 포함)
This commit is contained in:
@@ -63,6 +63,16 @@ class DeleteLogic(BaseModel):
|
||||
version: str
|
||||
|
||||
|
||||
class FormulaLogic(BaseModel):
|
||||
"""복사해서 만들기 — 별칭 꼴 식이 든 로직 줄과 그 별칭표(되돌릴 원문)."""
|
||||
|
||||
로직: dict[str, Any]
|
||||
별칭: list[dict[str, Any]] = []
|
||||
owner: str = make.OWNERS[0]
|
||||
이름: str = ""
|
||||
본뜬키: str = ""
|
||||
|
||||
|
||||
def _num(v):
|
||||
"""Decimal → JSON 수(그냥 두면 글자로 나감)."""
|
||||
if isinstance(v, Decimal):
|
||||
@@ -214,3 +224,15 @@ def post_logic_edit(body: EditLogic) -> dict:
|
||||
@router.post("/logic/delete")
|
||||
def post_logic_delete(body: DeleteLogic) -> dict:
|
||||
return _call(make.logic_delete, body.key, body.version)
|
||||
|
||||
|
||||
@router.get("/logic/formula")
|
||||
def get_logic_formula(key: str) -> dict:
|
||||
"""복사해서 만들기 — 로직 한 줄을 별칭 꼴 식 묶음으로."""
|
||||
return _call(make.logic_formula, key)
|
||||
|
||||
|
||||
@router.post("/logic/formula/save")
|
||||
def post_logic_formula_save(body: FormulaLogic) -> dict:
|
||||
"""고친 식 묶음을 자체 로직(`GX`)으로 — 별칭은 원문으로 되돌려 저장."""
|
||||
return _call(make.logic_from_formula, body.로직, body.별칭, body.owner, body.이름, body.본뜬키)
|
||||
|
||||
@@ -19,6 +19,7 @@ SCRIPTS = Path(__file__).resolve().parents[1] / "resources/master_data/scripts"
|
||||
sys.path.insert(0, str(SCRIPTS))
|
||||
|
||||
import check_master as cm # noqa: E402
|
||||
import master_copy as mcp # noqa: E402,F401 (`_Store_Make` 가 `store.mcp` 로 씀)
|
||||
import master_keys as mk # noqa: E402
|
||||
import master_text as mtx # noqa: E402
|
||||
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
"""M01 「만들기」 저장소 — 원문 절 목록 · 표 조건 값 · 자체 로직 만들기·본뜨기·고치기·지우기.
|
||||
"""M01 「만들기」 저장소 — 원문 절 목록 · 표 조건 값 · 자체 로직 만들기·본뜨기·고치기·지우기
|
||||
· 복사해서 만들기(정본 로직을 별칭 꼴 식으로 펴 보이고 되돌려 저장).
|
||||
|
||||
계약: `resources/master_data/_화면_계약.md` 2장·5장 · 파일 모양: `_틀.md` 7장.
|
||||
계약: `resources/master_data/_화면_계약.md` 2장·5장·7장 · 파일 모양: `_틀.md` 7장.
|
||||
자체 로직은 `로직_자체.json` 한 파일 · 키는 `_키대장.json` 의 `GX` 다음 번호(서버가 줌).
|
||||
"""
|
||||
|
||||
@@ -12,7 +13,7 @@ from pathlib import Path
|
||||
|
||||
from M01_MasterData import M01_MasterData_Store as store
|
||||
|
||||
cm, mk = store.cm, store.mk
|
||||
cm, mk, mcp = store.cm, store.mk, store.mcp
|
||||
|
||||
OWN = "로직_자체.json" # 자체 로직 한 자리 — 이 파일 줄만 고치고 지울 수 있음
|
||||
OWNERS = ("현장", "공용")
|
||||
@@ -231,6 +232,36 @@ def logic_edit(key: str, version: str, logic: dict, owner: str = "") -> dict:
|
||||
return {**done, "logic": store.logic(key)["logic"]}
|
||||
|
||||
|
||||
# ── 복사해서 만들기 ────────────────────────────────────────────────────
|
||||
def logic_formula(key: str) -> dict:
|
||||
"""로직 한 줄을 별칭 꼴 식 묶음으로 펴 보임 — 되돌릴 원문은 `별칭` 에 그대로(정본은 안 바뀜)."""
|
||||
got = store.logic(key)
|
||||
master = cm.mf.Master(cm.load(folder=store.FOLDER))
|
||||
return {
|
||||
"file": got["file"],
|
||||
"version": got["version"],
|
||||
"key": key,
|
||||
"소유": got["logic"].get("소유") or "",
|
||||
"prices": got["prices"],
|
||||
**mcp.spread(master, got["logic"]),
|
||||
}
|
||||
|
||||
|
||||
def logic_from_formula(
|
||||
logic: dict, marks: list[dict], owner: str = OWNERS[0], 이름: str = "", 본뜬키: str = ""
|
||||
) -> dict:
|
||||
"""고친 식 묶음을 자체 로직으로 저장 — 별칭을 원문으로 되돌린 뒤 `logic_new` 를 그대로 씀."""
|
||||
try:
|
||||
row = mcp.gather(logic, marks)
|
||||
except cm.mf.FormulaError as e:
|
||||
raise store.StoreError(400, str(e)) from e
|
||||
if 이름:
|
||||
row["이름"] = 이름
|
||||
if 본뜬키:
|
||||
row["비고"] = " · ".join(x for x in (str(row.get("비고") or ""), f"{본뜬키} 를 본뜸") if x)
|
||||
return logic_new(row, owner)
|
||||
|
||||
|
||||
def logic_delete(key: str, version: str) -> dict:
|
||||
file, _ = _find(key)
|
||||
_own_only(file, key)
|
||||
|
||||
Reference in New Issue
Block a user