다크모드
프로퍼티 점유 주체 연결 FE 핸드오프
구성
text
propertyOccupancyLinks.js
└─ 도메인/상태 계약, alias 기반 순수 resolver, 작업 gate
propertyOccupancyLinkRepo.js
└─ resolve/connect Supabase RPC adapter
usePropertyOccupancyLinks.js
└─ Office scope 로딩, 도메인별 상태 cache, 화면 gate정본 키
- 임대 정산/보증금:
useLeaseContracts.unit - tenancy 3축:
tenancyMock.unitKey; 위 문자열 체계와 자동 병합하지 않는다. - 룸:
hospitality_rooms.property_space_id가 정본이며useRooms는 이 UUID를 normalize한다. - 스테이: 서버
hospitality_stays.property_space_id가 룸 연결을 재사용한다. - 예약:
hospitality_room_allocations.room_id에서 룸의 공간 UUID로 이어진다.
resolvePropertyOccupancyLinks는 propertySpaceCore의 alias index만 소비한다. 이름, building/floor/number, 등록코드 fallback은 추가하지 않는다.
화면 배선
/contract 셸의 고객 표면 이름은 소유·점유다. 사이드바는 유닛별 보기, 멤버별 보기, 관련 업무 계약관리로 단순화한다. 기존 integration/resource 라우트와 데이터 composable은 호환을 위해 유지하되 사업·차량을 이 셸의 메뉴에 중복 노출하지 않는다.
- 임대 퇴거정산 테이블:
lease_unit배치 resolve, 상태 badge, 서버 모드 미연결 action disable. - 호스피탈리티 룸 마스터: 저장된
propertySpaceId와 공간명·등록코드를 직접 표시한다. alias 배치 resolve를 사용하지 않는다. - 스테이 테이블:
roomId배치 resolve, 상태 badge, 서버 모드 체크아웃 disable. - 체크인 dialog: 가용 룸 선택 후 연결 gate를 확인하고 미연결이면 확정을 막는다.
로컬 Prototype repo는 모든 키를 unresolved로 반환하지만 serverBacked=false이므로 기존 데모 액션을 막지 않는다. Supabase repo가 선택된 경우에만 linked 이외 상태를 차단한다. 조회 실패는 alert로 노출하며 실패를 linked로 간주하지 않는다.
연결 쓰기
현재 화면에는 공간 검색·선택 UI가 없다. 후속 관리 UI는 다음 값을 connect에 전달한다.
js
await connect({
domain: "lease_unit",
sourceKey: contract.unit,
propertySpaceId: selectedSpace.id,
expectedSpaceRevision: selectedSpace.revision,
});request key는 composable이 repo helper로 생성하며 actor ID는 전달하지 않는다. revision conflict는 목록을 다시 불러오도록 안내하고 자동 재시도하지 않는다. conflict 상태를 새 alias로 덮어쓰지 않는다.
확장 경계
- 서버 임대 계약이 생기면 계약 row에
(property_space_id, company_id, office_id)복합 FK를 저장하고 alias는 migration/외부 연동 호환용으로 유지한다. - 서버 hospitality room은
(property_space_id, company_id, office_id)복합 FK를 저장한다. 운영 상태·하우스키핑은 공간 identity에 넣지 않는다. - occupancy 기간 원장은 각 서버 도메인의 상태머신이 생긴 뒤 추가한다. 현재 mock 날짜를 DB seed로 승격하지 않는다.
- router, i18n, package, Design SSOT 변경은 없다.
테스트
- 순수 상태:
src/composables/__tests__/propertyOccupancyLinks.spec.js - RPC payload:
src/composables/__tests__/propertyOccupancyLinkRepo.spec.js - migration 계약:
src/composables/__tests__/propertyOccupancyLinkMigration.spec.js