skid901 / ddd-strategic-design

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

키친포스

요구 사항

상품

  • 상품을 등록할 수 있다.
  • 상품의 가격이 올바르지 않으면 등록할 수 없다.
    • 상품의 가격은 0원 이상이어야 한다.
  • 상품의 이름이 올바르지 않으면 등록할 수 없다.
    • 상품의 이름에는 비속어가 포함될 수 없다.
  • 상품의 가격을 변경할 수 있다.
  • 상품의 가격이 올바르지 않으면 변경할 수 없다.
    • 상품의 가격은 0원 이상이어야 한다.
  • 상품의 가격이 변경될 때 메뉴의 가격이 메뉴에 속한 상품 금액의 합보다 크면 메뉴가 숨겨진다.
  • 상품의 목록을 조회할 수 있다.

메뉴 그룹

  • 메뉴 그룹을 등록할 수 있다.
  • 메뉴 그룹의 이름이 올바르지 않으면 등록할 수 없다.
    • 메뉴 그룹의 이름은 비워 둘 수 없다.
  • 메뉴 그룹의 목록을 조회할 수 있다.

메뉴

  • 1 개 이상의 등록된 상품으로 메뉴를 등록할 수 있다.
  • 상품이 없으면 등록할 수 없다.
  • 메뉴에 속한 상품의 수량은 0 이상이어야 한다.
  • 메뉴의 가격이 올바르지 않으면 등록할 수 없다.
    • 메뉴의 가격은 0원 이상이어야 한다.
  • 메뉴에 속한 상품 금액의 합은 메뉴의 가격보다 크거나 같아야 한다.
  • 메뉴는 특정 메뉴 그룹에 속해야 한다.
  • 메뉴의 이름이 올바르지 않으면 등록할 수 없다.
    • 메뉴의 이름에는 비속어가 포함될 수 없다.
  • 메뉴의 가격을 변경할 수 있다.
  • 메뉴의 가격이 올바르지 않으면 변경할 수 없다.
    • 메뉴의 가격은 0원 이상이어야 한다.
  • 메뉴에 속한 상품 금액의 합은 메뉴의 가격보다 크거나 같아야 한다.
  • 메뉴를 노출할 수 있다.
  • 메뉴의 가격이 메뉴에 속한 상품 금액의 합보다 높을 경우 메뉴를 노출할 수 없다.
  • 메뉴를 숨길 수 있다.
  • 메뉴의 목록을 조회할 수 있다.

주문 테이블

  • 주문 테이블을 등록할 수 있다.
  • 주문 테이블의 이름이 올바르지 않으면 등록할 수 없다.
    • 주문 테이블의 이름은 비워 둘 수 없다.
  • 빈 테이블을 해지할 수 있다.
  • 빈 테이블로 설정할 수 있다.
  • 완료되지 않은 주문이 있는 주문 테이블은 빈 테이블로 설정할 수 없다.
  • 방문한 손님 수를 변경할 수 있다.
  • 방문한 손님 수가 올바르지 않으면 변경할 수 없다.
    • 방문한 손님 수는 0 이상이어야 한다.
  • 빈 테이블은 방문한 손님 수를 변경할 수 없다.
  • 주문 테이블의 목록을 조회할 수 있다.

주문

  • 1개 이상의 등록된 메뉴로 배달 주문을 등록할 수 있다.
  • 1개 이상의 등록된 메뉴로 포장 주문을 등록할 수 있다.
  • 1개 이상의 등록된 메뉴로 매장 주문을 등록할 수 있다.
  • 주문 유형이 올바르지 않으면 등록할 수 없다.
  • 메뉴가 없으면 등록할 수 없다.
  • 매장 주문은 주문 항목의 수량이 0 미만일 수 있다.
  • 매장 주문을 제외한 주문의 경우 주문 항목의 수량은 0 이상이어야 한다.
  • 배달 주소가 올바르지 않으면 배달 주문을 등록할 수 없다.
    • 배달 주소는 비워 둘 수 없다.
  • 빈 테이블에는 매장 주문을 등록할 수 없다.
  • 숨겨진 메뉴는 주문할 수 없다.
  • 주문한 메뉴의 가격은 실제 메뉴 가격과 일치해야 한다.
  • 주문을 접수한다.
  • 접수 대기 중인 주문만 접수할 수 있다.
  • 배달 주문을 접수되면 배달 대행사를 호출한다.
  • 주문을 서빙한다.
  • 접수된 주문만 서빙할 수 있다.
  • 주문을 배달한다.
  • 배달 주문만 배달할 수 있다.
  • 서빙된 주문만 배달할 수 있다.
  • 주문을 배달 완료한다.
  • 배달 중인 주문만 배달 완료할 수 있다.
  • 주문을 완료한다.
  • 배달 주문의 경우 배달 완료된 주문만 완료할 수 있다.
  • 포장 및 매장 주문의 경우 서빙된 주문만 완료할 수 있다.
  • 주문 테이블의 모든 매장 주문이 완료되면 빈 테이블로 설정한다.
  • 완료되지 않은 매장 주문이 있는 주문 테이블은 빈 테이블로 설정하지 않는다.
  • 주문 목록을 조회할 수 있다.

