/* ============================================================================= * M02_SO_Api.ts * 구조물 옵션 보이기 · 그룹 서버 호출 — 서버 = `M02_SO_Router.py` * (마스터 템플릿 `구조물옵션표시.json` · `구조물옵션그룹.json`) * ========================================================================== */ import { call } from "../M02_MasterTemplete_Api_Fetch"; export interface OptionKind { type_id: string; group: string; name: string; /** 거짓이면 B05 선택지에 안 나오는 종류 */ enabled: boolean; options: { key: string; label: string; phase: "b05" | "detail"; required: boolean }[]; } /** 판 · 표시(숨긴 것만 `{종류: {옵션: false}}`) · 종류(옵션이 있는 것과 그 옵션) */ export interface OptionsDoc { 판: string; 표시: Record>; 종류: OptionKind[]; } export const fetchStructureOptions = (): Promise => call("/layers/system/structure-options"); // 읽기 = 로그인 누구나 · 고쳐 씀은 시스템 관리자 /** 고쳐 씀 — 숨긴 것만 보냄 · 낡은 판이면 StaleError · 돌려받는 것은 새 문서 */ export const saveStructureOptions = (판: string, 표시: OptionsDoc["표시"]): Promise => call("/structure-options", { method: "PUT", body: JSON.stringify({ 판, 표시 }) }); /* --- 옵션 그룹(PLAN 46-2 · 마스터 템플릿 `구조물옵션그룹.json` · 시스템 관리자만) --- */ /** 그룹 하나 = 프로젝트 폼의 보조 컨테이너 하나(제목 = 이름) · 옵션 0 도 됨 */ export interface OptionGroupDef { id: string; 이름: string; 옵션: string[]; } /** 판 · 그룹(`{종류: 그룹[]}`) · 종류(레지스트리 전부 — 옵션 없는 종류도) */ export interface GroupsDoc { 판: string; 그룹: Record; 종류: OptionKind[]; } export const fetchStructureOptionGroups = (): Promise => call("/structure-option-groups"); /** 고쳐 씀 — 낡은 판이면 StaleError · 돌려받는 것은 새 문서 */ export const saveStructureOptionGroups = ( 판: string, 그룹: GroupsDoc["그룹"], ): Promise => call("/structure-option-groups", { method: "PUT", body: JSON.stringify({ 판, 그룹 }) });