View Code? Open in Web Editor
NEW
This project forked from next-step/ddd-tactical-design
ddd-tactical-design's Introduction
- 상품을 등록할 수 있다.
- 상품의 가격이 올바르지 않으면 등록할 수 없다.
- 상품의 이름이 올바르지 않으면 등록할 수 없다.
- 상품의 가격을 변경할 수 있다.
- 상품의 가격이 올바르지 않으면 변경할 수 없다.
- 상품의 가격이 변경될 때 메뉴의 가격이 메뉴에 속한 상품 금액의 합보다 크면 메뉴가 숨겨진다.
- 상품의 목록을 조회할 수 있다.
- 메뉴 그룹을 등록할 수 있다.
- 메뉴 그룹의 이름이 올바르지 않으면 등록할 수 없다.
- 메뉴 그룹의 목록을 조회할 수 있다.
- 1 개 이상의 등록된 상품으로 메뉴를 등록할 수 있다.
- 상품이 없으면 등록할 수 없다.
- 메뉴에 속한 상품의 수량은 0 이상이어야 한다.
- 메뉴의 가격이 올바르지 않으면 등록할 수 없다.
- 메뉴에 속한 상품 금액의 합은 메뉴의 가격보다 크거나 같아야 한다.
- 메뉴는 특정 메뉴 그룹에 속해야 한다.
- 메뉴의 이름이 올바르지 않으면 등록할 수 없다.
- 메뉴의 가격을 변경할 수 있다.
- 메뉴의 가격이 올바르지 않으면 변경할 수 없다.
- 메뉴에 속한 상품 금액의 합은 메뉴의 가격보다 크거나 같아야 한다.
- 메뉴를 노출할 수 있다.
- 메뉴의 가격이 메뉴에 속한 상품 금액의 합보다 높을 경우 메뉴를 노출할 수 없다.
- 메뉴를 숨길 수 있다.
- 메뉴의 목록을 조회할 수 있다.
- 주문 테이블을 등록할 수 있다.
- 주문 테이블의 이름이 올바르지 않으면 등록할 수 없다.
- 빈 테이블을 해지할 수 있다.
- 빈 테이블로 설정할 수 있다.
- 완료되지 않은 주문이 있는 주문 테이블은 빈 테이블로 설정할 수 없다.
- 방문한 손님 수를 변경할 수 있다.
- 방문한 손님 수가 올바르지 않으면 변경할 수 없다.
- 빈 테이블은 방문한 손님 수를 변경할 수 없다.
- 주문 테이블의 목록을 조회할 수 있다.
- 1개 이상의 등록된 메뉴로 배달 주문을 등록할 수 있다.
- 1개 이상의 등록된 메뉴로 포장 주문을 등록할 수 있다.
- 1개 이상의 등록된 메뉴로 매장 주문을 등록할 수 있다.
- 주문 유형이 올바르지 않으면 등록할 수 없다.
- 메뉴가 없으면 등록할 수 없다.
- 매장 주문은 주문 항목의 수량이 0 미만일 수 있다.
- 매장 주문을 제외한 주문의 경우 주문 항목의 수량은 0 이상이어야 한다.
- 배달 주소가 올바르지 않으면 배달 주문을 등록할 수 없다.
- 빈 테이블에는 매장 주문을 등록할 수 없다.
- 숨겨진 메뉴는 주문할 수 없다.
- 주문한 메뉴의 가격은 실제 메뉴 가격과 일치해야 한다.
- 주문을 접수한다.
- 접수 대기 중인 주문만 접수할 수 있다.
- 배달 주문을 접수되면 배달 대행사를 호출한다.
- 주문을 서빙한다.
- 접수된 주문만 서빙할 수 있다.
- 주문을 배달한다.
- 배달 주문만 배달할 수 있다.
- 서빙된 주문만 배달할 수 있다.
- 주문을 배달 완료한다.
- 배달 중인 주문만 배달 완료할 수 있다.
- 주문을 완료한다.
- 배달 주문의 경우 배달 완료된 주문만 완료할 수 있다.
- 포장 및 매장 주문의 경우 서빙된 주문만 완료할 수 있다.
- 주문 테이블의 모든 매장 주문이 완료되면 빈 테이블로 설정한다.
- 완료되지 않은 매장 주문이 있는 주문 테이블은 빈 테이블로 설정하지 않는다.
- 주문 목록을 조회할 수 있다.
한글명 |
영문명 |
설명 |
상품 |
product |
메뉴를 관리하는 기준이 되는 데이터 |
식별자 |
id |
상품을 식별하는 값 |
이름 |
displayed name |
음식을 상상하게 만드는 중요한 요소 |
비속어 |
profanity |
욕설 등 상품의 이름으로 사용할 수 없는 단어 |
가격 |
price |
음식의 금액 가치 |
한글명 |
영문명 |
설명 |
메뉴 |
menu |
메뉴 그룹에 속하는 실제 주문 가능 단위 |
이름 |
displayed name |
메뉴를 상상하게 만드는 중요한 요소 |
가격 |
price |
메뉴의 금액 가치 |
금액 |
amount |
가격 * 수량 |
메뉴 그룹 |
menu group |
각각의 메뉴를 성격에 따라 분류하여 묶어둔 그룹 |
메뉴 상품 |
menu product |
메뉴에 속하는 수량이 있는 상품 |
수량 |
quantity |
메뉴에 속하는 각 상품의 수량 |
숨겨진 메뉴 |
not displayed menu |
주문할 수 없는 숨겨진 메뉴 |
노출 여부 |
displayed |
메뉴가 숨겨진 메뉴인지 아닌지 여부 |
한글명 |
영문명 |
설명 |
방문한 손님 수 |
number of guests |
식기가 필요한 사람 수. 필수 사항은 아니며 주문은 0명으로 등록할 수 있다. |
빈 테이블 |
empty table |
주문을 등록할 수 없는 주문 테이블 |
서빙 |
served |
조리가 완료되어 음식이 나갈 수 있는 단계 |
완료 |
completed |
고객이 모든 식사를 마치고 결제를 완료한 단계 |
접수 |
accepted |
주문을 받고 음식을 조리하는 단계 |
접수 대기 |
waiting |
주문이 생성되어 매장으로 전달된 단계 |
주문 |
order |
매장에서 식사하는 고객 대상. 손님들이 매장에서 먹을 수 있도록 조리된 음식을 가져다준다. |
주문 상태 |
order status |
주문이 생성되면 매장에서 주문을 접수하고 고객이 음식을 받기까지의 단계를 표시한다. |
주문 테이블 |
order table |
매장에서 주문이 발생하는 영역 |
주문 항목 |
order line item |
주문에 속하는 수량이 있는 메뉴 |
한글명 |
영문명 |
설명 |
배달 |
delivering |
배달원이 매장을 방문하여 배달 음식의 픽업을 완료하고 배달을 시작하는 단계 |
배달 대행사 |
delivery agency |
준비한 음식을 고객에게 직접 배달하는 서비스 |
배달 완료 |
delivered |
배달원이 주문한 음식을 고객에게 배달 완료한 단계 |
서빙 |
served |
조리가 완료되어 음식이 나갈 수 있는 단계 |
완료 |
completed |
배달 및 결제 완료 단계 |
접수 |
accepted |
주문을 받고 음식을 조리하는 단계 |
접수 대기 |
waiting |
주문이 생성되어 매장으로 전달된 단계 |
주문 |
order |
집이나 직장 등 고객이 선택한 주소로 음식을 배달한다. |
주문 상태 |
order status |
주문이 생성되면 매장에서 주문을 접수하고 고객이 음식을 받기까지의 단계를 표시한다. |
주문 항목 |
order line item |
주문에 속하는 수량이 있는 메뉴 |
한글명 |
영문명 |
설명 |
서빙 |
served |
조리가 완료되어 음식이 나갈 수 있는 단계 |
완료 |
completed |
고객이 음식을 수령하고 결제를 완료한 단계 |
접수 |
accepted |
주문을 받고 음식을 조리하는 단계 |
접수 대기 |
waiting |
주문이 생성되어 매장으로 전달된 단계 |
주문 |
order |
포장하는 고객 대상. 고객이 매장에서 직접 음식을 수령한다. |
주문 상태 |
order status |
주문이 생성되면 매장에서 주문을 접수하고 고객이 음식을 받기까지의 단계를 표시한다. |
주문 항목 |
order line item |
주문에 속하는 수량이 있는 메뉴 |
- 이름은 이름 값(
name
)을 가진다.
- 이름에는 이름 값이 필수고, 비워둘 수 없다.
- 이름의 이름 값에는 비속어(
profanity
)가 포함될 수 없다.
- 이름은 이름 값을 반환한다.
- 가격은 가격 값(
price
)를 가진다.
- 가격에는 가격 값이 필수고, 0 미만의 가격 값을 가질 수 없다.
- 가격은 가격 값을 반환한다.
- 수량은 수량 값(
quantity
)를 가진다.
- 수량에는 수량 값이 필수고, 수량은 0 미만의 수량 값을 가질 수 없다.
- 수량은 수량 값을 반환한다.
- 상품은 식별자(
id
)와 이름(DisplayedName
), 가격(Price
)을 가진다.
- 상품은 식별자를 반환한다.
- 상품은 이름을 반환한다.
- 상품은 가격을 반환한다.
- 상품은 가격을 바꾼다.
메뉴(Menu
)
- 메뉴는 식별자(
id
)와 이름(DisplayedName
), 가격(Price
), 메뉴 상품 목록(MenuProducts
), 메뉴 그룹 식별자(menuGroupId
), 노출 여부(displayed
)를 가진다.
- 메뉴는 특정 메뉴 그룹(
MenuGroup
)에 속한다.
- 숨겨진 메뉴가 아니라면, 메뉴의 가격은 메뉴 상품 목록의 금액(
amount
)보다 적거나 같아야 한다.
- 메뉴는 가격을 바꾼다.
- 메뉴는 노출된다.
- 메뉴는 숨겨진다.
- 메뉴는 식별자를 반환한다.
- 메뉴는 이름을 반환한다.
- 메뉴는 가격을 반환한다.
- 메뉴는 노출 여부를 반환한다.
메뉴 그룹(MenuGroup
)
- 메뉴 그룹은 식별자(
id
)와 이름(DisplayedName
)을 가진다.
- 메뉴 그룹은 식별자를 반환한다.
- 메뉴 그룹은 이름을 반환한다.
메뉴 상품 목록(MenuProducts
)
- 메뉴 상품 목록은 메뉴 상품(
MenuProduct
) 목록을 가진다.
- 메뉴 상품 목록은 1 개 이상의 메뉴 상품을 가져야 한다.
- 메뉴 상품 목록은 금액(
amount
)을 반환한다.
메뉴 상품(MenuProduct
)
- 메뉴 상품은 메뉴 식별자(
menuId
)와 상품 식별자(productId
), 가격(Price
), 수량(Quantity
)을 가진다.
- 메뉴 상품에는 메뉴 식별자가 필수다.
- 메뉴 상품에는 상품 식별자가 필수다.
- 메뉴 상품은 금액(
amount
)을 반환한다.
- 주문 테이블은 식별자(
id
)와 이름(DisplayedName
), 방문한 손님 수(NumberOfGuests
), 빈 테이블 여부(isEmpty
)를 가진다.
- 주문 테이블이 빈 테이블이면, 주문을 추가할 수 없다.
- 주문 테이블은 빈 테이블로 설정(
sit
)된다.
- 주문 테이블에 계산 완료(
Completed
)되지 않은 주문이 있으면, 빈 테이블로 설정되지 않는다.
- 주문 테이블은 빈 테이블을 해제(
clear
)된다.
- 주문 테이블의 방문한 손님 수는 변경(
changeNumberOfGuests
)된다.
- 주문 테이블이 빈 테이블이면, 방문한 손님 수는 0이며 변경할 수 없다.
- 방문한 손님 수는 방문한 손님 수 값(
value
)을 가진다.
- 방문한 손님 수는 0 미만의 방문한 손님 수 값을 가질 수 없다.
- 주문은 식별자(
id
)와 주문 테이블 식별자(OrderTableId
), 주문 상태(OrderStatus
), 주문 시간(orderDateTime
), 주문 항목 목록(OrderLineItems
)을 가진다.
- 주문은 등록된 주문 테이블의 식별자가 필수다.
- 주문은 주문 테이블 식별자가 빈 테이블의 것이 아니어야 한다.
- 주문은 주문 항목 목록(
OrderLineItems
)이 필수다.
- 주문은 생성될 때, 주문 상태는 접수 대기(
Waiting
)다.
- 주문의 주문 상태는 다음 단계로 진행(
proceed
)된다.
- 주문이 계산 완료되면, 주문 테이블의 방문한 손님 수(
NumberOfGuests
)를 0으로 변경하고, 빈 테이블로 설정한다.
- 주문 상태에는 접수 대기(
Waiting
), 접수(Accepted
), 서빙(Served
), 계산 완료(Completed
)가 있다.
- 주문 상태는 다음 단계의 주문 상태로 진행(
proceed
)된다.
- 접수 대기는 접수로 진행된다.
- 접수는 서빙으로 진행된다.
- 서빙은 계산 완료로 진행된다.
- 주문 항목 목록은 주문 항목(
OrderLineItem
) 목록을 가진다.
- 주문 항목 목록은 1개 이상의 주문 항목이 필수다.
- 주문 항목 목록은 메뉴 별 금액(가격 * 수량)의 합이 0보다 작은 주문 항목 있는지 확인하여 계산 완료 가능 여부를 반환(
canBeCompleted
)한다.
- 주문 항목 목록은 주문 항목의 금액의 합을 반환(
getAmount
)한다.
- 주문 항목은 메뉴 식별자(
menuId
)와 가격(Price
), 수량(quantity
)을 가진다.
- 주문 항목은 등록된 메뉴의 식별자가 필수다.
- 주문 항목은 노출된 메뉴의 식별자만 가질 수 있다.
- 주문 항목의 가격은 메뉴의 가격과 일치해야 한다.
- 주문 항목의 수량은 0보다 적을 수 있다.
- 주문 항목은 금액(가격 * 수량)을 반환(
getAmount
)한다.
Order
는 식별자와 OrderStatus
, 주문 시간, 배달 주소, OrderLineItems
를 가진다.
- 메뉴가 노출되고 있으며 판매되는 메뉴 가격과 일치하면
Order
가 생성된다.
Order
는 접수 대기 ➜ 접수 ➜ 서빙 ➜ 배달 ➜ 배달 완료 ➜ 계산 완료 순서로 진행된다.
Order
가 접수되면 DeliveryAgency
가 호출된다.
OrderLineItem
는 가격과 수량을 가진다.
OrderLineItem
의 수량은 1보다 커야 한다.
Order
는 식별자와 OrderStatus
, 주문 시간, OrderLineItems
를 가진다.
- 메뉴가 노출되고 있으며 판매되는 메뉴 가격과 일치하면
Order
가 생성된다.
Order
는 접수 대기 ➜ 접수 ➜ 서빙 ➜ 계산 완료 순서로 진행된다.
OrderLineItem
는 가격과 수량을 가진다.
OrderLineItem
의 수량은 1보다 커야 한다.
ddd-tactical-design's People