Giter Site home page Giter Site logo

ddd-strategic-design's Introduction

키친포스

요구 사항

상품

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

메뉴 그룹

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

메뉴

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

주문 테이블

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

주문

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

용어 사전

상품

한글명 영문명 설명
상품 Product 메뉴를 구성하는 물품이다.
상품 이름 ProductName 상품의 이름이다. 비속어가 포함될 수 없다.
상품 가격 ProductPrice 상품의 값이다. 0원 이상이다.
상품 등록 register 상품을 등록한다.
상품 가격 변경 changePrice 상품의 가격을 변경한다.

메뉴 그룹

한글명 영문명 설명
메뉴 그룹 MenuGroup 메뉴들을 하나로 묶어서 보여주는 그룹이다.
메뉴 그룹 이름 MenuGroupName 메뉴 그룹의 이름이다.
메뉴 그룹 등록 register 메뉴 그룹을 등록한다.

메뉴

한글명 영문명 설명
메뉴 Menu 여러 개의 상품의 묶음으로, 손님이 주문하는 대상이다. 또한 특정 메뉴 그룹에 속한다.
메뉴 상품 MenuProduct 메뉴에 속한 상품이며, 수량이 0개 이상이고 메뉴 가격의 합이 메뉴의 가격보다 크거나 같아야 한다.
메뉴 가격 MenuPrice 메뉴의 값이다. 0원 이상이다.
메뉴 이름 MenuName 메뉴의 이름이다. 비속어가 포함될 수 없다.
메뉴 등록 register 메뉴를 등록한다.
메뉴 가격 변경 changePrice 메뉴의 가격을 변경한다.
메뉴 노출 display 메뉴를 노출한다. 메뉴의 가격이 메뉴 상품의 수량 * 가격 보다 작거나 같아야 한다.
메뉴 숨김 hide 메뉴를 숨긴다.

주문 테이블

한글명 영문명 설명
주문 테이블 OrderTable 매장식사 주문일 경우, 손님들이 식사를 하고 가는 테이블이다.
주문 테이블 이름 OrderTableName 주문 테이블의 이름이다.
방문 손님 수 NumberOfGuests 주문 테이블을 방문한 손님 수이다. 0명 이상이다.
주문 테이블 등록 register 주문 테이블을 등록한다.
앉다 Sit 테이블에 손님이 앉는 행위
치우다 Clear 테이블을 치우는 행위. 완료되지 않은 주문이 있으면 불가능하다.
주문 테이블 방문 손님 수 변경 changeNumberOfGuests 주문 테이블을 방문한 손님 수를 변경한다. 빈 테이블은 불가능하다.

주문

한글명 영문명 설명
주문 Order 1개 이상의 메뉴를 손님에게 제공하는 것을 뜻한다. 없는 메뉴나 숨겨진 메뉴는 주문할 수 없다.
주문 항목 OrderLineItem 주문의 내용을 뜻하며 메뉴, 가격, 수량을 담고 있다. 배달이나 포장시 수량은 0개 이상이어야 한다. 각 주문 항목의 가격은 메뉴 가격과 일치해야 한다.
주문 유형 OrderType 주문 유형. 배달, 포장, 매장 내 식사 3가지의 경우가 있다.
주문 유형 - 배달 DELIVERY 배달 주소까지 배달해주는 주문이다. 배달 주소가 있어야 주문이 가능하다.
주문 유형 - 포장 TAKEOUT 포장해서 가져갈 수 있는 주문이다.
주문 유형 - 매장 내 식사 EAT_IN 매장 내 주문. 테이블에서 식사하는 주문이다. 손님이 앉아 있는 테이블에 주문이 가능하다.
배달 주소 DeliveryAddress 배달 주문 시, 배달하는 주소다.
주문 등록 register 손님의 주문을 등록한다.
주문 승인 accept 사장님이 접수 대기중인 주문을 접수한다. 배달 주문인 경우, 배달 대행사를 호출한다. 주문 대기 상태여야 한다.
주문 서빙 serve 사장님이 승인된 주문을 서빙한다. 주문 승인 상태여야 한다.
배달 시작 startDelivery 배달 대행사가 배달을 시작한다. 배달 주문이어야 하고 서빙 완료 상태여야 한다.
배달 완료 completeDelivery 배달 대행사가 배달중인 배달 주문을 배달 완료한다. 배달중 상태여야 한다.
주문 완료 complete 주문을 완료한다. 배달 주문이라면 배달 완료 상태여야 하고 포장이나 매장식사 주문인 경우 서빙 완료 상태여야 한다.
주문 상태 OrderStatus 주문상태. 대기, 승인, 서빙 완료, 배달중, 배달 완료, 완료 상태가 있다
주문 상태 - 대기 WAITING 손님이 주문한 직후의 상태
주문 상태 - 승인 ACCEPTED 대기주문을 매장에서 승인한 상태
주문 상태 - 서빙 완료 SERVED 주문 유형이 포장 혹은 매장 내 식사인 경우 상품이 손님에게 전달 된 상태, 주문 유형이 배달인 경우 상품이 준비된 상태
주문 상태 - 배달중 DELIVERING 주문 유형이 배달인경우 배달이 출발한 상태
주문 상태 - 배달 완료 DELIVERED 주문 유형이 배달인경우 배달이 완료된 상태
주문 상태 - 주문 완료 COMPLETED 주문이 완료된 상태

