-
Notifications
You must be signed in to change notification settings - Fork 186
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
step2 미션 제출합니다. #400
base: ksy90101
Are you sure you want to change the base?
step2 미션 제출합니다. #400
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change | ||||
---|---|---|---|---|---|---|
|
@@ -255,3 +255,275 @@ docker compose -p kitchenpos up -d | |||||
| 배달을 완료했다. | complete delivery | 배달기사가 주문한 메뉴를 손님에게 전달을 완료했다. | | ||||||
|
||||||
## 모델링 | ||||||
|
||||||
### 상품(Product) | ||||||
|
||||||
#### 상태 | ||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 모델링을 속성과 상태로 분리해서 잘 작성해주셨네요!! 🤩👍👍 |
||||||
|
||||||
- 상품명(name) | ||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 용어 사전에서 정의했던 영어 명을 그대로 사용해보면 어떨까요? 🙂 There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 모델링의 용어들을 모두 한글명으로 작성해주셨는데, 영문명으로 변경하거나 혹은 영문명과 한글명을 같이 표현한다면 There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 사실 이게 조금 고민이였는데, 용어 사전에서는 상품명이지만, 실제 모델에서의 해당 부분은 name (이름) 이 되는거 같아요. 아울러 There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 제가 조금 헷갈리게 코멘트를 달아둔 것 같네요. 👀 🙏 예를 들자면 아래와 같이 정의하신 영문명 용어를 같이 표현해주면 나중에 모델링 문서를 코드로 옮기기가 더 쉬울 것 같다는 이야기였어요. 🙂 AS IS
TO BE
|
||||||
- 상품명은 필수값이다. | ||||||
- 상품명은 비속어를 포함할 수 없다. | ||||||
- 가격(price) | ||||||
- 가격은 필수값이다. | ||||||
- 가격은 0원보다 작을 수 없다. | ||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 사소하지만 이런 케이스는 부정보다는 긍정으로 작성하는게 조금 더 잘 읽힐 것 같아요. 🙂
Suggested change
|
||||||
|
||||||
#### 행위 | ||||||
|
||||||
- 상품을 등록할 수 있다. | ||||||
- PurgomalumClient를 통해 비속어 검증을 한다. | ||||||
- 상품 가격을 변경할 수 있다. | ||||||
- 메뉴의 가격이 메뉴에 속한 상품 가격의 합보다 클 경우 메뉴는 숨겨진다. | ||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 용어사전에서는 메뉴를 '미노출하면' '숨김 메뉴'가 된다고 볼 수 있을 것 같은데, 이 부분도 용어를 통일시켜보면 어떨까요? 🤔 There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 또한 사소할 수 있지만 용어 사전으로 정의한 용어라면 |
||||||
- 상품을 조회할 수 있다. | ||||||
|
||||||
### 메뉴 그룹(MenuGroup) | ||||||
|
||||||
#### 상태 | ||||||
|
||||||
- 이름(name) | ||||||
- 메뉴 그룹 이름은 필수값이다. | ||||||
- 메뉴 그룹 이름은 비어있을 수 없다. | ||||||
|
||||||
#### 행위 | ||||||
|
||||||
- 메뉴 그룹을 등록할 수 있다. | ||||||
- 메뉴 그룹을 조회할 수 있다. | ||||||
|
||||||
### 메뉴(Menu) | ||||||
|
||||||
#### 상태 | ||||||
|
||||||
- 이름(name) | ||||||
- 상품명은 필수값이다. | ||||||
- 상품명은 비속어를 포함할 수 없다. | ||||||
- 가격(price) | ||||||
- 가격은 필수값이다. | ||||||
- 가격은 0원 이상이어야 한다. | ||||||
- 메뉴 그룹(menuGroup) | ||||||
- 메뉴 그룹은 필수값이다. | ||||||
- 노출 상태(displayed) | ||||||
- 노출 상태는 필수값이다. | ||||||
- 메뉴 상품(menuProducts) | ||||||
- 메뉴에 속한 상품은 1개 이상이어야 한다. | ||||||
|
||||||
#### 행위 | ||||||
|
||||||
- 메뉴를 등록할 수 있다. | ||||||
- PurgomalumClient를 통해 비속어 검증을 한다. | ||||||
- 메뉴에 속한 상품 중에 존재하지 않는 상품이 있으면 등록할 수 없다. | ||||||
- 가격은 메뉴 상품 가격의 합보다 작거나 같아야 한다. | ||||||
- 메뉴 가격을 변경할 수 있다. | ||||||
- 가격은 메뉴 상품 가격의 합보다 작거나 같아야 한다. | ||||||
- 메뉴를 노출할 수 있다. | ||||||
- 가격은 메뉴 상품 가격의 합보다 작거나 같아야 한다. | ||||||
- 메뉴를 미노출할 수 있다. | ||||||
- 메뉴를 조회할 수 있다. | ||||||
|
||||||
### 메뉴 상품(MenuProduct) | ||||||
|
||||||
#### 상태 | ||||||
|
||||||
- 상품(product) | ||||||
- 상품은 필수값이다. | ||||||
- 수량(quantity) | ||||||
- 수량은 필수값이다. | ||||||
- 수량은 0 보다 커야 한다. | ||||||
|
||||||
### 주문 테이블(OrderTable) | ||||||
|
||||||
#### 상태 | ||||||
|
||||||
- 이름(name) | ||||||
- 주문 테이블 이름은 필수값이다. | ||||||
- 주문 테이블 이름은 비어있을 수 없다. | ||||||
- 손님 수(numberOfGuests) | ||||||
- 손님 수는 0명 이상이어야 한다. | ||||||
- 착석 여부(occupied) | ||||||
|
||||||
#### 행위 | ||||||
|
||||||
- 주문 테이블을 등록할 수 있다. | ||||||
- 손님 수는 0명으로 설정된다. | ||||||
- 착석 여부는 미착석으로 설정된다. | ||||||
- 주문 테이블에 착석할 수 있다. | ||||||
- 존재하지 않는 주문 테이블에 착석할 수 없다. | ||||||
- 주문 테이블을 치울 수 있다. | ||||||
- 존재하지 않는 주문 테이블에 착석할 수 없다. | ||||||
- 완료되지 않은 주문이 있는 주문 테이블은 치울 수 없다. | ||||||
- 손님 수는 0명으로 설정된다. | ||||||
- 주문 테이블의 손님 수를 변경할 수 있다. | ||||||
- 존재하지 않는 주문 테이블에 착석할 수 없다. | ||||||
- 미착석인 주문 테이블의 손님 수를 변경할 수 없다. | ||||||
- 주문 테이블을 조회할 수 있다. | ||||||
|
||||||
### 주문 내역(OrderLineItem) | ||||||
|
||||||
#### 상태 | ||||||
|
||||||
- 메뉴(menu) | ||||||
- 메뉴는 필수값이다. | ||||||
- 수량(quantity) | ||||||
- 수량은 필수값이다. | ||||||
- 포장하기와 배달하기의 주문 내역 수량은 0 이상이여야 한다. | ||||||
- 가격(price) | ||||||
|
||||||
### 주문(Order) | ||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 용어 사전처럼 주문 유형별로 컨텍스트를 분리해서 모델링해보면 어떨까요? 🙂 |
||||||
|
||||||
#### 상태 | ||||||
|
||||||
- 주문 유형(type) | ||||||
- 주문 유형은 필수값이다. | ||||||
- 주문 상태(status) | ||||||
- 주문 시간(orderDateTime) | ||||||
- 주문 내역(orderLineItems) | ||||||
- 주문 내역은 필수값이다. | ||||||
- 주문 내역은 1개 이상이여야 한다. | ||||||
- 배달 주소(deliveryAddress) | ||||||
- 배달하기 주문인 경우에는 핋수값이다. | ||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 오타인 것 같아요. 👀
Suggested change
|
||||||
- 배달하기 주문인 경우에는 비어있을 수 없다. | ||||||
- 주문 테이블(orderTable) | ||||||
- 먹고가기인 경우 주문 테이블은 필수값이다. | ||||||
|
||||||
#### 행위 | ||||||
|
||||||
- 주문을 할 수 있다. | ||||||
- 존재하지 않는 메뉴는 주문할 수 없다. | ||||||
- 먹고가기인 경우 존재하지 않은 주문 테이블에 주문할 수 없다. | ||||||
- 포장하기와 배달하기의 주문 내역 수량은 0 이상이여야 한다. | ||||||
- 주문 내역의 속해있는 메뉴가 존재하지 않으면 주문할 수 없다. | ||||||
- 메뉴가 미노출인 경우 주문할 수 없다. | ||||||
- 메뉴 상태는 대기중으로 설정된다. | ||||||
- 주문 시간은 현재 시간으로 설정된다. | ||||||
- 주문 테이블이 미착석인 경우 주문할 수 없다. | ||||||
- 주문을 수락할 수 있다. | ||||||
- 존재하지 않는 주문은 수락할 수 없다. | ||||||
- 주문 상태가 대기중인 주문만 수락할 수 있다. | ||||||
- 배달하기 주문인 경우 배달 기사에 배달을 요청할 수 있다. | ||||||
- KitchenridersClient를 통해 배달을 요청한다. | ||||||
- 주문 상태를 수락으로 변경한다. | ||||||
- 주문을 서빙할 수 있다. | ||||||
- 존재하지 않는 주문은 서빙할 수 없다. | ||||||
- 수락된 주문만 서빙할 수 있다. | ||||||
- 주문 상태를 서빙으로 변경한다. | ||||||
- 배달을 시작할 수 있다. | ||||||
- 존재하지 않는 주문은 배달할 수 없다. | ||||||
- 배달하기 주문이 경우에만 배달할 수 있다. | ||||||
- 서빙된 주문만 배달할 수 있다. | ||||||
- 주문 상태를 배달중으로 변경한다. | ||||||
- 배달을 완료할 수 있다. | ||||||
- 존재하지 않는 주문은 배달을 완료할 수 없다. | ||||||
- 배달중인 주문만 배달할 수 있다. | ||||||
- 주문 상태를 배달완료로 변경한다. | ||||||
- 주문을 완료할 수 있다. | ||||||
- 존재하지 않는 주문은 주문을 완료할 수 없다. | ||||||
- 배달하기 주문의 경우 배달 완료된 주문만 완료할 수 있다. | ||||||
- 포장하기 및 먹고가기 주문의 경우 서빙된 주문만 완료할 수 있다. | ||||||
- 주문 상태를 주문완료로 변경한다. | ||||||
- 먹고가기 주문인 경우 해당 주문 테이블의 모든 주문이 완료된 경우에만 테이블을 치울 수 있다. | ||||||
- 주문을 조회할 수 있다. | ||||||
|
||||||
```mermaid | ||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. mermaid 활용한 도식화 👍💯 There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
위의 피드백을 반영한다면 이 부분도 변경이 필요하겠네요! 👀 |
||||||
classDiagram | ||||||
MenuGroup "1" --> "*" Menu | ||||||
Menu "1" <-- "*" MenuProduct | ||||||
MenuProduct "1" <-- "*" Product | ||||||
Order "1" --> "*" OrderLineItem | ||||||
OrderTable "1" --> "*" Order | ||||||
OrderLineItem "1" <-- "*" Menu | ||||||
OrderStatus -- Order | ||||||
OrderType -- Order | ||||||
|
||||||
class Product { | ||||||
UUID id | ||||||
String name // 상품명 | ||||||
BigDecimal price // 가격 | ||||||
} | ||||||
class MenuGroup { | ||||||
UUID id | ||||||
String name // 이름 | ||||||
} | ||||||
class Menu { | ||||||
UUID id | ||||||
String name // 이름 | ||||||
BigDecimal price // 가격 | ||||||
MenuGroup menuGroup // 메뉴 그룹 | ||||||
boolean displayed // 노출 상태 | ||||||
List~MenuProduct~ menuProducts // 메뉴상품 | ||||||
} | ||||||
class MenuProduct { | ||||||
Long seq | ||||||
Product product // 상품 | ||||||
long quantity // 수량 | ||||||
} | ||||||
class OrderTable { | ||||||
UUID id | ||||||
String name // 이름 | ||||||
int numberOfGuests // 손님 수 | ||||||
boolean occupied // 착석 여부 | ||||||
} | ||||||
class OrderLineItem { | ||||||
UUID id | ||||||
Menu menu // 메뉴 | ||||||
long quantity // 수량 | ||||||
BigDecimal price // 가격 | ||||||
} | ||||||
class Order { | ||||||
UUID id | ||||||
OrderType type // 주문 유형 | ||||||
OrderStatus status // 주문 상태 | ||||||
LocalDateTime orderDateTime // 주문 시간 | ||||||
List~OrderLineItem~ orderLineItems // 주문 내역 | ||||||
String deliveryAddress // 배달 주소 | ||||||
OrderTable orderTable // 주문 테이블 | ||||||
} | ||||||
class OrderStatus { | ||||||
<<enumeration>> | ||||||
WAITING // 대기중 | ||||||
ACCEPTED // 수락 | ||||||
SERVED // 서빙 | ||||||
DELIVERING // 배달중 | ||||||
DELIVERED // 배달 완료 | ||||||
COMPLETED // 완료 | ||||||
} | ||||||
class OrderType { | ||||||
<<enumeration>> | ||||||
EAT_IN // 먹고가기 | ||||||
TAKEOUT // 포장하기 | ||||||
DELIVERY // 배달하기 | ||||||
} | ||||||
``` | ||||||
|
||||||
## 정책 | ||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 정책을 따로 정리해주셨군요? 👍 단지 조금 고민해볼 부분은 주문 유형별로 컨텍스트를 분리해서 속성, 행위를 모델링했다면 |
||||||
|
||||||
### 배달하기 | ||||||
|
||||||
1. (손님) 배달하기 주문을 한다. - 대기중 | ||||||
2. (사장님) 배달하기 주문을 수락한다. - 수락 | ||||||
3. (사장님) 배달 기사에게 배달을 요청한다. | ||||||
4. (사장님) 메뉴를 완성하여, 배달 기사가 배달할 수 있도록 메뉴를 놔둔다. - 서빙 | ||||||
5. (배달 기사) 배달을 시작한다. - 배달중 | ||||||
6. (배달 기사) 배달을 완료한다. - 배달완료 | ||||||
7. (사장님) 주문을 완료한다. - 주문완료 | ||||||
|
||||||
### 포장하기 | ||||||
|
||||||
1. (손님) 포장하기 주문을 한다. - 대기중 | ||||||
2. (사장님) 포장하기 주문을 수락한다. - 수락 | ||||||
3. (사장님) 메뉴를 완성하여 손님이 가져갈 수 있도록 메뉴를 놔둔다. - 서빙 | ||||||
4. (사장님) 손님이 메뉴를 가져가고 주문을 완료한다. - 주문완료 | ||||||
|
||||||
### 먹고가기 | ||||||
|
||||||
1. (손님) 비어있는 주문 테이블에 착석한다. | ||||||
2. (사장님) 주문 테이블의 손님수를 설정한다. | ||||||
3. (손님) 먹고가기 주문을 한다. - 대기중 | ||||||
4. (사장님) 먹고가기 주문을 수락한다. - 수락 | ||||||
5. (사장님) 메뉴를 완성한다. - 서빙 | ||||||
6. (사장님) 손님에게 메뉴를 직접 가져다 드리고 주문을 완료한다. - 주문완료 | ||||||
7. (사장님) 해당 주문테이블에 모든 주문이 완료되면 주문 테이블을 치운다. | ||||||
|
||||||
### 메뉴 생성 | ||||||
|
||||||
1. (사장님) 상품을 등록한다. | ||||||
2. (사장님) 메뉴 그룹을 등록한다. | ||||||
3. (사장님) 메뉴 상품을 설정한다. | ||||||
4. (사장님) 메뉴를 등록한다. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
모델링 또한 컨텍스트별로 잘 분리해주셨네요. 👍💯