Skip to content

호스피탈리티 룸 타입 프론트엔드 유지보수

구성

text
hospitalityRoomTypeRepo.js
  ├─ normalizeHospitalityRoomType
  ├─ list_hospitality_room_types_v1
  ├─ create_hospitality_room_type_v1
  └─ update_hospitality_room_type_v1

useRoomTypes.js
  ├─ Office scope 변경 시 상태 초기화
  ├─ activeRoomTypes
  ├─ create/update request key 재사용
  └─ typeName/baseRate/class compatibility helper

master/room/type/general/MainOrg.vue
  ├─ 선택 room type id 소유
  ├─ SheetCreateRoomTypeArt
  └─ SheetReadRoomTypeArt(read↔edit 단일 시트)

화면 흐름

페이지 mount에서 loadRoomTypes()를 호출한다. 목록 컬럼은 공간 구분 → 룸 타입 등록코드 → 룸 타입명 → 침대 구성 → 기준/최대 정원 → 참고 기준 요금 → 상태 순서다. 룸 타입명을 누르면 emit한 실제 row id로 상세를 계산하므로 고정 demo 상세가 없다. checkbox와 별도 상세·다운로드·검색·페이지네이션 버튼은 실제 command가 없어 렌더링하지 않는다.

생성 시트는 등록코드·선택 관리코드·이름·공간 구분·침대 구성·정원·선택 참고 기준 요금·통화·상태를 받는다. 등록코드·관리코드·공간 구분은 생성 뒤 수정할 수 없다는 설명을 함께 표시한다. 참고 요금은 예약 금액을 자동 변경하지 않는다는 설명을 노출한다.

상세는 sheet-width-3xl 단일 시트가 read↔edit를 제자리에서 소유한다. 관리코드는 read의 우측 상단에만 작게 표시한다. 편집 모드에서도 모든 속성을 펼치되 등록코드·공간 구분은 disabled다. 저장은 valid && dirty && !loading이고 expected revision을 전달한다. dirty 취소·닫기는 공용 dialog-cancel-art 확인 후 draft를 폐기한다.

룸 마스터 연결

룸 마스터 페이지는 loadRoomTypes()loadRoomMaster()를 함께 실행한다. 생성 select는 activeRoomTypes만 사용한다. 상세 편집 select는 active 타입과 현재 룸이 참조하는 inactive 타입만 합성한다. 따라서 기존 룸 라벨은 유지하면서 inactive 타입을 다른 룸에 새로 배정하지 않는다. 최종 category 일치는 DB trigger가 다시 검증한다.

ROOM_TYPES export는 아직 productized되지 않은 과거 Hospitality 화면의 import 호환만 위한 in-place reactive array다. 정본 데이터는 고정 샘플이 아니라 roomTypes state이고 신규 화면은 useRoomTypes() 반환값을 직접 소비한다.

Office scope watcher는 Company·Office key가 바뀌면 row와 pending request key를 비우고 새 목록을 자동 로드한다. list와 create/update는 scope generation을 캡처하며, 이전 Office의 늦은 성공은 현재 배열에 반영하지 않고 늦은 실패도 현재 error/loading을 덮지 않는다. useRoomTypesScope.spec.js가 stale list 성공·실패와 stale create 성공을 검증한다.

IA·정직한 표면

룸 마스터 header는 룸 / 룸 타입 두 탭만 노출한다. 공간유형·요금·특성 URL은 룸 타입으로 redirect하고, 턴다운 URL은 룸 상태로 redirect한다. 서버 원장이 생기기 전까지 해당 prototype 화면은 제품 IA가 아니다. 하드코딩 숙박업소명, dead back/more/download/search/select/pagination도 실제 master surface에서 제거했다.

경계와 테스트

MDS 0.10 sheet, field, Select, table, badge, alert만 사용하며 로컬 CSS는 없다. 시설·임대차·회계 composable을 import하지 않는다. 향후 요금·특성은 Hospitality subledger와 별도 page slice로 추가하고, 룸 타입 저장 성공이 optional adapter 존재에 의존하지 않게 유지한다.

  • hospitalityRoomTypeRepo.spec.js
  • hospitalityRoomTypeMigration.spec.js
  • hospitalityRoomTypeUi.spec.js
  • useRoomTypesScope.spec.js
  • hospitality_room_type_master_smoke.sql