Git Product home page Git Product logo

ddd-strategic-design's Introduction

키친포스

요구 사항

상품

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

메뉴 그룹

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

메뉴

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

주문 테이블

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

주문

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

용어 사전

상품

한글명 영문명 설명
상품 Product 매장에서 관리되는 음식의 최소 단위. 가격과 이름을 가진다.

메뉴 그룹

한글명 영문명 설명
메뉴 그룹 Menu Group 메뉴의 묶음. 하나 이상의 메뉴를 포함한다.

메뉴

한글명 영문명 설명
메뉴 Menu 한 개 이상의 메뉴 항목으로 구성된 주문의 단위로 하나의 메뉴 그룹에 속한다
노출된 메뉴 Displayed Menu 주문할 수 있는 상태인 메뉴
숨겨진 메뉴 Hidden Menu 주문할 수 없는 상태인 메뉴
메뉴 항목 Menu Line Item 상품과 상품의 수량으로 나타낸 메뉴의 구성요소

주문 테이블

한글명 영문명 설명
주문 테이블 Order Table 매장 식사 타입의 주문이 묶일 수 있는 단위 손님이 앉을 수 있는 테이블
빈 테이블 Empty Order Table 손님이 없는 주문 테이블
사용 중인 테이블 Order Table In Use 손님이 사용 중인 주문 테이블
방문한 손님 수 Number of Guests 주문 테이블을 사용 중인 손님의 수

주문

한글명 영문명 설명
주문 Order 한 개 이상의 주문 항목으로 구성된 주문할 수 있는 단위.
주문 항목 Order Line Item 메뉴와 메뉴의 수량으로 나타낸 주문의 구성요소
주문 항목의 수량 Quantity of Order Line Item 주문 항목의 메뉴의 수량으로 매장 식사인 경우 0 미만일 수 있다.
주문 종류 Order Type 주문은 포장, 매장 식사, 배달로 종류가 나뉜다.
배달 Delivery 손님의 주소지로 주문한 메뉴를 배달대행사를 통해 배달해준다.
포장 Take out 손님이 매장에 와서 직접 주문한 메뉴를 수령한다.
매장 식사 Eat In 손님이 주문한 메뉴를 주문 테이블에서 식사한다.
주문 상태 Order Status 주문이 진행되는 상태
접수 대기, 접수, 서빙, 배달, 배달 완료, 주문 완료
접수 대기 Waiting 손님의 주문을 사장님이 확인하지 않은 상태
접수 Accepted 사장님이 주문을 확인한 상태
서빙 Served 메뉴가 전달 된 상태
배달 중 Delivering 서빙된 메뉴를 배달 주문한 손님에게 배달 중인 상태
배달 완료 Delivered 배달이 완료된 상태
주문 완료 Done 주문이 완료된 상태

배달

한글명 영문명 설명
배달 대행사 Delivery Agency 대신 배달해주는 회사
배달 주소 Delivery Address 배달 주문이 도착되어야 하는 주소

공통

한글명 영문명 설명
금액 Amount 상품 또는 메뉴 가격과 수량을 곱한 금액
가격 Price 상품 또는 메뉴 하나의 가격
비속어 Profanity 부적절한 언어로 상품, 메뉴 이름과 같은 곳에 포함될 수 없다.

모델링

Product (상품)

속성

  • name(이름),price(가격)을 가진다.

행위

  • register (추가할 수 있다)
    • name(이름)은 공백이거나 비속어를 포함할 수 없다.
    • price(가격) 0원 이상이어야 한다.
  • changePrice (가격을 변경할 수 있다)
    • 변경될 Menu(메뉴)price(가격)Menu(메뉴)에 속한 MenuProduct(메뉴 항목)price(가격)의 합보다 크면 Menu(메뉴)hide(숨겨진다.)

Menu Group (메뉴 그룹)

속성

  • name(이름)을 가진다.

행위

  • register (등록할 수 있다)
    • name(이름)은 공백일 수 없다.

Menu (메뉴)

속성

  • 1개 이상의 menuProduct(메뉴 항목) 포함해야 한다.
  • name(이름), price(가격) 을 가진다.
  • 반드시 특정 menuGroup(메뉴 그룹)에 속해야 한다.

