EDR의 데이터 구조를 바탕으로 예약 화면의 조건과 동작을 정리한 BDR 설계 예시입니다. 규칙마다 정상 흐름, 예외, 확인 기준을 연결합니다.
S01 · 사용자 흐름
예약 시트 열기 → 날짜 선택 → 인원 선택 → 시간 선택 → 완료 콜백 → 시트 닫힘.
이 문서는 ReservationSheet의 현재 화면 동작을 설명합니다. 결제, 예약 확정, 중복 예약 방지, 취소 정책은 구현 근거가 없는 별도의 업무 범위입니다.
B001 · 열 때마다 초기화
시트를 다시 열면 이전 입력을 이어 쓰지 않고 날짜부터 새로 선택합니다.
| 대상 | 조건 | 상태체크 | 시스템 동작 | 후처리 | 설명 |
|---|---|---|---|---|---|
| 예약 시트 | open이 true로 변경 | 열림 | 날짜·시간을 비우고 인원을 2로 설정 | 날짜 단계 표시 | 이전 선택값을 새 예약에 재사용하지 않음 |
| 대상 | 조건 | 에러 메시지 |
|---|---|---|
| 이전 선택값 | 시트 재진입 | 메시지 없음, 초기값으로 재설정 |
B002 · 날짜 선택
달력에 최소 선택 날짜를 전달합니다. 별도 값이 없으면 현재 날짜를 사용합니다. 날짜를 선택하면 잠시 선택 결과를 보여준 뒤 인원 단계로 이동합니다.
| 대상 | 조건 | 상태체크 | 시스템 동작 | 후처리 | 설명 |
|---|---|---|---|---|---|
| 방문 날짜 | 달력에서 날짜 선택 | 선택 가능한 날짜 | selectedDate 갱신 | 200ms 후 인원 단계 | 날짜 선택 결과를 인지할 시간 제공 |
| 최소 날짜 | minDate 미전달 | 기본값 사용 | 현재 날짜를 달력에 전달 | 달력의 제한 동작 적용 | 서버의 영업일 검증과 별개 |
| 대상 | 조건 | 에러 메시지 |
|---|---|---|
| 방문 날짜 | 달력의 최소 날짜보다 이전 | 별도 메시지 없음, 달력의 선택 제한에 위임 |
B003 · 인원 범위 유지
인원은 1명부터 12명까지 선택합니다. 경계에서는 해당 방향의 버튼을 비활성화하고, 값 변경도 같은 범위로 제한합니다.
| 대상 | 조건 | 상태체크 | 시스템 동작 | 후처리 | 설명 |
|---|---|---|---|---|---|
| 인원 증가 | 증가 버튼 누르기 | 인원 < 12 | min(12, 현재 인원 + 1) | 인원 표시 갱신 | 최댓값 12 |
| 인원 감소 | 감소 버튼 누르기 | 인원 > 1 | max(1, 현재 인원 - 1) | 인원 표시 갱신 | 최솟값 1 |
| 대상 | 조건 | 에러 메시지 |
|---|---|---|
| 인원 증가 | 현재 12명 | 메시지 없음, 증가 버튼 비활성화 |
| 인원 감소 | 현재 1명 | 메시지 없음, 감소 버튼 비활성화 |
데이터: E03.party_size. 확인: V03 경계값.
B004 · 예약 시간 선택
전달된 시간 목록에서 available이 true인 항목을 선택할 수 있습니다. 목록이 생략되면 기본 예시 목록을 사용합니다.
| 대상 | 조건 | 상태체크 | 시스템 동작 | 후처리 | 설명 |
|---|---|---|---|---|---|
| 예약 시간 | 슬롯 누르기 | available = true | selectedTime 갱신 | 선택 표시 갱신 | 한 번에 한 시간 선택 |
| 선택 불가 시간 | 슬롯 표시 | available = false | disabled와 aria-disabled 적용 | 선택 차단 | 재고 수량 계산을 의미하지 않음 |
| 대상 | 조건 | 에러 메시지 |
|---|---|---|
| 선택 불가 슬롯 | 선택 시도 | 메시지 없음, 선택되지 않음 |
데이터: E02 예약 가능 시간, E03.time. 확인: V04 시간 선택.
B005 · 선택 완료
날짜와 시간이 모두 선택되면 완료할 수 있습니다. 인원은 기본값과 증감 버튼으로 범위 안에서 관리합니다.
| 대상 | 조건 | 상태체크 | 시스템 동작 | 후처리 | 설명 |
|---|---|---|---|---|---|
| 완료 버튼 | 버튼 누르기 | 날짜·시간 존재 | onConfirm에 date, partySize, time 전달 | onOpenChange(false) | 시트 선택 완료 |
| 대상 | 조건 | 에러 메시지 |
|---|---|---|
| 완료 버튼 | 날짜 또는 시간 미선택 | 메시지 없음, 버튼 비활성화 및 핸들러 조기 반환 |
현재 부모 화면은 콜백의 페이로드를 사용하지 않고 onReserve()를 호출합니다. 화면의 ‘예약 완료’ 문구는 데모의 UI 동작이며, 서버의 예약 확정 증거는 아닙니다.
데이터: E03 예약 요청. 확인: V05 콜백과 저장의 경계.
S02 · 후속 설계가 필요한 범위
실제 예약 서비스로 연결하려면 날짜·인원별 수용량, 동시 예약, 서버 유효성 검사, 요청 중 상태, 실패 복구, 취소 정책을 추가로 정의해야 합니다. 이 예시에는 해당 정책을 실제 구현처럼 넣지 않았습니다.
다음 문서: 검증 · 확인 기준.