cd docker
docker compose -p kitchenpos up -d
- 상품을 등록할 수 있다.
- 상품의 가격이 올바르지 않으면 등록할 수 없다.
- 상품의 이름이 올바르지 않으면 등록할 수 없다.
- 상품의 가격을 변경할 수 있다.
- 상품의 가격이 올바르지 않으면 변경할 수 없다.
- 상품의 가격이 변경될 때 메뉴의 가격이 메뉴에 속한 상품 금액의 합보다 크면 메뉴가 숨겨진다.
- 상품의 목록을 조회할 수 있다.
- 메뉴 그룹을 등록할 수 있다.
- 메뉴 그룹의 이름이 올바르지 않으면 등록할 수 없다.
- 메뉴 그룹의 목록을 조회할 수 있다.
- 1 개 이상의 등록된 상품으로 메뉴를 등록할 수 있다.
- 상품이 없으면 등록할 수 없다.
- 메뉴에 속한 상품의 수량은 0 이상이어야 한다.
- 메뉴의 가격이 올바르지 않으면 등록할 수 없다.
- 메뉴에 속한 상품 금액의 합은 메뉴의 가격보다 크거나 같아야 한다.
- 메뉴는 특정 메뉴 그룹에 속해야 한다.
- 메뉴의 이름이 올바르지 않으면 등록할 수 없다.
- 메뉴의 가격을 변경할 수 있다.
- 메뉴의 가격이 올바르지 않으면 변경할 수 없다.
- 메뉴에 속한 상품 금액의 합은 메뉴의 가격보다 크거나 같아야 한다.
- 메뉴를 노출할 수 있다.
- 메뉴의 가격이 메뉴에 속한 상품 금액의 합보다 높을 경우 메뉴를 노출할 수 없다.
- 메뉴를 숨길 수 있다.
- 메뉴의 목록을 조회할 수 있다.
- 주문 테이블을 등록할 수 있다.
- 주문 테이블의 이름이 올바르지 않으면 등록할 수 없다.
- 빈 테이블을 해지할 수 있다.
- 빈 테이블로 설정할 수 있다.
- 완료되지 않은 주문이 있는 주문 테이블은 빈 테이블로 설정할 수 없다.
- 방문한 손님 수를 변경할 수 있다.
- 방문한 손님 수가 올바르지 않으면 변경할 수 없다.
- 빈 테이블은 방문한 손님 수를 변경할 수 없다.
- 주문 테이블의 목록을 조회할 수 있다.
- 1개 이상의 등록된 메뉴로 배달 주문을 등록할 수 있다.
- 1개 이상의 등록된 메뉴로 포장 주문을 등록할 수 있다.
- 1개 이상의 등록된 메뉴로 매장 주문을 등록할 수 있다.
- 주문 유형이 올바르지 않으면 등록할 수 없다.
- 메뉴가 없으면 등록할 수 없다.
- 매장 주문은 주문 항목의 수량이 0 미만일 수 있다.
- 매장 주문을 제외한 주문의 경우 주문 항목의 수량은 0 이상이어야 한다.
- 배달 주소가 올바르지 않으면 배달 주문을 등록할 수 없다.
- 빈 테이블에는 매장 주문을 등록할 수 없다.
- 숨겨진 메뉴는 주문할 수 없다.
- 주문한 메뉴의 가격은 실제 메뉴 가격과 일치해야 한다.
- 주문을 접수한다.
- 접수 대기 중인 주문만 접수할 수 있다.
- 배달 주문을 접수되면 배달 대행사를 호출한다.
- 주문을 서빙한다.
- 접수된 주문만 서빙할 수 있다.
- 주문을 배달한다.
- 배달 주문만 배달할 수 있다.
- 서빙된 주문만 배달할 수 있다.
- 주문을 배달 완료한다.
- 배달 중인 주문만 배달 완료할 수 있다.
- 주문을 완료한다.
- 배달 주문의 경우 배달 완료된 주문만 완료할 수 있다.
- 포장 및 매장 주문의 경우 서빙된 주문만 완료할 수 있다.
- 주문 테이블의 모든 매장 주문이 완료되면 빈 테이블로 설정한다.
- 완료되지 않은 매장 주문이 있는 주문 테이블은 빈 테이블로 설정하지 않는다.
- 주문 목록을 조회할 수 있다.
한글명 |
영문명 |
설명 |
메뉴 |
Menu |
메뉴그룹에 속하는 주문 가능 단위 |
메뉴그룹 |
MenuGroup |
메뉴를 분류한 그룹 |
메뉴상품 |
MenuProduct |
메뉴가 포함하고 있는 상품 |
메뉴상품목록 |
MenuProducts |
메뉴가 포함하고 있는 상품 목록 |
가격 |
Price |
메뉴 금액 |
노출여부 |
Displayed |
사용자에게 메뉴를 보이게 하거나 숨기게 하는 구분 단위 |
상품 |
Product |
메뉴에 등록할 수 있는 제품 |
비속어 |
Profanity |
메뉴이름에 적합하지 않은 비속어 |
이름 |
Name |
메뉴 이름 |
수량 |
Quantity |
메뉴상품에 속한 상품의 수량 |
한글명 |
영문명 |
설명 |
상품 |
Product |
메뉴에 등록할 수 있는 제품 |
가격 |
Price |
상품 가격 |
비속어 |
Profanity |
이름에 적합하지 않은 비속어 |
이름 |
Name |
상품 이름 |
메뉴 |
Menu |
상품이 속한 메뉴 |
메뉴상품 |
MenuProduct |
메뉴가 포함하고 있는 상품 |
노출여부 |
Displayed |
사용자에게 매뉴를 보이게 하거나 숨기게 하는 구분 단위 |
한글명 |
영문명 |
설명 |
배달주문 |
Order |
고객에게 라이더를 통해 배달 음식을 전달하는 주문 |
메뉴 |
Menu |
주문에 포함된 메뉴 |
주문아이템 |
OrderLineItem |
배달 주문에 포함된 메뉴 |
주문아이템목록 |
OrderLineItems |
배달 주문에 포함된 메뉴 목록 |
주문상태 |
OrderStatus |
배달 주문의 상태 |
주문시간 |
OrderDateTime |
고객이 주문이 등록된 시각 |
배달 |
Delivery |
고객이 주문한 메뉴를 고객에게 전달하는 행위 |
배달주소 |
DeliveryAddress |
고객의 주문이 도착해야 하는 위치 |
가격 |
Price |
메뉴 또는 주문아이템의 가격 |
대기중 |
WAITING |
배달 주문이 접수 되는것을 기다리는 상태 |
접수완료 |
ACCEPTED |
가게에서 배달주문을 받아들였다는 상태 |
제공완료 |
SERVED |
라이더에게 음식을 전달한 상태 |
배달중 |
DELIVERING |
고객이 주문한 제품을 배송지로 전달중인 상태 |
배달완료 |
DELIVERED |
고객이 주문한 제품을 배송지에서 받았다는 상태 |
주문완료 |
COMPLETED |
배달 주문 프로세스가 끝났다는 상태 |
라이더 |
Kitchenriders |
고객이 주문한 상품을 전달하는 사람 |
한글명 |
영문명 |
설명 |
포장주문 |
Order |
고객이 직접 방문하여 가져가는 주문 |
주문아이템 |
OrderLineItem |
포장 주문에 포함된 메뉴 |
주문아이템목록 |
OrderLineItems |
포장 주문에 포함된 메뉴 목록 |
주문시간 |
OrderDateTime |
고객이 주문이 등록된 시각 |
주문상태 |
OrderStatus |
포장 주문의 상태 |
대기중 |
WAITING |
포장 주문이 접수 되는것을 기다리는 상태 |
접수완료 |
ACCEPTED |
가게에서 포장 주문을 받아들였다는 상태 |
제공완료 |
SERVED |
고객에게 포장된 음식을 전달한 상태 |
주문완료 |
COMPLETED |
포장 주문 프로세스가 끝났다는 상태 |
한글명 |
영문명 |
설명 |
매장주문 |
Order |
고객이 매장에서 식사하는 주문 |
주문아이템 |
OrderLineItem |
매장 주문에 포함된 메뉴 |
주문아이템목록 |
OrderLineItems |
매장 주문에 포함된 메뉴 목록 |
주문시간 |
OrderDateTime |
고객이 주문이 등록된 시각 |
주문상태 |
OrderStatus |
매장 주문의 상태 |
대기중 |
WAITING |
매장 주문이 접수 되는것을 기다리는 상태 |
접수완료 |
ACCEPTED |
가게에서 매장 주문을 받아들였다는 상태 |
제공완료 |
SERVED |
고객에게 음식을 전달한 상태 |
주문완료 |
COMPLETED |
매장 주문 프로세스가 끝났다는 상태 |
테이블 |
OrderTable |
고객이 앉아서 음식을 제공 받을 수 있는 장소 |
고객수 |
NumberOfGuests |
한 테이블에 앉은 고객 수 |
착석여부 |
Occupied |
테이블에 고객이 앉았는지 여부 |
빈테이블 |
EmptyOrderTable |
테이블에 고객이 없는 상태 |
이름 |
Name |
테이블 이름 |
착석 |
Sit |
테이블에 고객이 앉는 행위 |
정리 |
Clear |
테이블의 앉은 고객이 나가고 정리하는 행위 |
- 메뉴(Menu)는 이름(Name), 가격(Price), 노출여부(Displayed), 메뉴그룹(MenuGroup), 메뉴상품목록(MenuProducts)를 가진다.
- 메뉴(Menu)의 이름(Name)에 비속어(Profanity)가 포함될 수 없고 빈값이 될 수 없다.
- 메뉴(Menu)의 가격(Price)은 0원 이상이어야 한다.
- 메뉴(Menu)는 메뉴(Menu)가 속해있는 메뉴그룹(MenuGroup)이 반드시 존재해야 한다.
- 메뉴(Menu)는 1개 이상의 메뉴상품(MenuProduct)를 가진다.
- 메뉴상품(MenuProduct)은 상품(Product)과 수량(Quantity)을 가진다.
- 메뉴상품(MenuProduct)의 상품(Product)은 반드시 존재해야 한다.
- 메뉴상품(MenuProduct)의 수량(Quantity)은 0개 이상이어야 한다.
- 메뉴(Menu)의 가격(Price)은 메뉴상품목록(MenuProducts)에 포함된 상품(Product)들의 가격(Price)의 합보다 작거나 같아야 한다.
- 메뉴(Menu)의 가격(Price)이 메뉴상품목록(MenuProducts)에 포함된 상품(Product)들의 가격(Price)의 합보다 크면 메뉴를 노출할 수 없다.
- 메뉴상품(MenuProduct)에 포함된 상품(Product)의 가격(Price)이 변경됐을 때,
메뉴(Menu)의 가격(Price)이 메뉴상품목록(MenuProducts)에 포함된 상품(Product)들의 가격(Price)의 합보다 크면 메뉴를 노출할 수 없다.
- 메뉴(Menu)는 등록할 수 있다.
- 메뉴(Menu)는 가격(Price)를 변경할 수 있다.
- 등록된 메뉴(Menu)를 노출할 수 있다.
- 등록된 메뉴(Menu)는 숨길 수 있다.
- 등록된 메뉴(Menu)의 목록을 조회할 수 있다.
- 메뉴그룹(MenuGroup)은 이름(Name)을 반드시 가진다.
- 메뉴그룹(MenuGroup)을 등록할 수 있다.
- 메뉴그룹(MenuGroup)의 목록을 조회할 수 있다.
- 상품(Product)는 이름(Name), 가격(Price)을 가진다.
- 상품(Product)의 이름(Name)에 비속어(Profanity)가 포함될 수 없고 빈값이 될 수 없다.
- 상품(Product)의 가격(Price)은 0원 이상의 값을 가진다.
- 상품(Product)의 가격(Price)이 변경됐을 때,
메뉴(Menu)의 가격(Price)이 메뉴상품목록(MenuProducts)에 포함된 상품(Product)들의 가격(Price)의 합보다 크면 메뉴를 노출할 수 없다.
- 상품(Product)은 등록할 수 있다.
- 상품(Product)은 가격(Price)를 변경할 수 있다.
- 상품(Product) 목록을 조회할 수 있다.
- 배달주문(Order)은 주문상태(OrderStatus), 주문시간(OrderDateTime), 배달주소(DeliveryAddress), 주문아이템목록(OrderLineItems)를 가진다.
- 배달주문(Order)은 노출된 메뉴(Menu)만 가진다.
- 배달주문(Order)의 메뉴(Menu) 가격(Price)과 주문아이템(OrderLineItem) 가격(Price)은 같아야 한다.
- 배달주문(Order)은 대기중(WAITING) -> 접수완료(ACCEPTED) ➜ 제공완료(SERVED) ➜ 배달중(DELIVERING) ➜ 배달완료(DELIVERED) ➜ 주문완료(COMPLETED) 순서로 진행된다.
- 배달주문(Order)이 접수되면 라이더(Kitchenriders) 에게 배달을 요청한다.
- 배달주문(Order)은 1개 이상의 주문아이템(OrderLineItem)을 가진다.
- 주문아이템(OrderLineItem)은 가격(Price), 수량(Quantity), 메뉴(Menu)를 가진다.
- 주문아이템(OrderLineItem)은 메뉴(Menu)는 반드시 존재해야 한다.
- 주문아이템(OrderLineItem)의 수량은 0 보다 크거나 같아야 한다.
- 배달주문(Order)을 등록할 수 있다.
- 배달주문(Order)을 접수한다.
- 대기중(WAITING)일 때 접수완료(ACCEPTED)가 가능하다.
- 라이더(Kitchenriders)에게 배달(Delivery)을 요청한다.
- 라이더(Kitchenriders) 에게 제공한다.
- 접수완료(ACCEPTED) 일 때 제공완료(SERVED)가 가능하다.
- 배달(Delivery)을 시작할 수 있다.
- 제공완료(SERVED) 일 때 배달(Delivery)을 시작할 수 있다.
- 배달(Delivery)을 완료한다.
- 배달중(Delivery) 일 때 배달완료(DELIVERED)가 가능하다.
- 배달주문(Order)을 완료한다.
- 배달완료(DELIVERED) 일 때 완료(COMPLETED)가 가능하다.
- 배달주문(Order) 목록을 조회할 수 있다.
- 포장주문(Order)은 주문상태(OrderStatus), 주문시간(OrderDateTime), 주문아이템목록(OrderLineItems)을 가진다.
- 포장주문(Order)은 노출된 메뉴(Menu)만 가진다.
- 포장주문(Order)의 메뉴(Menu) 가격(Price)과 주문아이템(OrderLineItem) 가격(Price)은 같아야 한다.
- 포장주문(Order)은 대기중(WAITING) ➜ 접수완료(ACCEPTED) ➜ 제공완료(SERVED) ➜ 주문완료(COMPLETED) 순서로 진행된다.
- 포장주문(Order)은 1개 이상의 주문아이템(OrderLineItem)을 가진다.
- 주문아이템(OrderLineItem)은 가격(Price), 수량(Quantity), 메뉴(Menu)를 가진다.
- 주문아이템(OrderLineItem)은 메뉴(Menu)는 반드시 존재해야 한다.
- 주문아이템(OrderLineItem)의 수량은 0 보다 크거나 같아야 한다.
- 포장주문(Order)을 등록할 수 있다.
- 포장주문(Order)을 접수한다.
- 대기중(WAITING)일 때 접수가 가능하다.
- 포장주문(Order)을 고객에게 제공한다.
- 접수완료(ACCEPTED)일 때 제공이 가능하다.
- 포장주문(Order)을 완료한다.
- 제공완료(SERVED)일 때 완료(COMPLETED)가 가능하다.
- 포장주문(Order) 목록을 조회할 수 있다.
- 매장주문(Order)은 주문상태(OrderStatus), 주문시간(OrderDateTime), 주문아이템목록(OrderLineItems), 테이블(OrderTable)을 가진다.
- 매장주문(Order)은 노출된 메뉴(Menu)만 가진다.
- 매장주문(Order)의 메뉴(Menu) 가격(Price)과 주문아이템(OrderLineItem) 가격(Price)은 같아야 한다.
- 매장주문(Order)은 대기중(WAITING) ➜ 접수완료(ACCEPTED) ➜ 제공완료(SERVED) ➜ 주문완료(COMPLETED) 순서로 진행된다.
- 매장주문(Order)은 1개 이상의 주문아이템(OrderLineItem)을 가진다.
- 주문아이템(OrderLineItem)은 가격(Price), 수량(Quantity), 메뉴(Menu)를 가진다.
- 주문아이템(OrderLineItem)은 메뉴(Menu)는 반드시 존재 해야 한다.
- 주문아이템(OrderLineItem)의 수량은 0 보다 크거나 같아야 한다.
- 테이블(OrderTable)은 반드시 존재 해야 한다.
- 테이블(OrderTable)이 비어있어야 매장주문(Order)을 등록할 수 있다.
- 매장주문(Order)을 등록할 수 있다.
- 매장주문(Order)을 접수한다.
- 대기중(WAITING)일 때 접수가 가능하다.
- 매장주문(Order)을 매장에 있는 고객에게 제공한다.
- 접수완료(ACCEPTED)일 때 제공이 가능하다.
- 매장주문(Order)을 완료한다.
- 제공완료(SERVED)일 때 완료(COMPLETED)가 가능하다.
- 테이블(OrderTable)을 빈테이블(EmptyOrderTable)로 변경한다.
- 매장주문(Order) 목록을 조회할 수 있다.
- 테이블(OrderTable)은 이름(Name), 고객수(NumberOfGuests), 착석여부(Occupied) 를 가진다.
- 테이블(OrderTable) 이름(Name)은 빈값이 될 수 없다.
- 빈테이블(EmptyOrderTable)은 고객수(NumberOfGuests)가 0이고 아무도 착석하지 않은 상태다.
- 테이블(OrderTable)을 등록할 수 있다.
- 테이블(OrderTable)에 고객이 착석(Sit)할 수 있다.
- 테이블(OrderTable)을 정리(Clear)할 수 있다.
- 매장주문(Order)이 완료된 테이블(Table)만 정리(Clear)할 수 있다.
- 착석여부(Occupied)를 변경한다.
- 테이블(OrderTable) 고객수(NumberOfGuests)를 변경할 수 있다.
- 고객이 착석(sit)한 테이블만 고객수(NumberOfGuests)를 변경할 수 있다.
- 고객수(NumberOfGuests)는 0보다 작을 수 없다.
- 테이블(OrderTable) 목록을 조회할 수 있다.