메뉴

상품

  • 가게 담당자가 메뉴를 등록/수정/상태변경 한다.
  • 메뉴에는 가게 식별자, 이름, 가격, 옵션 그룹, 주문 가능 여부가 있다.
  • 옵션 그룹에는 상세 옵션들이 있고 상세 옵션의 필수 선택 여부 최대 선택 개수에 대한 정보가 있다.
public class Menu {
    private Long id;
    private String name;
    private long storeId;
    private long price;
    private boolean orderable;
    private List<OptionGroup> optionGroups;

    private Menu(String name, long storeId, long price, boolean orderable, OptionGroup... optionGroups) {
        this.name = name;
        this.storeId = storeId;
        this.price = price;
        this.orderable = orderable;
        this.optionGroups = Arrays.asList(optionGroups);
    }

    /** 주문 가능하게 설정 */
    public void changeOrderable(long storeId) {
        orderable = true;
    }
    /** 주문 불가능하게 설정 */
    public void changeUnorderable(long storeId) {
        orderable = false;
    }
}

public class OptionGroup {
    private Long id;
    private String name;
    private long price;
    private boolean isRequired;
    private Integer limitQuantity;  // null is unlimited
    private List<OptionItem> OptionItems;
}

public class OptionItem {
    private Long id;
    private String name;
    private long price;
}