"""M02 마스터 템플릿 API — 시스템 층(계약 `6_계약.md` 서버 길 첫 묶음). ⚠ 권한은 등록하는 쪽(`main.py`)이 `system_admin_only` 로 붙임. """ from __future__ import annotations from typing import Any from fastapi import APIRouter, HTTPException from pydantic import BaseModel from M02_MasterTemplete import M02_MasterTemplete_Store as store router = APIRouter(prefix="/api/m02", tags=["M02 MasterTemplete"]) class SaveBody(BaseModel): 판: str = "" 문서: Any def _call(fn, *args): try: return fn(*args) except store.StoreError as e: raise HTTPException(status_code=e.status, detail=e.detail) from e @router.get("/templates") def get_templates() -> list[dict]: return _call(store.list_all) @router.get("/templates/{kind}/{name}") def get_template(kind: str, name: str) -> dict: return _call(store.read, kind, name) @router.put("/templates/{kind}/{name}") def put_template(kind: str, name: str, body: SaveBody) -> dict: return _call(store.write, kind, name, body.판, body.문서) @router.delete("/templates/{kind}/{name}") def delete_template(kind: str, name: str, 판: str | None = None) -> dict: _call(store.delete, kind, name, 판) return {"ok": True}