Crowny Hall — 설정(Settings) API + 요금 마스터 실배선
개요
hall.crowny.org:9606 (LaunchAgent org.crowny.hall)에
GET/POST /api/settings를 신설하고,
정산(
/api/settle) 로직이 하드코딩 요금(대공연장 8000000원 등) 대신 PSV 요금 마스터를 읽도록 전환했다.
기존 엔드포인트·계약·PSV 포맷은 회귀 없이 유지.
무엇을 했는지
서버.한선에 설정 섹션(요금/프리셋/씬/인벤토리/사용자) 신설:
_설정KV값/_설정KV설정 — key\|value append-log 제네릭 헬퍼(요금 마스터).
_프리셋저장/삭제, _씬저장/삭제, _인벤토리저장/삭제, _설정사용자저장/삭제 — 전체 재작성 upsert(딜.psv _딜단계갱신 패턴 재사용).
_홀명매칭(sub) — sub 문자열에서 대공연장/소공연장/리허설룸 A·B 판별(포함하나 사용).
_처리설정GET — 5섹션(rates.halls/labor_hourly/night_pct/power_won_kwh, presets, scenes, inventory, users) JSON 조합.
_처리설정POST — RBAC(role=manager만 허용) + 8타입 디스패치(rate_set/preset_save/preset_delete/scene_save/scene_delete/inventory_set/inventory_delete/user_role/user_delete).
_대관료계산·신설 _초과요금계산이 하드코딩 대신 _설정KV값(_설정요금파일, "rate:<홀>:base|overtime", 기본값)으로 조회하도록 교체.
_처리정산POST의 인건비(labor_hourly×22×4, night_pct 야간가산)·전력(power_won_kwh)도 요금 마스터에서 읽도록 교체. 기존 정산 응답 JSON 구조·필드명은 불변.
요청처리 라우팅에 /api/settings(GET/POST) 추가.
부트스트랩에 5개 PSV 파일 최초 시드(파일 없으면 기본값 기록):
data/설정_요금.psv — rate:<홀>:base|overtime|seats, global:labor_hourly|night_pct|power_won_kwh
data/설정_프리셋.psv, data/설정_씬.psv — name|sub
data/설정_인벤토리.psv — category|name|status|note
data/설정_사용자.psv — name|role검증 (curl 실측, 전부 통과)
CROWNY_STRICT=1 ./hanseonc_high 서버.한선 → 0에러 0경고. 서버.toau 교체(백업 서버.toau.bak.20260720232041) → launchctl kickstart -k → /health 200.
GET /api/settings 5섹션 JSON 정상 파스(halls 3·presets 4·scenes 5·inventory 3·users 4).
- 요금 마스터 실배선 증명:
POST rate_set 대공연장 base→9000000(manager) → GET /api/settings 반영 확인 → POST /api/settle {name:"뮤지컬 갈라 콘서트",role:"booking"} 대관료 9000000 확인 → base 8000000 원복 → 재정산 시 8000000 복귀 확인.
- RBAC:
role=operator/role=sm으로 /api/settings POST → 거부 확인. preset_save/preset_delete, inventory_set(upsert), user_role/user_delete 왕복 전부 정상.
- 회귀:
/api/state(딜 7건·키 12종) 200·/portal 200·/space/env 브리지 정상·/api/settle 기존 필드 구조 불변·/api/materials·/api/checkin 정상.
- 정산.psv에 남은 테스트 히스토리(9000000 라인)는 append-log 특성상 유지, 마지막 값은 재정산으로 8000000 복원.
관련 파일
/Users/ef/crowny-hall/서버.한선 (정본, 수정)
/Users/ef/crowny-hall/서버.toau (재배포)
/Users/ef/crowny-hall/data/설정_요금.psv, 설정_프리셋.psv, 설정_씬.psv, 설정_인벤토리.psv, 설정_사용자.psv (신규)
크라우니코드
lookup MISS 2건("설정마스터API"/"요금마스터") → 신규 생성 →
crownycode-learn.sh add hall설정마스터API "..." 1건 학습 완료.
잔여 이슈
- 앱.html/포털.html에 설정 UI(요금 편집·프리셋/씬/인벤토리/사용자 관리 화면)는 미배선 — 타 에이전트 작업 영역이라 이번 작업 범위 밖(지시에 따라 손대지 않음).
- rate_set 등 POST의
value는 문자열 그대로 저장 — 숫자 포맷 검증(음수/비숫자 가드)은 추후 강화 여지.