← 목록
기타 2026-07-20 4KB 읽기 5분

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/설정_요금.psvrate:<홀>:base|overtime|seats, global:labor_hourly|night_pct|power_won_kwh
  • data/설정_프리셋.psv, data/설정_씬.psvname|sub
  • data/설정_인벤토리.psvcategory|name|status|note
  • data/설정_사용자.psvname|role
  • 검증 (curl 실측, 전부 통과)

    1. CROWNY_STRICT=1 ./hanseonc_high 서버.한선 → 0에러 0경고. 서버.toau 교체(백업 서버.toau.bak.20260720232041) → launchctl kickstart -k/health 200.
    2. GET /api/settings 5섹션 JSON 정상 파스(halls 3·presets 4·scenes 5·inventory 3·users 4).
    3. 요금 마스터 실배선 증명: POST rate_set 대공연장 base→9000000(manager) → GET /api/settings 반영 확인 → POST /api/settle {name:"뮤지컬 갈라 콘서트",role:"booking"} 대관료 9000000 확인 → base 8000000 원복 → 재정산 시 8000000 복귀 확인.
    4. RBAC: role=operator/role=sm으로 /api/settings POST → 거부 확인. preset_save/preset_delete, inventory_set(upsert), user_role/user_delete 왕복 전부 정상.
    5. 회귀: /api/state(딜 7건·키 12종) 200·/portal 200·/space/env 브리지 정상·/api/settle 기존 필드 구조 불변·/api/materials·/api/checkin 정상.
    6. 정산.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는 문자열 그대로 저장 — 숫자 포맷 검증(음수/비숫자 가드)은 추후 강화 여지.