From ae51bed23c0fa11a27c5e4c2d178269658b4e3a7 Mon Sep 17 00:00:00 2001 From: umsangdon Date: Wed, 30 Sep 2026 13:17:57 +0900 Subject: [PATCH] =?UTF-8?q?feat(M02):=20=EB=8B=B4=EC=9D=84=20=EB=A1=9C?= =?UTF-8?q?=EC=A7=81=20=EC=9D=BD=EA=B8=B0=20=EA=B8=B8=20/api/m02/logic-lib?= =?UTF-8?q?=20=E2=80=94=20=EB=A1=9C=EA=B7=B8=EC=9D=B8=EC=9D=B4=EB=A9=B4=20?= =?UTF-8?q?=EB=A1=9C=EC=A7=81=20=EB=AA=A9=EB=A1=9D=20=C2=B7=20=EA=B0=88?= =?UTF-8?q?=EB=9E=98=20=C2=B7=20=ED=95=98=EB=82=98=20=C2=B7=20=EA=B2=AC?= =?UTF-8?q?=EB=B3=B8=20=EC=9E=85=EB=A0=A5(PLAN=2027-2b=20=EC=84=9C?= =?UTF-8?q?=EB=B2=84)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 회사 · 개인 조합 편집이 M01 관리자 전용 길 없이 로직을 고르고 미리 보기 - 시험 test_m02_combo_layers 한 벌 더함(9) Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_01BU9gbNE3aWFUvE61pS2WGt --- .../M02_MasterTemplete_Router_Combos.py | 34 ++++++++++++++++++- resources/tester/test_m02_combo_layers.py | 10 ++++++ 2 files changed, 43 insertions(+), 1 deletion(-) 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