기타

한글명 영문명 설명
비속어 Profanity 필터링 해야하는 단어
배달기사 Kitchen Riders 배달을 대행해주는 라이더

모델링

상품(Product)

속성

  • 손님에게 노출되는 name을 가진다.
  • 상품의 가격인 price를 가진다.

기능/조건

  • 상품을 등록할 수 있다(create).
    • price는 0원 이상이어야 한다.
    • name은 비워 둘 수 없다.
    • namePurgoMalumClient를 통해 비속어(profanity)를 필터링 한다.
  • 상품의 가격을 변경할 수 있다(changePrice).
    • 변경되는 price는 0원 이상이어야 한다.
    • 변경 후 메뉴에 속한 상품(menuProduct)금액의 합보다 메뉴(menu)의 가격이 크면 메뉴가 숨겨진다(hide).
  • 상품의 목록을 조회할 수 있다.(findAll)

메뉴 그룹(MenuGroup)

속성

  • 손님에게 노출되는 name을 가진다.

기능/조건

  • 메뉴 그룹을 등록할 수 있다(create).
    • name은 비워 둘 수 없다.
    • namePurgoMalumClient를 통해 비속어(profanity)를 필터링 한다.
  • 메뉴 그룹의 목록을 조회할 수 있다(findAll).

메뉴(Menu)

속성

  • 손님에게 노출되는 name을 가진다.
  • 손님이 지불해야하는 price를 가진다.
  • 자신이 속한 menuGroup을 가진다.
  • 자신이 속한 메뉴 그룹을 식별하기 위한 menuGroupId를 가진다.
  • 자신의 노출 여부를 나타내는 displayed를 가진다.
  • 자신에게 속한 상품들인 menuProducts를 가진다.
    • menuProductproduct를 가진다.
    • menuProduct는 상품을 식별하기 위한 productId를 가진다.
    • menuProduct는 상품의 갯수(quantity)를 가진다.

기능/조건

  • 메뉴를 등록할 수 있다(create).
    • 메뉴를 등록하려면 등록된 product가 1개 이상이어야 한다.
    • menuProductquantity는 0 이상이어야 한다.
    • 메뉴의 price는 0원 이상이어야 한다.
    • menuProduct금액의 총합은 메뉴의 price보다 크거나 같아야 한다.
    • 메뉴는 특정 menuGroup에 속해야 한다.
    • 메뉴의 name은 비워둘 수 없다.
    • 메뉴의 namePurgoMalumClient를 통해 비속어(profanity)를 필터링 한다.
  • 메뉴의 가격을 변경할 수 있다(changePrice).
    • 변경 후 메뉴의 price는 0원 이상이어야 한다.
    • 변경 후 menuProduct금액의 총합은 메뉴의 price보다 크거나 같아야 한다.
  • 메뉴를 노출할 수 있다(display).
    • 메뉴의 pricemenuProduct금액의 총합 보다 높을 경우 노출할 수 없다.
  • 메뉴를 숨길 수 있다(hide).
  • 메뉴의 목록을 조회할 수 있다(findAll).

주문 테이블(OrderTable)

속성

  • 주문 테이블의 이름인 name을 가진다.
  • 주문 테이블의 앉은 손님 수를 뜻하는 numberOfGuests를 가진다.
  • 주문 테이블은 테이블이 비워져있는지를 나타내는 상태인 empty를 가진다.

