Code Monkey home page Code Monkey logo

ddd-tactical-design's Introduction

키친포스

요구 사항

상품

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

메뉴 그룹

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

메뉴

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

주문 테이블

  • 주문 테이블을 등록할 수 있다.
  • 주문 테이블의 이름이 올바르지 않으면 등록할 수 없다.
    • 주문 테이블의 이름은 비워 둘 수 없다.
  • 빈 테이블을 해지할 수 있다.
  • 빈 테이블로 설정할 수 있다.
  • 완료되지 않은 주문이 있는 주문 테이블은 빈 테이블로 설정할 수 없다.
  • 방문한 손님 수를 변경할 수 있다.
  • 방문한 손님 수가 올바르지 않으면 변경할 수 없다.
    • 방문한 손님 수는 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 주문에 속하는 수량이 있는 메뉴

모델링

공통

이름(DisplayedName)

  • 이름은 이름 값(name)을 가진다.
  • 이름에는 이름 값이 필수고, 비워둘 수 없다.
  • 이름의 이름 값에는 비속어(profanity)가 포함될 수 없다.
  • 이름은 이름 값을 반환한다.

가격(Price)

  • 가격은 가격 값(price)를 가진다.
  • 가격에는 가격 값이 필수고, 0 미만의 가격 값을 가질 수 없다.
  • 가격은 가격 값을 반환한다.

수량(Quantity)

  • 수량은 수량 값(quantity)를 가진다.
  • 수량에는 수량 값이 필수고, 수량은 0 미만의 수량 값을 가질 수 없다.
  • 수량은 수량 값을 반환한다.

상품

상품(Product)

  • 상품은 식별자(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)을 반환한다.

매장 주문

주문 테이블(OrderTable)

  • 주문 테이블은 식별자(id)와 이름(DisplayedName), 방문한 손님 수(NumberOfGuests), 빈 테이블 여부(isEmpty)를 가진다.
  • 주문 테이블이 빈 테이블이면, 주문을 추가할 수 없다.
  • 주문 테이블은 빈 테이블로 설정(sit)된다.
  • 주문 테이블에 계산 완료(Completed)되지 않은 주문이 있으면, 빈 테이블로 설정되지 않는다.
  • 주문 테이블은 빈 테이블을 해제(clear)된다.
  • 주문 테이블의 방문한 손님 수는 변경(changeNumberOfGuests)된다.
  • 주문 테이블이 빈 테이블이면, 방문한 손님 수는 0이며 변경할 수 없다.

방문한 손님 수(NumberOfGuests)

  • 방문한 손님 수는 방문한 손님 수 값(value)을 가진다.
  • 방문한 손님 수는 0 미만의 방문한 손님 수 값을 가질 수 없다.

주문(Order)

  • 주문은 식별자(id)와 주문 테이블 식별자(OrderTableId), 주문 상태(OrderStatus), 주문 시간(orderDateTime), 주문 항목 목록(OrderLineItems)을 가진다.
  • 주문은 등록된 주문 테이블의 식별자가 필수다.
  • 주문은 주문 테이블 식별자가 빈 테이블의 것이 아니어야 한다.
  • 주문은 주문 항목 목록(OrderLineItems)이 필수다.
  • 주문은 생성될 때, 주문 상태는 접수 대기(Waiting)다.
  • 주문의 주문 상태는 다음 단계로 진행(proceed)된다.
  • 주문이 계산 완료되면, 주문 테이블의 방문한 손님 수(NumberOfGuests)를 0으로 변경하고, 빈 테이블로 설정한다.

주문 상태(OrderStatus)

  • 주문 상태에는 접수 대기(Waiting), 접수(Accepted), 서빙(Served), 계산 완료(Completed)가 있다.
  • 주문 상태는 다음 단계의 주문 상태로 진행(proceed)된다.
  • 접수 대기는 접수로 진행된다.
  • 접수는 서빙으로 진행된다.
  • 서빙은 계산 완료로 진행된다.

주문 항목 목록(OrderLineItems)

  • 주문 항목 목록은 주문 항목(OrderLineItem) 목록을 가진다.
  • 주문 항목 목록은 1개 이상의 주문 항목이 필수다.
  • 주문 항목 목록은 메뉴 별 금액(가격 * 수량)의 합이 0보다 작은 주문 항목 있는지 확인하여 계산 완료 가능 여부를 반환(canBeCompleted)한다.
  • 주문 항목 목록은 주문 항목의 금액의 합을 반환(getAmount)한다.

주문 항목(OrderLineItem)

  • 주문 항목은 메뉴 식별자(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

Contributors

skid901 avatar wotjd243 avatar sah3122 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.