- 정본 `resources/master_template/구조물옵션그룹.json` = {type_id: [{id, 이름, 옵션[]}]} · 빈 그룹 됨
- 길 GET · PUT /api/m02/structure-option-groups(시스템 관리자) · 검사(없는 종류 · 키 · 겹침 · 옵션 두 그룹 422 · 낡은 판 409)
- /api/projects/structure-types 종류마다 groups(차례 · 이름 · 옵션) · 깨진 표 = 그룹 없음
- 옵션 보이기 화면 = 그룹 목록(이름 · 위로 · 아래로 · 지우기 · 추가) + 옵션 줄 「들어갈 자리」(본체 · 그룹)
- 좌측 「구조물 옵션 보이기」 = 시스템 관리자만
- 시험 test_m02_structure_option_groups.py
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01MPcuokNm1ZR2kqgGGDfaJA
57 lines
2.3 KiB
TypeScript
57 lines
2.3 KiB
TypeScript
/* =============================================================================
|
|
* 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<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 · 마스터 템플릿 `구조물옵션그룹.json` · 시스템 관리자만) --- */
|
|
|
|
/** 그룹 하나 = 프로젝트 폼의 보조 컨테이너 하나(제목 = 이름) · 옵션 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({ 판, 그룹 }) });
|