-
간단한 매장의 포스기를 구현한다.
-
상품
- 상품에는 가격과 이름이 있어야 한다.
- 상품을 등록할 수 있다.
- 가격이 음수인 경우 예외를 발생시킨다.
- 이름이 비속어를 포함한 경우, 예외를 발생시킨다.
- 상품은 고유한 Id로 구별한다.
- 상품은 가격만 변동될 수 있다.
- 가격이 음수인 경우 예외를 발생시킨다.
- 기존에 등록된 상품만 가격을 변경할 수 있다.
- 상품을 찾지 못한 경우, 예외를 발생시킨다.
- 등록된 상품의 목록을 조회할 수 있다.
-
메뉴
- 메뉴는 이름과 가격, 그리고 display 상태가 있다.
- 메뉴는 여러 개의 상품 조합으로 이루어져 있다. (menu_product)
- 메뉴에 등록되는 상품이 없을 경우, 예외를 발생시킨다.
- 메뉴에 등록되어 있는 상품은 모두 상품 목록에 있어야 한다.
- 메뉴에 등록될 상품은 0개 이상의 수량을 가진다.
- 메뉴의 가격이 음수인 경우, 예외를 발생시킨다.
- 메뉴를 등록할 수 있다.
- 메뉴는 고유한 Id로 구별한다.
- 메뉴를 등록할 때, menuGroup을 지정해야 한다.
- 메뉴를 등록할 때, 가격의 정합성이 맞지 않으면 예외를 발생시킨다.
- 메뉴는 가격이나 display 상태를 변경할 수 있다.
- 메뉴의 가격을 변경하거나, display 상태로 변경할 때, 가격의 정합성이 맞지 않으면 예외를 발생시킨다.
- 메뉴 목록에 없을 경우, 예외를 발생시킨다.
- 메뉴의 이름이 비속어가 포함될 경우, 예외를 발생시킨다.
- 등록된 메뉴의 목록을 조회할 수 있다.
- 상품의 가격을 변경할 때, 상품이 속한 메뉴 가격과 정합성이 맞지 않으면 해당 메뉴를 hide한다.
-
메뉴 그룹
- 메뉴 그룹은 이름으로 구성된다.
- 메뉴는 특성에 따라 분류할 수 있다. (menu_group)
- 메뉴 그룹의 이름이 비어있을 경우, 예외를 발생시킨다.
- 메뉴 그룹을 등록할 수 있다.
- 메뉴 그룹은 고유한 Id로 구별한다.
- 등록된 메뉴 그룹의 목록을 조회할 수 있다.
-
주문
- 주문은 배달받을 주소, 주문 시간, 주문 상태, 주문 유형, 매장 내 테이블 번호로 구성된다.
- 주문 상태는 WAITING, ACCEPTED, SERVED, DELIVERING, DELIVERED, COMPLETED가 있다.
- 주문 유형은 테이크아웃, 배달, 매장 내 식사가 있으며, 주문 유형이 없을 경우 예외를 발생시킨다.
- 주문은 여러 개의 메뉴 조합으로 이루어져 있다. (order_line_item)
- 주문할 메뉴는 가격과 수량이 포함되어야 한다.
- 주문을 등록할 수 있다.
- 주문은 고유한 Id로 구별한다.
- 주문할 메뉴의 목록이 비어있을 경우, 예외를 발생시킨다.
- 주문에 등록되어 있는 메뉴는 모두 메뉴 목록에 있어야 한다.
- 주문할 메뉴의 수량이 0 미만인 경우, 예외를 발생시킨다.
- 주문할 메뉴가 display 상태가 아닌 경우, 예외를 발생시킨다.
- 주문할 때 가격의 정합성이 맞지 않는 경우, 예외를 발생시킨다.
- 주문 유형이 배달일 때, 배달 받을 주소가 비어있을 경우, 예외를 발생시킨다.
- 주문 유형이 매장 내 식사일 때, 매장 내 테이블 번호(order_table_id)는 필수로 입력해야 한다.
- 배정받은 주문 테이블이 테이블 목록에 있어야 한다.
- 주문 전에 미리 테이블을 배정받아야 한다.
- 배정받은 테이블이 빈 테이블인 경우, 예외를 발생시킨다.
- 주문 상태는 변경될 수 있다.
- 주문 목록에 없는 경우 예외를 발생시킨다.
- 주문을 수락할 수 있다.
- 주문 상태가 waiting이 아닌 경우, 예외를 발생시킨다.
- 주문 유형이 배달인 경우, kitchenridersClient에 배달을 요청한다.
- 수락 상태로 변경한다.
- 주문을 서빙할 수 있다.
- 주문 상태가 accepted가 아닌 경우, 예외를 발생시킨다.
- 서빙 상태로 변경한다.
- 배달을 시작할 수 있다.
- 주문 유형이 delivery가 아니거나 주문 상태가 Served가 아닌 경우, 예외를 발생시킨다.
- 배달 중 상태로 변경한다.
- 배달을 완료할 수 있다.
- 주문 유형이 delivery가 아니거나 주문 상태가 delivering이 아닌 경우, 예외를 발생시킨다.
- 배달 완료 상태로 변경한다.
- 주문을 완료할 수 있다.
- 주문 유형이 배달인 경우, 상태가 delivered가 아니면 예외를 발생시킨다.
- 주문 유형이 takeout이거나 매장 내 식사 인 경우, 상태가 served가 아니면 예외를 발생시킨다.
- 주문 완료 상태로 변경한다.
- 주문 목록을 조회할 수 있다.
- 주문은 배달받을 주소, 주문 시간, 주문 상태, 주문 유형, 매장 내 테이블 번호로 구성된다.
-
주문한 테이블
- 매장 내 테이블은 테이블 이름, 공석 여부, 손님 수로 구성된다. (order_table)
- 매장 내 테이블은 등록할 수 있다.
- 매장 내 테이블은 테이블 이름으로 등록할 수 있으며, 초기 상태는 공석, 손님 수 0이다.
- 매장 내 테이블은 고유한 Id로 구별한다.
- 매장 내 테이블의 이름이 비어있을 경우, 예외를 발생시킨다.
- 매장 내 테이블의 상태를 변경할 수 있다.
- 매장 내 테이블에 손님이 앉을 수 있다.
- 매장 내 테이블을 치울 수 있다.
- 이미 배정된 테이블에는 손님 수가 변경될 수 있다.
- 손님 수가 0 미만인 경우 예외를 발생시킨다.
- 손님 수가 변경될 때 테이블이 비어있으면 예외를 발생시킨다.
- 매장 내 등록된 테이블 목록을 조회할 수 있다.
- 매장 내 식사인 경우, 손님이 식사를 완료했을 때 테이블을 치운다.
한글명 | 영문명 | 설명 |
---|---|---|