Skip to content

Commit b21ea65

Browse files
Add domain modeling
1 parent 197e507 commit b21ea65

File tree

1 file changed

+149
-1
lines changed

1 file changed

+149
-1
lines changed

README.md

+149-1
Original file line numberDiff line numberDiff line change
@@ -158,4 +158,152 @@ docker compose -p kitchenpos up -d
158158
PENDING → ACCEPTED → PREPARING → DELIVERING → DELIVERED → COMPLETED
159159

160160
※ 모든 상태에서 CANCELLED로 변경될 수 있음
161-
## 모델링
161+
## 모델링
162+
163+
### 도메인 모델
164+
165+
```mermaid
166+
classDiagram
167+
class Product {
168+
UUID id
169+
String name
170+
BigDecimal price
171+
172+
register()
173+
updatePrice()
174+
validatePrice()
175+
validateName()
176+
}
177+
178+
class MenuGroup {
179+
UUID id
180+
String name
181+
182+
register()
183+
validateName()
184+
}
185+
186+
class Menu {
187+
UUID id
188+
String name
189+
BigDecimal price
190+
boolean displayed
191+
UUID menuGroupId
192+
List~MenuProduct~ products
193+
194+
register()
195+
updatePrice()
196+
display()
197+
hide()
198+
validatePrice()
199+
validateName()
200+
validateProducts()
201+
}
202+
203+
class MenuProduct {
204+
Long seq
205+
Long quantity
206+
UUID productId
207+
UUID menuId
208+
}
209+
210+
class Order {
211+
UUID id
212+
OrderType type
213+
OrderStatus status
214+
List~OrderLineItem~ items
215+
String deliveryAddress
216+
LocalDateTime orderDateTime
217+
UUID tableId
218+
219+
create()
220+
accept()
221+
serve()
222+
deliver()
223+
complete()
224+
validateType()
225+
validateItems()
226+
validateAddress()
227+
}
228+
229+
class OrderLineItem {
230+
Long seq
231+
Long quantity
232+
BigDecimal price
233+
OrderLineItemMenu menu
234+
}
235+
236+
class OrderLineItemMenu {
237+
Long seq
238+
String name
239+
BigDecimal price
240+
UUID menuId
241+
}
242+
243+
class RestaurantTable {
244+
UUID id
245+
String name
246+
int numberOfGuests
247+
boolean occupied
248+
249+
register()
250+
occupy()
251+
release()
252+
updateNumberOfGuests()
253+
validateName()
254+
validateNumberOfGuests()
255+
}
256+
257+
%% 관계 정의
258+
Menu "*" --> "1" MenuGroup
259+
Menu "1" <-- "*" MenuProduct
260+
MenuProduct "*" --> "1" Product
261+
Order "*" --> "1" RestaurantTable
262+
Order "1" *-- "*" OrderLineItem
263+
OrderLineItem "1" *-- "1" OrderLineItemMenu
264+
```
265+
266+
### 주요 도메인 규칙
267+
268+
1. 상품(Product)
269+
- 가격은 0원 이상이어야 함
270+
- 이름은 비속어를 포함할 수 없음
271+
272+
2. 메뉴(Menu)
273+
- 최소 1개 이상의 상품으로 구성
274+
- 가격은 구성 상품들의 총 가격 이상이어야 함
275+
- 상품 가격 총합보다 메뉴 가격이 높으면 숨김 처리
276+
277+
3. 주문(Order)
278+
- 배달/포장/매장 주문 유형 구분
279+
- 배달 주문은 주소 필수
280+
- 매장 주문은 테이블 지정 필수
281+
- 주문 상태는 정해진 흐름대로만 변경 가능
282+
283+
4. 테이블(RestaurantTable)
284+
- 사용중인 테이블만 주문 가능
285+
- 주문이 완료되지 않은 테이블은 사용 해제 불가
286+
- 빈 테이블은 손님 수 변경 불가
287+
288+
### 핵심 비즈니스 흐름
289+
290+
1. 메뉴 관리
291+
```mermaid
292+
stateDiagram-v2
293+
[*] --> 메뉴등록
294+
메뉴등록 --> 메뉴노출: 가격 검증 통과
295+
메뉴노출 --> 메뉴숨김: 가격 규칙 위반
296+
메뉴숨김 --> 메뉴노출: 가격 수정
297+
```
298+
299+
2. 주문 처리
300+
```mermaid
301+
stateDiagram-v2
302+
[*] --> 대기중
303+
대기중 --> 접수됨: 주문접수
304+
접수됨 --> 전달됨: 음식준비완료
305+
전달됨 --> 배달중: 배달주문
306+
전달됨 --> 완료됨: 매장/포장주문
307+
배달중 --> 배달됨
308+
배달됨 --> 완료됨
309+
```

0 commit comments

Comments
 (0)