File tree 1 file changed +149
-1
lines changed
1 file changed +149
-1
lines changed Original file line number Diff line number Diff line change @@ -158,4 +158,152 @@ docker compose -p kitchenpos up -d
158
158
PENDING → ACCEPTED → PREPARING → DELIVERING → DELIVERED → COMPLETED
159
159
160
160
※ 모든 상태에서 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
+ ```
You can’t perform that action at this time.
0 commit comments