용어 사전

공통

한글명 영문명 설명
식별자 id 데이터를 식별하는 고윳값
가격 price 상품 및 메뉴에 매겨진 금액
이름 name 데이터를 지칭하는 단어
비속어 profanity 이름으로 사용할 수 없는 단어
수량 quantity 특정 데이터에 속하는 단위 데이터의 개수

상품

한글명 영문명 설명
상품 product 메뉴를 관리하는 기준이 되는 데이터

메뉴 그룹

한글명 영문명 설명
메뉴 그룹 menu group 메뉴를 성격에 따라 분류하여 묶어둔 그룹

메뉴

한글명 영문명 설명
메뉴 menu 메뉴에 속한 상품과 가격 데이터
메뉴에 속한 상품 menu product 상품과 그 상품의 수량 데이터
노출된 메뉴 displayed menu 주문할 수 있는 메뉴
숨겨진 메뉴 non-displayed menu 주문할 수 없는 메뉴

주문 테이블

한글명 영문명 설명
주문 테이블 order table 매장 주장을 위해 선점해야 하는 데이터
빈 테이블 empty table 선점할 수 있는 주문 테이블
채운 테이블 non-empty table 선점할 수 없는 주문 테이블
방문한 손님 수 number of guests 현재 주문 테이블을 선점하고 있는 손님의 수

주문

한글명 영문명 설명
주문 order 손님의 메뉴 요청 데이터
주문 항목 order line item 주문 대상 메뉴, 가격 및 수량 데이터
주문 일시 order date time 주문이 요청된 날짜와 시간
배달 주소 delivery address 배달 주문 시 주문 항목이 전달될 목적지
배달 대행사 kitchen riders 배달 주문 시 배달을 대행하는 서비스

주문 유형

한글명 영문명 설명
주문 유형 order type 요청되는 방식에 따른 주문 분류 데이터
배달 주문 delivery 배달 주소에서 요청되는 주문
포장 주문 takeout 매장에서 주문 테이블 없이 요청되는 주문
매장 주문 eat in 주문 테이블에서 요청되는 주문

주문 상태

한글명 영문명 설명
주문 상태 order status 주문의 현재 진행 단계 데이터
접수 대기 waiting 주문의 초기 상태
접수 accepted 주문 항목을 준비하는 상태
서빙 served 주문 항목이 손님 또는 배달 대행사에 전달된 상태
배달 delivering 배달 중인 상태
배달 완료 delivered 배달이 완료된 상태
주문 완료 complete 주문이 완료된 상태

모델링

이벤트 스토밍

Event Storming Model

상품 컨텍스트

상품(Product)

  • 속성
    • 식별자(id)
    • 이름(name)
    • 가격(price)
  • 기능 및 조건
    • 상품을 등록한다(create)
      • 상품의 이름에는 비속어가 포함될 수 없다.
      • 상품의 가격은 0원 이상이어야 한다.
    • 상품의 가격을 변경한다(changePrice)
      • 상품의 가격은 0원 이상이어야 한다.
      • 상품의 가격이 변경될 때 메뉴의 가격이 메뉴에 속한 상품 금액의 합보다 크면 메뉴가 숨겨진다.
    • 상품을 조회한다(findAll)

메뉴 컨텍스트

메뉴 그룹(MenuGroup)

  • 속성
    • 식별자(id)
    • 이름(name)
  • 기능 및 조건
    • 메뉴 그룹을 등록한다(create)
      • 메뉴 그룹의 이름의 길이는 1 자 이상이어야 한다.
    • 메뉴 그룹을 조회한다(findAll)

메뉴(Menu)

  • 속성
    • 식별자(id)
    • 이름(name)
    • 가격(price)
    • 메뉴 그룹 식별자(menuGroupId)
    • 노출 여부(display)
    • 메뉴에 속한 상품(menuProduct) 목록
      • 상품 식별자(productId)
      • 수량(quantity)
  • 기능 및 조건
    • 메뉴를 등록한다(create)
      • 1 개 이상의 등록된 상품으로 메뉴를 등록할 수 있다.
      • 상품이 없으면 등록할 수 없다.
      • 메뉴에 속한 상품의 수량은 0 이상이어야 한다.
      • 메뉴의 가격은 0원 이상이어야 한다.
      • 메뉴에 속한 상품 금액의 합은 메뉴의 가격보다 크거나 같아야 한다.
      • 메뉴는 특정 메뉴 그룹에 속해야 한다.
      • 메뉴의 이름에는 비속어가 포함될 수 없다.
    • 메뉴의 가격을 변경한다(changePrice)
      • 메뉴의 가격은 0원 이상이어야 한다.
      • 메뉴에 속한 상품 금액의 합은 메뉴의 가격보다 크거나 같아야 한다.
    • 메뉴를 노출한다(display)
      • 메뉴의 가격이 메뉴에 속한 상품 금액의 합보다 높을 경우 메뉴를 노출할 수 없다.
    • 메뉴를 숨긴다(hide)
    • 메뉴를 조회한다(findAll)

