View Code? Open in Web Editor
NEW
This project forked from next-step/ddd-strategic-design
ddd-strategic-design's Introduction
- 상품을 등록할 수 있다.
- 상품의 가격이 올바르지 않으면 등록할 수 없다.
- 상품의 이름이 올바르지 않으면 등록할 수 없다.
- 상품의 가격을 변경할 수 있다.
- 상품의 가격이 올바르지 않으면 변경할 수 없다.
- 상품의 가격이 변경될 때 메뉴의 가격이 메뉴에 속한 상품 금액의 합보다 크면 메뉴가 숨겨진다.
- 상품의 목록을 조회할 수 있다.
- 메뉴 그룹을 등록할 수 있다.
- 메뉴 그룹의 이름이 올바르지 않으면 등록할 수 없다.
- 메뉴 그룹의 목록을 조회할 수 있다.
- 1 개 이상의 등록된 상품으로 메뉴를 등록할 수 있다.
- 상품이 없으면 등록할 수 없다.
- 메뉴에 속한 상품의 수량은 0 이상이어야 한다.
- 메뉴의 가격이 올바르지 않으면 등록할 수 없다.
- 메뉴에 속한 상품 금액의 합은 메뉴의 가격보다 크거나 같아야 한다.
- 메뉴는 특정 메뉴 그룹에 속해야 한다.
- 메뉴의 이름이 올바르지 않으면 등록할 수 없다.
- 메뉴의 가격을 변경할 수 있다.
- 메뉴의 가격이 올바르지 않으면 변경할 수 없다.
- 메뉴에 속한 상품 금액의 합은 메뉴의 가격보다 크거나 같아야 한다.
- 메뉴를 노출할 수 있다.
- 메뉴의 가격이 메뉴에 속한 상품 금액의 합보다 높을 경우 메뉴를 노출할 수 없다.
- 메뉴를 숨길 수 있다.
- 메뉴의 목록을 조회할 수 있다.
- 주문 테이블을 등록할 수 있다.
- 주문 테이블의 이름이 올바르지 않으면 등록할 수 없다.
- 빈 테이블을 해지할 수 있다.
- 빈 테이블로 설정할 수 있다.
- 완료되지 않은 주문이 있는 주문 테이블은 빈 테이블로 설정할 수 없다.
- 방문한 손님 수를 변경할 수 있다.
- 방문한 손님 수가 올바르지 않으면 변경할 수 없다.
- 빈 테이블은 방문한 손님 수를 변경할 수 없다.
- 주문 테이블의 목록을 조회할 수 있다.
- 1개 이상의 등록된 메뉴로 배달 주문을 등록할 수 있다.
- 1개 이상의 등록된 메뉴로 포장 주문을 등록할 수 있다.
- 1개 이상의 등록된 메뉴로 매장 주문을 등록할 수 있다.
- 주문 유형이 올바르지 않으면 등록할 수 없다.
- 메뉴가 없으면 등록할 수 없다.
- 매장 주문은 주문 항목의 수량이 0 미만일 수 있다.
- 매장 주문을 제외한 주문의 경우 주문 항목의 수량은 0 이상이어야 한다.
- 배달 주소가 올바르지 않으면 배달 주문을 등록할 수 없다.
- 빈 테이블에는 매장 주문을 등록할 수 없다.
- 숨겨진 메뉴는 주문할 수 없다.
- 주문한 메뉴의 가격은 실제 메뉴 가격과 일치해야 한다.
- 주문을 접수한다.
- 접수 대기 중인 주문만 접수할 수 있다.
- 배달 주문을 접수되면 배달 대행사를 호출한다.
- 주문을 서빙한다.
- 접수된 주문만 서빙할 수 있다.
- 주문을 배달한다.
- 배달 주문만 배달할 수 있다.
- 서빙된 주문만 배달할 수 있다.
- 주문을 배달 완료한다.
- 배달 중인 주문만 배달 완료할 수 있다.
- 주문을 완료한다.
- 배달 주문의 경우 배달 완료된 주문만 완료할 수 있다.
- 포장 및 매장 주문의 경우 서빙된 주문만 완료할 수 있다.
- 주문 테이블의 모든 매장 주문이 완료되면 빈 테이블로 설정한다.
- 완료되지 않은 매장 주문이 있는 주문 테이블은 빈 테이블로 설정하지 않는다.
- 주문 목록을 조회할 수 있다.
한글명 |
영문명 |
설명 |
상품 |
Product |
메뉴를 구성하는 물품이다. |
상품 이름 |
ProductName |
상품의 이름이다. 비속어가 포함될 수 없다. |
상품 가격 |
ProductPrice |
상품의 값이다. 0원 이상이다. |
상품 등록 |
register |
상품을 등록한다. |
상품 가격 변경 |
changePrice |
상품의 가격을 변경한다. |
한글명 |
영문명 |
설명 |
메뉴 그룹 |
MenuGroup |
메뉴들을 하나로 묶어서 보여주는 그룹이다. |
메뉴 그룹 이름 |
MenuGroupName |
메뉴 그룹의 이름이다. |
메뉴 그룹 등록 |
register |
메뉴 그룹을 등록한다. |
한글명 |
영문명 |
설명 |
메뉴 |
Menu |
여러 개의 상품의 묶음으로, 손님이 주문하는 대상이다. 또한 특정 메뉴 그룹에 속한다. |
메뉴 상품 |
MenuProduct |
메뉴에 속한 상품이며, 수량이 0개 이상이고 메뉴 가격의 합이 메뉴의 가격보다 크거나 같아야 한다. |
메뉴 가격 |
MenuPrice |
메뉴의 값이다. 0원 이상이다. |
메뉴 이름 |
MenuName |
메뉴의 이름이다. 비속어가 포함될 수 없다. |
메뉴 등록 |
register |
메뉴를 등록한다. |
메뉴 가격 변경 |
changePrice |
메뉴의 가격을 변경한다. |
메뉴 노출 |
display |
메뉴를 노출한다. 메뉴의 가격이 메뉴 상품의 수량 * 가격 보다 작거나 같아야 한다. |
메뉴 숨김 |
hide |
메뉴를 숨긴다. |
한글명 |
영문명 |
설명 |
주문 테이블 |
OrderTable |
매장식사 주문일 경우, 손님들이 식사를 하고 가는 테이블이다. |
주문 테이블 이름 |
OrderTableName |
주문 테이블의 이름이다. |
방문 손님 수 |
NumberOfGuests |
주문 테이블을 방문한 손님 수이다. 0명 이상이다. |
주문 테이블 등록 |
register |
주문 테이블을 등록한다. |
앉다 |
Sit |
테이블에 손님이 앉는 행위 |
치우다 |
Clear |
테이블을 치우는 행위. 완료되지 않은 주문이 있으면 불가능하다. |
주문 테이블 방문 손님 수 변경 |
changeNumberOfGuests |
주문 테이블을 방문한 손님 수를 변경한다. 빈 테이블은 불가능하다. |
한글명 |
영문명 |
설명 |
주문 |
Order |
1개 이상의 메뉴를 손님에게 제공하는 것을 뜻한다. 없는 메뉴나 숨겨진 메뉴는 주문할 수 없다. |
주문 항목 |
OrderLineItem |
주문의 내용을 뜻하며 메뉴, 가격, 수량을 담고 있다. 배달이나 포장시 수량은 0개 이상이어야 한다. 각 주문 항목의 가격은 메뉴 가격과 일치해야 한다. |
주문 유형 |
OrderType |
주문 유형. 배달, 포장, 매장 내 식사 3가지의 경우가 있다. |
주문 유형 - 배달 |
DELIVERY |
배달 주소까지 배달해주는 주문이다. 배달 주소가 있어야 주문이 가능하다. |
주문 유형 - 포장 |
TAKEOUT |
포장해서 가져갈 수 있는 주문이다. |
주문 유형 - 매장 내 식사 |
EAT_IN |
매장 내 주문. 테이블에서 식사하는 주문이다. 손님이 앉아 있는 테이블에 주문이 가능하다. |
배달 주소 |
DeliveryAddress |
배달 주문 시, 배달하는 주소다. |
주문 등록 |
register |
손님의 주문을 등록한다. |
주문 승인 |
accept |
사장님이 접수 대기중인 주문을 접수한다. 배달 주문인 경우, 배달 대행사를 호출한다. 주문 대기 상태여야 한다. |
주문 서빙 |
serve |
사장님이 승인된 주문을 서빙한다. 주문 승인 상태여야 한다. |
배달 시작 |
startDelivery |
배달 대행사가 배달을 시작한다. 배달 주문이어야 하고 서빙 완료 상태여야 한다. |
배달 완료 |
completeDelivery |
배달 대행사가 배달중인 배달 주문을 배달 완료한다. 배달중 상태여야 한다. |
주문 완료 |
complete |
주문을 완료한다. 배달 주문이라면 배달 완료 상태여야 하고 포장이나 매장식사 주문인 경우 서빙 완료 상태여야 한다. |
주문 상태 |
OrderStatus |
주문상태. 대기, 승인, 서빙 완료, 배달중, 배달 완료, 완료 상태가 있다 |
주문 상태 - 대기 |
WAITING |
손님이 주문한 직후의 상태 |
주문 상태 - 승인 |
ACCEPTED |
대기주문을 매장에서 승인한 상태 |
주문 상태 - 서빙 완료 |
SERVED |
주문 유형이 포장 혹은 매장 내 식사인 경우 상품이 손님에게 전달 된 상태, 주문 유형이 배달인 경우 상품이 준비된 상태 |
주문 상태 - 배달중 |
DELIVERING |
주문 유형이 배달인경우 배달이 출발한 상태 |
주문 상태 - 배달 완료 |
DELIVERED |
주문 유형이 배달인경우 배달이 완료된 상태 |
주문 상태 - 주문 완료 |
COMPLETED |
주문이 완료된 상태 |
한글명 |
영문명 |
설명 |
비속어 |
Profanity |
필터링 해야하는 단어 |
배달기사 |
Kitchen Riders |
배달을 대행해주는 라이더 |
- 손님에게 노출되는
name
을 가진다.
- 상품의 가격인
price
를 가진다.
- 상품을 등록할 수 있다(
create
).
price
는 0원 이상이어야 한다.
name
은 비워 둘 수 없다.
name
은 PurgoMalumClient
를 통해 비속어(profanity
)를 필터링 한다.
- 상품의 가격을 변경할 수 있다(
changePrice
).
- 변경되는
price
는 0원 이상이어야 한다.
- 변경 후 메뉴에 속한 상품(
menuProduct
)금액의 합보다 메뉴(menu
)의 가격이 크면 메뉴가 숨겨진다(hide
).
- 상품의 목록을 조회할 수 있다.(
findAll
)
메뉴 그룹(MenuGroup)
- 메뉴 그룹을 등록할 수 있다(
create
).
name
은 비워 둘 수 없다.
name
은 PurgoMalumClient
를 통해 비속어(profanity
)를 필터링 한다.
- 메뉴 그룹의 목록을 조회할 수 있다(
findAll
).
메뉴(Menu)
- 손님에게 노출되는
name
을 가진다.
- 손님이 지불해야하는
price
를 가진다.
- 자신이 속한
menuGroup
을 가진다.
- 자신이 속한 메뉴 그룹을 식별하기 위한
menuGroupId
를 가진다.
- 자신의 노출 여부를 나타내는
displayed
를 가진다.
- 자신에게 속한 상품들인
menuProducts
를 가진다.
menuProduct
는 product
를 가진다.
menuProduct
는 상품을 식별하기 위한 productId
를 가진다.
menuProduct
는 상품의 갯수(quantity
)를 가진다.
- 메뉴를 등록할 수 있다(
create
).
- 메뉴를 등록하려면 등록된
product
가 1개 이상이어야 한다.
menuProduct
의 quantity
는 0 이상이어야 한다.
- 메뉴의
price
는 0원 이상이어야 한다.
menuProduct
금액의 총합은 메뉴의 price
보다 크거나 같아야 한다.
- 메뉴는 특정
menuGroup
에 속해야 한다.
- 메뉴의
name
은 비워둘 수 없다.
- 메뉴의
name
은 PurgoMalumClient
를 통해 비속어(profanity
)를 필터링 한다.
- 메뉴의 가격을 변경할 수 있다(
changePrice
).
- 변경 후 메뉴의
price
는 0원 이상이어야 한다.
- 변경 후
menuProduct
금액의 총합은 메뉴의 price
보다 크거나 같아야 한다.
- 메뉴를 노출할 수 있다(
display
).
- 메뉴의
price
가 menuProduct
금액의 총합 보다 높을 경우 노출할 수 없다.
- 메뉴를 숨길 수 있다(
hide
).
- 메뉴의 목록을 조회할 수 있다(
findAll
).
- 주문 테이블의 이름인
name
을 가진다.
- 주문 테이블의 앉은 손님 수를 뜻하는
numberOfGuests
를 가진다.
- 주문 테이블은 테이블이 비워져있는지를 나타내는 상태인
empty
를 가진다.
- 주문 테이블을 등록할 수 있다(
create
).
name
은 비워 둘 수 없다.
name
은 profanity
가 포함될 수 없다.
PurgoMalumClient
가 비속어를 필터링 한다.
- 빈 테이블을 해지할 수 있다(
sit
).
- 빈 테이블로 설정할 수 있다(
clear
).
- 주문 테이블의
orderStatus
가 COMPLETED
가 아니라면 설정할 수 없다.
- 방문한 손님 수를 변경할 수 있다(
changeNumberOfGuests
).
numberOfGuests
는 0 이상이어야 한다.
empty
상태의 주문 테이블은 numberOfGuests
를 변경할 수 없다.
- 주문 테이블의 목록을 조회할 수 있다(
findAll
).
- 주문은 어떤 주문인지 타입을 나타내는
orderType
을 가진다.
- 배달 주문은
DELIVERY
타입이다.
- 포장 주문은
TAKEOUT
타입이다.
- 매장 주문은
EAT_IN
타입이다.
- 주문은 현재 상태를 나타내는
orderStatus
를 가진다.
- 주문이 대기 중이라면
WAITING
상태이다.
- 주문이 승인되었다면
ACCEPTED
상태이다.
- 주문이 서빙되었다면
SERVED
상태이다.
- 주문이 배달 중이라면
DELIVERING
상태이다.
- 주문이 배달되었다면
DELIVERED
상태이다.
- 주문이 완료되었다면
COMPLETED
상태이다.
- 주문은 주문 일시를 나타내는
orderDateTime
을 가진다.
- 배달 주문은 배달할 주소를 나타내는
deliveryAddress
를 가질 수 있다.
- 주문은 주문 항목들(
orderLineItems
) 를 가진다.
orderLineItem
은 주문한 menu
를 가진다.
orderLineItem
은 주문한 메뉴를 식별하기 위한 menuId
를 가진다.
orderLineItem
은 주문 항목 수량(quantity
) 를 가진다.
orderLineItem
은 주문의 price
를 가진다.
- 주문을 등록할 수 있다(
create
).
- 1개 이상의 등록된
menu
로 주문을 등록할 수 있다.
menu
가 없는 주문은 등록할 수 없다.
orderType
이 올바르지 않으면 등록할 수 없다.
orderStatus
가 올바르지 않으면 등록할 수 없다.
EAT_IN
타입의 주문은 orderLineItem
의 quantity
가 0 미만일 수 있다.
EAT_IN
을 제외한 타입의 주문은 orderLineItem
의 quantity
가 0 이상이어야 한다.
deliveryAddress
가 비워져 있다면, DELIVERY
주문을 등록할 수 없다.
empty
테이블에는 EAT_IN
타입의 주문을 등록할 수 없다.
- 숨겨진 메뉴는 주문할 수 없다.
- 주문한 메뉴의
price
와 orderLineItem
의 price
는 일치해야한다.
- 주문을 승인할 수 있다(
accept
).
WAITING
상태의 주문만 접수 할 수 있다.
DELIVERY
타입의 주문을 접수하면, 배달기사(kitchenRiders
) 를 호출한다.
- 주문을 서빙할 수 있다(
serve
).
ACCEPTED
상태의 주문만 서빙할 수 있다.
- 주문의 배달을 시작할 수 있다(
startDelivery
).
DELIVERY
타입이고, SERVED
상태의 주문만 배달할 수 있다.
- 배달기사(
kitchenRiders
)가 주문의 배달을 수행한다.
- 주문의 배달을 완료할 수 있다(
completeDelivery
).
DELIVERING
상태의 주문만 배달 완료할 수 있다.
- 주문을 완료할 수 있다(
complete
).
DELIVERY
타입의 주문일 경우, DELIVERED
상태의 주문만 완료할 수 있다.
TAKEOUT
혹은 EAT_IN
타입 주문일 경우, SERVED
상태의 주문만 완료할 수 있다.
orderTable
의 모든 매장 주문이 완료되면 empty
테이블로 설정한다.
COMPLETED
상태가 아닌 매장 주문이 있는 주문 테이블은 empty
테이블로 설정할 수 없다.
- 주문 목록을 조회할 수 있다(
findAll
).
ddd-strategic-design's People
Contributors
Watchers