키친포스

요구 사항

메뉴 그룹(MenuGroup)

  • 메뉴 그룹을 생성할 수 있다.(POST /api/menu-groups)
  • 전체 메뉴 그룹을 조회할 수 있다.(GET /api/menu-groups)

상품(Product)

  • 상품을 등록할 수 있다.(POST /api/products)
    • 상품의 가격이 올바르지 않으면 상품을 등록할 수 없다.
      • 상품 가격은 0 이상이어야 한다.
  • 전체 상품을 조회할 수 있다.(GET /api/products)

메뉴(Menu)

  • 메뉴를 등록할 수 있다(POST /api/menus)
    • 메뉴의 가격이 올바르지 않으면 메뉴를 등록할 수 없다.
      • 메뉴의 가격은 0 이상이어야 한다.
      • 등록하려는 메뉴의 가격은 메뉴를 구성하는 실제 제품들을 단품으로 주문하였을 때의 가격 합과 같거나 작아야한다.
    • 등록하려는 메뉴 그룹이 올바르지 않으면 메뉴를 등록할 수 없다.
      • 메뉴 그룹은 존재해야 한다.
    • 메뉴를 구성하는 실제 제품의 데이터(Product) 목록이 올바르지 않으면 메뉴를 등록할 수 없다.
      • 목록에 포함된 데이터들은 존재해야 한다.
  • 전체 메뉴를 조회할 수 있다(GET /api/menus)

주문 테이블(OrderTable)

  • 테이블을 생성할 수 있다.(POST /api/tables)
    • 테이블 생성 직후에는 아무 그룹에도 속해있지 않아야한다.
  • 전체 테이블을 조회할 수 있다.(GET /api/tables)
  • 테이블이 비어있는지를 나타내는 상태를 수정할 수 있다.(PUT /api/tables/{orderTableId}/empty)
    • 빈 상태를 수정하려는 테이블이 올바르지 않으면 상태를 변경할 수 없다.
      • 테이블은 존재해야 한다.
      • 테이블은 그룹에 속해있지 않아야한다.
      • 테이블이 조리중(COOKING)이나 식사중(MEAL)이면 빈 상태를 변경할 수 없다.
  • 주문 테이블의 손님 수를 변경한다.(PUT /api/tables/{orderTableId}/number-of-guests)
    • 변경하려는 손님의 수가 올바르지 않으면 손님 수를 변경할 수 없다.
      • 손님의 수는 0 이상이어야 한다.
    • 손님 수를 변경하려는 테이블이 올바르지 않으면 손님 수를 변경할 수 없다.
      • 테이블은 존재해야 한다.
      • 테이블은 비어있지 않아야한다.

주문(Order)

  • 주문을 등록할 수 있다.(POST /api/orders)
    • 주문하려는 메뉴 목록이 올바르지 않으면 주문을 등록할 수 없다.
      • 메뉴 목록은 하나이상 있어야한다.
      • 메뉴 목록에 포함된 메뉴들은 모두 등록된 메뉴여야한다.
    • 주문하려는 테이블이 올바르지 않으면 주문을 등록할 수 없다.
      • 테이블은 존재해야 한다.
      • 테이블은 비어있지 않아야한다.
    • 주문이 등록되면 해당 주문은 조리중(COOKING) 상태가 된다.
  • 전체 주문을 조회할 수 있다.(GET /api/orders)
  • 주문 상태를 변경할 수 있다.(PUT /api/orders/{orderId}/order-status)
    • 주문이 올바르지 않으면 주문 상태를 변경할 수 없다.
      • 주문은 존재해야 한다.
      • 주문 상태는 조리중(COOKING)이나 식사중(MEAL)이어야한다.

단체 지정(TableGroup)

  • 테이블을 묶어 그룹을 지정할 수 있다.(POST /api/table-groups)
    • 그룹을 지정하려는 테이블 목록이 올바르지 않으면 그룹으로 지정할 수 없다.
      • 목록에 둘 이상의 테이블이 포함되어야한다.
      • 목록에 포함된 테이블들은 모두 등록된 테이블이여야 한다.
      • 목록에 포함된 테이블들은 모두 비어있어야 한다.
      • 목록에 포함된 테이블들은 모두 소속된 다른 그룹이 없어야한다.
    • 그룹이 지정된 테이블들은 비어 있지 않은 상태가 된다.
  • 묶여있는 테이블 그룹을 해제할 수 있다.(DELETE /api/table-groups/{tableGroupId})
    • 그룹에 속한 테이블 목록이 올바르지 않으면 그룹을 해제할 수 없다.
      • 목록에 포함된 테이블들의 상태가 하나라도 조리중(COOKING)이나 식사중(MEAL)인 경우 그룹을 해제할 수 없다.
    • 그룹이 해제된 테이블들은 비어 있지 않은 상태가 된다.

용어 사전

한글명 영문명 설명
상품 product 메뉴를 관리하는 기준이 되는 데이터
메뉴 그룹 menu group 메뉴 묶음, 분류
메뉴 menu 메뉴 그룹에 속하는 실제 주문 가능 단위
메뉴 상품 menu product 메뉴에 속하는 수량이 있는 상품
금액 amount 가격 * 수량
주문 테이블 order table 매장에서 주문이 발생하는 영역
빈 테이블 empty table 주문을 등록할 수 없는 주문 테이블
주문 order 매장에서 발생하는 주문
주문 상태 order status 주문은 조리 ➜ 식사 ➜ 계산 완료 순서로 진행된다.
방문한 손님 수 number of guests 필수 사항은 아니며 주문은 0명으로 등록할 수 있다.
단체 지정 table group 통합 계산을 위해 개별 주문 테이블을 그룹화하는 기능
주문 항목 order line item 주문에 속하는 수량이 있는 메뉴
매장 식사 eat in 포장하지 않고 매장에서 식사하는 것