주문 컨텍스트

주문 테이블(OrderTable)

  • 속성
    • 식별자(id)
    • 이름(name)
    • 방문한 손님 수(numberOfGuests)
    • 빈 테이블 여부(empty)
  • 기능 및 조건
    • 주문 테이블을 등록한다(create)
      • 주문 테이블의 이름은 0 자 이상이어야 한다.
    • 주문 테이블을 채운다(sit)
    • 주문 테이블을 비운다(clear)
      • 완료되지 않은 주문이 있는 주문 테이블은 빈 테이블로 설정할 수 없다.
    • 주문 테이블의 방문한 손님 수를 변경한다(changeNumberOfGuests)
      • 방문한 손님 수는 0 명 이상이어야 한다.
      • 빈 테이블은 방문한 손님 수를 변경할 수 없다.
    • 주문 테이블을 조회한다(findAll)

주문(Order)

  • 속성
    • 식별자(id)
    • 주문 유형(type)
    • 주문 상태(status)
    • 주문 일시(orderDateTime)
    • 주문 항목(orderLineItem) 목록
      • 메뉴 식별자(menuId)
      • 가격(price)
      • 수량(quantity)
    • 배달 주소(deliveryAddress)
    • 주문 테이블 식별자(orderTableId)
  • 기능 및 조건
    • 배달 주문을 등록한다(createDelivery)
      • 1개 이상의 등록된 메뉴로 배달 주문을 등록할 수 있다.
      • 주문 유형이 올바르지 않으면 등록할 수 없다.
      • 메뉴가 없으면 등록할 수 없다.
      • 매장 주문을 제외한 주문의 경우 주문 항목의 수량은 0 이상이어야 한다.
      • 배달 주소는 비워 둘 수 없다.
      • 숨겨진 메뉴는 주문할 수 없다.
      • 주문한 메뉴의 가격은 실제 메뉴 가격과 일치해야 한다.
    • 포장 주문을 등록한다(createTakeout)
      • 1개 이상의 등록된 메뉴로 포장 주문을 등록할 수 있다.
      • 주문 유형이 올바르지 않으면 등록할 수 없다.
      • 메뉴가 없으면 등록할 수 없다.
      • 매장 주문을 제외한 주문의 경우 주문 항목의 수량은 0 이상이어야 한다.
      • 숨겨진 메뉴는 주문할 수 없다.
      • 주문한 메뉴의 가격은 실제 메뉴 가격과 일치해야 한다.
    • 매장 주문을 등록한다(createEatIn)
      • 1개 이상의 등록된 메뉴로 매장 주문을 등록할 수 있다.
      • 주문 유형이 올바르지 않으면 등록할 수 없다.
      • 메뉴가 없으면 등록할 수 없다.
      • 매장 주문은 주문 항목의 수량이 0 미만일 수 있다.
      • 빈 테이블에는 매장 주문을 등록할 수 없다.
      • 숨겨진 메뉴는 주문할 수 없다.
      • 주문한 메뉴의 가격은 실제 메뉴 가격과 일치해야 한다.
    • 주문을 접수한다(accept)
      • 접수 대기 중인 주문만 접수할 수 있다.
      • 배달 주문을 접수되면 배달 대행사를 호출한다.
    • 주문을 서빙한다(serve)
      • 접수된 주문만 서빙할 수 있다.
    • 주문을 배달한다(startDelivery)
      • 배달 주문만 배달할 수 있다.
      • 서빙된 주문만 배달할 수 있다.
    • 주문 배달을 완료한다(completeDelivery)
      • 배달 중인 주문만 배달 완료할 수 있다.
    • 주문을 완료한다(complete)
      • 배달 주문의 경우 배달 완료된 주문만 완료할 수 있다.
      • 포장 및 매장 주문의 경우 서빙된 주문만 완료할 수 있다.
      • 주문 테이블의 모든 매장 주문이 완료되면 빈 테이블로 설정한다.
      • 완료되지 않은 매장 주문이 있는 주문 테이블은 빈 테이블로 설정하지 않는다.
    • 주문을 조회한다(findAll)

About


Languages

Language:Java 100.0%