JUNFORGE,
설계 문서매장 예약

EDR · 데이터 구조

어떤 데이터를 다루는가

매장 예약 · 공개 설계 예시

Markdown 원본
이 문서의 목차

공개된 매장 예약 UI를 바탕으로 정리한 EDR 설계 예시입니다. 예약에 필요한 데이터의 의미와 제약을 먼저 정의하고, BDR의 동작 규칙과 연결합니다.

S01 · 설계 범위

이 예시는 매장 정보, 선택 가능한 시간, 사용자가 작성하는 예약 요청을 다룹니다. 실제 데이터베이스 설계서나 예약 서비스의 운영 증명이 아닙니다. 구현 근거는 공개 디자인 시스템의 ShopDetailData, ShopReservationSlot, ReservationConfirmPayload입니다.

naming_profile: modern-default — 문서의 논리 필드는 snake_case를 사용하고, 실제 TypeScript 필드와의 대응을 별도로 남깁니다. 영속 저장소와 API는 이 예시의 범위 밖입니다.

데이터의미연결
E01 매장예약 흐름을 시작하는 매장의 식별 정보E02의 시간 목록을 제공
E02 예약 가능 시간한 매장 화면에서 제시하는 시간과 선택 가능 여부E03의 시간 선택에 사용
E03 예약 요청사용자가 선택한 날짜·인원·시간완료 시 콜백에 전달

E01 · 매장

매장 화면의 예약 맥락입니다. 화면 데이터의 일부만 발췌했습니다. 예시 매장명과 식별자는 설명을 위한 가상 값입니다.

주요 항목만 표시
항목(ko)항목(en)폼 필수값데이터 타입입력 방식옵션 값설명제약사항예시검색정렬역할개념 URI관계상위 개념
매장 식별자shop_id해당 없음string화면 데이터—매장을 식별하는 값타입상 필수, 고유성은 저장소 검증 범위 밖demo-shop-01미구현미구현식별urn:junforge:example:shop:idE02의 매장 맥락매장
매장명name해당 없음string화면 데이터—사용자에게 표시하는 매장명타입상 필수예시 식당미구현미구현명칭urn:junforge:example:shop:name—매장
예약 시간 목록reservation_slots선택E02[]화면 데이터—매장 화면이 제공하는 시간 목록생략 시 시트의 기본 목록 사용17:00, 17:30해당 없음전달 순서관계urn:junforge:example:shop:slotsE01 → E02매장

연결 규칙: B001 초기화, B004 시간 선택.

E02 · 예약 가능 시간

하나의 시간 문자열과 선택 가능 여부를 묶습니다. 현재 타입에는 날짜별 재고, 잔여 좌석, 인원별 수용량이 없습니다. available은 화면에 전달된 선택 가능 여부이며 실시간 잔여 좌석을 뜻하지 않습니다.

주요 항목만 표시
항목(ko)항목(en)폼 필수값데이터 타입입력 방식옵션 값설명제약사항예시검색정렬역할개념 URI관계상위 개념
시간time필수string슬롯 데이터전달 목록표시와 선택에 사용하는 시간기본 예시는 HH:mm, 형식 검사 미구현17:00해당 없음전달 순서속성urn:junforge:example:slot:timeE03.time의 선택 후보예약 가능 시간
선택 가능 여부available필수boolean슬롯 데이터true / false해당 시간을 선택할 수 있는지 표시false이면 버튼 비활성화true해당 없음해당 없음상태urn:junforge:example:slot:availableB004예약 가능 시간

연결 규칙: B004 선택 불가 시간 처리. 확인 기준: V04 시간 선택.

E03 · 예약 요청

사용자가 선택한 값을 전달하기 위한 논리 모델입니다. 작성 중에는 날짜와 시간이 비어 있을 수 있고, 완료 콜백에는 세 값이 함께 전달됩니다. 예약 번호나 서버 저장 상태를 포함하지 않습니다.

주요 항목만 표시
항목(ko)항목(en)폼 필수값데이터 타입입력 방식옵션 값설명제약사항예시검색정렬역할개념 URI관계상위 개념
방문 날짜date필수Date날짜 선택minDate 이후 선택방문 예정 날짜작성 중 null 가능, 완료 시 필수2026-10-01해당 없음해당 없음속성urn:junforge:example:request:dateB002, B005예약 요청
인원party_size필수number증감 버튼1~12방문 인원기본값 2, UI에서 최소 1·최대 122해당 없음해당 없음속성urn:junforge:example:request:party-sizeB003, B005예약 요청
방문 시간time필수string시간 선택E02 목록선택한 예약 시간작성 중 null 가능, 완료 시 필수17:00해당 없음해당 없음속성urn:junforge:example:request:timeE02.time, B004, B005예약 요청

연결 규칙: B002 날짜, B003 인원, B005 완료.

S02 · 상태와 전이

아래 상태명은 동작을 설명하기 위한 문서 용어입니다. 데이터베이스의 예약 상태 코드가 아닙니다.

상태진입 조건가능한 동작다음 상태관련 규칙
작성 시작예약 시트 열기날짜·인원·시간 선택작성 중B001
작성 중날짜 또는 시간이 비어 있음값 선택·변경완료 가능B002~B004
완료 가능날짜와 시간 모두 선택됨완료 버튼 누르기시트 닫힘B005
시트 닫힘완료 또는 닫기다시 열기작성 시작B001

S03 · 구현 필드 대응

논리 필드TypeScript 근거비고
E01.shop_idShopDetailData.shopId화면 데이터
E01.nameShopDetailData.name화면 데이터
E01.reservation_slotsShopDetailData.reservationSlots선택 속성
E02.time / availableShopReservationSlot.time / available슬롯 속성
E03.date / party_size / timeReservationConfirmPayload.date / partySize / time콜백 페이로드

ShopDetailPage의 현재 연결은 시트의 페이로드를 사용하지 않고 onReserve()를 호출합니다. 따라서 선택값의 서버 전달·저장 완료를 이 화면만으로 판단할 수 없습니다.

다음 문서: BDR · 동작 규칙 읽기.

이어서 읽기BDR · 동작 규칙