diff --git a/M02_MasterTemplete/M02_MasterTemplete_Router_Combos.py b/M02_MasterTemplete/M02_MasterTemplete_Router_Combos.py index f5d4c287..fb4ea592 100644 --- a/M02_MasterTemplete/M02_MasterTemplete_Router_Combos.py +++ b/M02_MasterTemplete/M02_MasterTemplete_Router_Combos.py @@ -5,16 +5,19 @@ company 읽기 = 같은 회사 · 쓰기 = 회사 관리자(키 UC{회사}-######) personal 읽기 · 쓰기 = 본인(키 UP{사용자}-######) 저장소 = `M02_MasterTemplete_Combo_Store`. +담을 로직 고르기 · 미리 보기가 읽는 단가산출 로직(M01 길은 시스템 관리자 전용)은 +`/api/m02/logic-lib/…` 읽기만(로그인) — 모양은 M01 길과 같음. """ from __future__ import annotations from typing import Any -from fastapi import APIRouter, Depends +from fastapi import APIRouter, Depends, HTTPException 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_MasterTemplete_Combo_Store as combos from M02_MasterTemplete.M02_MasterTemplete_Router_Items import ( Layer, @@ -138,3 +141,32 @@ def post_preview( ): """보기만 — 수량(inputs)은 이 부름에만 실림 · 저장 안 함 · 읽기 권한.""" return _call(_root(session, layer, owner), combos.preview, body.combo, body.inputs) + + +# ── 담을 로직(읽기만) — M01 `/logics` · `/subs?group=로직` · `/logic` · `/logic/auto` 모양 ── +def _read(fn, *args): + try: + return fn(*args) + except m01.StoreError as e: + raise HTTPException(status_code=e.status, detail=e.detail) from e + + +@router.get("/logic-lib/logics", dependencies=[Depends(verify_session)]) +def get_logics() -> dict: + return {"logics": _read(m01.logics, "", "", "", None)} + + +@router.get("/logic-lib/subs", dependencies=[Depends(verify_session)]) +def get_logic_subs() -> dict: + return _read(m01.subs, "", "로직") + + +@router.get("/logic-lib/logic", dependencies=[Depends(verify_session)]) +def get_logic(key: str) -> dict: + return _read(m01.logic, key) + + +@router.get("/logic-lib/auto", dependencies=[Depends(verify_session)]) +def get_logic_auto(key: str) -> dict: + """견본 입력 — 미리 보기용 자동값.""" + return _read(m01.auto, key) diff --git a/resources/tester/test_m02_combo_layers.py b/resources/tester/test_m02_combo_layers.py index 6d5219e0..e16f7a39 100644 --- a/resources/tester/test_m02_combo_layers.py +++ b/resources/tester/test_m02_combo_layers.py @@ -278,3 +278,13 @@ def test_면적_알약이_개인_조합을_읽음(world): pills = me.get(f"/api/m02/layers/personal/items/{key}/pills", params={"place": "면적"}) assert pills.status_code == 200, pills.text assert [p["키"] for p in pills.json()["물량"]] == ["돌쌓기 찰쌓기|㎡"] + + +def test_담을_로직_읽기는_로그인이면_됨(world): + user = _as(world) + logics = user.get("/api/m02/logic-lib/logics").json()["logics"] + assert A in {x["키"] for x in logics} + assert user.get("/api/m02/logic-lib/logic", params={"key": A}).json()["logic"]["키"] == A + assert user.get("/api/m02/logic-lib/logic", params={"key": "GF999999"}).status_code == 404 + assert user.get("/api/m02/logic-lib/subs").json()["subs"] + assert user.get("/api/m02/logic-lib/auto", params={"key": A}).status_code == 200