- 정의 틀 = docs/raw/M02_구조물옵션정의/정의_틀.md (담는 것 · 키 규칙 · 꼴 · 배치 · 그룹 형상 · 규칙 · 동작 · 판 이력) - resources/master_template/구조물정의.json 판 1 = 옛 B05 레지스트리(37종 · 옵션 235) + 옵션표시 + 옵션그룹 키 그대로 옮김 - GET /api/m02/structure-definition(로그인) · PUT(시스템 관리자만 · 판 +1 · 이력 판_N) · 검사(꼴 · 키 겹침 · 규칙 대상) - GET /structure-types · B05 구조물 검사가 새 정의를 읽음(응답 꼴 그대로) · 옵션 보이기 · 그룹 저장도 정의 칸으로 - 프로젝트 structures.json 에 저장 때 정의 판 · 정의에 없는 키 값은 남김(오류 없음) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01EYJJRCfHfdCGNhmXTjQKV7
57 lines
2.2 KiB
TypeScript
57 lines
2.2 KiB
TypeScript
/* =============================================================================
|
|
* M02_SO_Api.ts
|
|
* 구조물 옵션 보이기 · 그룹 서버 호출 — 서버 = `M02_SO_Router.py`
|
|
* (마스터 템플릿 `구조물정의.json` 「표시」 · 「그룹」 칸 · PLAN 48-1)
|
|
* ========================================================================== */
|
|
|
|
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<string, Record<string, false>>;
|
|
종류: OptionKind[];
|
|
}
|
|
|
|
export const fetchStructureOptions = (): Promise<OptionsDoc> =>
|
|
call("/layers/system/structure-options"); // 읽기 = 로그인 누구나 · 고쳐 씀은 시스템 관리자
|
|
|
|
/** 고쳐 씀 — 숨긴 것만 보냄 · 낡은 판이면 StaleError · 돌려받는 것은 새 문서 */
|
|
export const saveStructureOptions = (판: string, 표시: OptionsDoc["표시"]): Promise<OptionsDoc> =>
|
|
call("/structure-options", { method: "PUT", body: JSON.stringify({ 판, 표시 }) });
|
|
|
|
/* --- 옵션 그룹(PLAN 46-2 · 구조물 정의 「그룹」 칸 · 시스템 관리자만) --- */
|
|
|
|
/** 그룹 하나 = 프로젝트 폼의 보조 컨테이너 하나(제목 = 이름) · 옵션 0 도 됨 */
|
|
export interface OptionGroupDef {
|
|
id: string;
|
|
이름: string;
|
|
옵션: string[];
|
|
}
|
|
|
|
/** 판 · 그룹(`{종류: 그룹[]}`) · 종류(레지스트리 전부 — 옵션 없는 종류도) */
|
|
export interface GroupsDoc {
|
|
판: string;
|
|
그룹: Record<string, OptionGroupDef[]>;
|
|
종류: OptionKind[];
|
|
}
|
|
|
|
export const fetchStructureOptionGroups = (): Promise<GroupsDoc> =>
|
|
call("/structure-option-groups");
|
|
|
|
/** 고쳐 씀 — 낡은 판이면 StaleError · 돌려받는 것은 새 문서 */
|
|
export const saveStructureOptionGroups = (
|
|
판: string,
|
|
그룹: GroupsDoc["그룹"],
|
|
): Promise<GroupsDoc> =>
|
|
call("/structure-option-groups", { method: "PUT", body: JSON.stringify({ 판, 그룹 }) });
|