기능/조건

  • 주문 테이블을 등록할 수 있다(create).
    • name은 비워 둘 수 없다.
    • nameprofanity가 포함될 수 없다.
      • PurgoMalumClient가 비속어를 필터링 한다.
  • 빈 테이블을 해지할 수 있다(sit).
  • 빈 테이블로 설정할 수 있다(clear).
    • 주문 테이블의 orderStatusCOMPLETED가 아니라면 설정할 수 없다.
  • 방문한 손님 수를 변경할 수 있다(changeNumberOfGuests).
    • numberOfGuests는 0 이상이어야 한다.
    • empty상태의 주문 테이블은 numberOfGuests를 변경할 수 없다.
  • 주문 테이블의 목록을 조회할 수 있다(findAll).

주문(Order)

속성

  • 주문은 어떤 주문인지 타입을 나타내는 orderType을 가진다.
    • 배달 주문은 DELIVERY타입이다.
    • 포장 주문은 TAKEOUT타입이다.
    • 매장 주문은 EAT_IN타입이다.
  • 주문은 현재 상태를 나타내는 orderStatus를 가진다.
    • 주문이 대기 중이라면 WAITING상태이다.
    • 주문이 승인되었다면 ACCEPTED상태이다.
    • 주문이 서빙되었다면 SERVED상태이다.
    • 주문이 배달 중이라면 DELIVERING상태이다.
    • 주문이 배달되었다면 DELIVERED상태이다.
    • 주문이 완료되었다면 COMPLETED상태이다.
  • 주문은 주문 일시를 나타내는 orderDateTime을 가진다.
  • 배달 주문은 배달할 주소를 나타내는 deliveryAddress를 가질 수 있다.
  • 주문은 주문 항목들(orderLineItems) 를 가진다.
    • orderLineItem은 주문한 menu를 가진다.
    • orderLineItem은 주문한 메뉴를 식별하기 위한 menuId를 가진다.
    • orderLineItem은 주문 항목 수량(quantity) 를 가진다.
    • orderLineItem은 주문의 price를 가진다.

기능/조건

  • 주문을 등록할 수 있다(create).
    • 1개 이상의 등록된 menu로 주문을 등록할 수 있다.
    • menu가 없는 주문은 등록할 수 없다.
    • orderType이 올바르지 않으면 등록할 수 없다.
    • orderStatus가 올바르지 않으면 등록할 수 없다.
    • EAT_IN타입의 주문은 orderLineItemquantity가 0 미만일 수 있다.
    • EAT_IN을 제외한 타입의 주문은 orderLineItemquantity가 0 이상이어야 한다.
    • deliveryAddress가 비워져 있다면, DELIVERY주문을 등록할 수 없다.
    • empty테이블에는 EAT_IN타입의 주문을 등록할 수 없다.
    • 숨겨진 메뉴는 주문할 수 없다.
    • 주문한 메뉴의 priceorderLineItemprice는 일치해야한다.
  • 주문을 승인할 수 있다(accept).
    • WAITING상태의 주문만 접수 할 수 있다.
    • DELIVERY타입의 주문을 접수하면, 배달기사(kitchenRiders) 를 호출한다.
  • 주문을 서빙할 수 있다(serve).
    • ACCEPTED상태의 주문만 서빙할 수 있다.
  • 주문의 배달을 시작할 수 있다(startDelivery).
    • DELIVERY타입이고, SERVED상태의 주문만 배달할 수 있다.
    • 배달기사(kitchenRiders)가 주문의 배달을 수행한다.
  • 주문의 배달을 완료할 수 있다(completeDelivery).
    • DELIVERING상태의 주문만 배달 완료할 수 있다.
  • 주문을 완료할 수 있다(complete).
    • DELIVERY타입의 주문일 경우, DELIVERED상태의 주문만 완료할 수 있다.
    • TAKEOUT혹은 EAT_IN타입 주문일 경우, SERVED상태의 주문만 완료할 수 있다.
    • orderTable의 모든 매장 주문이 완료되면 empty테이블로 설정한다.
    • COMPLETED상태가 아닌 매장 주문이 있는 주문 테이블은 empty테이블로 설정할 수 없다.
  • 주문 목록을 조회할 수 있다(findAll).

ddd-strategic-design's People

Contributors

jonny-cho 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.