행위

  • register (등록할 수 있다)
    • name(이름)은 공백이거나 비속어를 포함할 수 없다.
    • price(가격)은 0원 이상이어야 하며 menuProduct(메뉴 항목)들의 price(가격)의 합은 Menu(메뉴)price(가격)보다 크거나 같아야 한다.
    • menuGroup (메뉴 그룹)이 존재하지 않는다면 추가할 수 없다.
  • changePrice (가격을 변경할 수 있다)
    • 변경할 price(가격)은 0원 이상이어야 하며 menuProduct(메뉴 항목)들의 price(가격)의 합은 Menu(메뉴)price(가격)보다 크거나 같아야 한다.
  • display (노출할 수 있다)
    • price(가격)menuProduct(메뉴 항목)들의 price(가격)의 합보다 큰 경우 노출할 수 없다.
  • hide (숨길 수 있다)

Menu Product (메뉴 항목)

속성

  • product (상품),quantity (수량)을 포함한다.

행위

  • calculateAmount (금액을 계산할 수 있다)

Order Table (주문 테이블)

속성

  • name (이름)numberOfGuests (방문한 손님 수) 을 가진다.

행위

  • register (등록할 수 있다)
    • name(이름)은 공백일 수 없다.
  • empty (빈 테이블로 설정할 수 있다)
    • 완료되지 않은 주문이 있는 주문 테이블은 빈 테이블로 설정할 수 없다.
  • inUse (빈 테이블을 해지할 수 있다)
  • changeNumberOfGuests (손님 수를 변경할 수 있다.)
    • 빈 테이블은 변경할 수 없다.

Order (주문)

속성

  • type(종류) 가 있다.
    • type(종류)에는 takeOut(포장), eatIn(매장), delivery(배달)이 있다.
  • 1개 이상의 orderLineItem (주문 항목)을 포함해야 한다.
  • status (상태)가 있다.
    • waiting(접수 대기), accepted(접수), served(서빙됨), Delivering(배달중), delivered(배달 완료), done(완료) 가 있다.
  • eatIn(매장)인 경우 orderTable (주문 테이블)를 가진다.
  • Delivery(배달)인 경우 deliveryAddress (배달 주소)를 가진다.
  • 하나 이상의 orderLineItem(주문항목)을 가진다.

행위

  • register (등록할 수 있다)

    • type(종류)가 올바르지 않으면 등록할 수 없다.
    • hideMenu(숨겨진 메뉴)는 주문할 수 없다.
    • orderLineItem(주문항목)menu (메뉴)price(가격)은 실제 menu (메뉴)price(가격)과 일치해야 한다.
    • deliveryAddress(배달 주소)가 올바르지 않으면 Delivery(배달)을 등록할 수 없다.
    • TakeOut(포장), Delivery(배달)의 경우 orderLineItem(주문 항목)menu(메뉴)quantity(수량)은 0 이상이어야 한다.
    • emptyTable(빈 테이블)에는 EatIn(매장)을 등록할 수 없다.
    • EatIn(매장)인 경우 orderLineItem(주문 항목)menu(메뉴)quantity(수량)이 0 미만일 수 있다.
  • accept (접수한다)

    • waiting(접수 대기) 중인 주문만 접수할 수 있다.
    • delivery(배달) 주문을 접수되면 배달 대행사를 호출한다.
  • serve(서빙한다)

    • accepted(접수)된 주문만 서빙할 수 있다.
  • delivery (배달한다)

    • delivery(배달) 주문만 배달할 수 있다.
    • served(서빙됨) 주문만 배달할 수 있다.
  • delivered (배달 완료한다)

    • Delivering(배달 중)인 주문만 배달 완료할 수 있다.
  • done (완료한다)

    • 주문 테이블의 모든 주문이 완료되었으면 빈 테이블로 설정한다.

Order Line Item (주문 항목)

속성

  • menu (메뉴)
  • quantity (메뉴 수량)

행위

  • calculateAmount (금액을 계산할 수 있다)

ddd-strategic-design's People

Contributors

hyunssooo avatar wotjd243 avatar

Watchers

James Cloos 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.