From 0dde2fb3a0120d9f4d8df012532df63ef09d2ae1 Mon Sep 17 00:00:00 2001 From: jonghwanlee Date: Tue, 26 Nov 2024 13:47:49 +0900 Subject: [PATCH 01/19] =?UTF-8?q?docs(README):=20README.md=20=EC=B4=88?= =?UTF-8?q?=EC=95=88=20=EC=9E=91=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/README.md | 84 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 84 insertions(+) diff --git a/docs/README.md b/docs/README.md index e69de29..1f71e8b 100644 --- a/docs/README.md +++ b/docs/README.md @@ -0,0 +1,84 @@ +# Christmas + +### 프로그램 구성 + +#### 메뉴 + +``` +<애피타이저> +양송이수프(6,000), 타파스(5,500), 시저샐러드(8,000) + +<메인> +티본스테이크(55,000), 바비큐립(54,000), 해산물파스타(35,000), 크리스마스파스타(25,000) + +<디저트> +초코케이크(15,000), 아이스크림(5,000) + +<음료> +제로콜라(3,000), 레드와인(60,000), 샴페인(25,000) +``` + +#### 달력 + +![](../image.png) + +#### 12월 이벤트 계획 + +- 크리스마스 디데이 할인 + - [ ] 이벤트 기간: 2023.12.1 ~ 2023.12.25 + - [ ] 1,000원으로 시작하여 크리스마스가 다가올수록 날마다 할인 금액이 100원씩 증가 + - [ ] 총주문 금액에서 해당 금액만큼 할인 + (e.g. 시작일인 12월 1일에 1,000원, 2일에 1,100원, ..., 25일엔 3,400원 할인) +- [ ] 평일 할인(일요일~목요일): 평일에는 디저트 메뉴를 메뉴 1개당 2,023원 할인 +- [ ] 주말 할인(금요일, 토요일): 주말에는 메인 메뉴를 메뉴 1개당 2,023원 할인 +- [ ] 특별 할인: 이벤트 달력에 별이 있으면 총주문 금액에서 1,000원 할인 +- [ ] 증정 이벤트: 할인 전 총주문 금액이 12만 원 이상일 때, 샴페인 1개 증정 +- [ ] 이벤트 기간: '크리스마스 디데이 할인'을 제외한 다른 이벤트는 2023.12.1 ~ 2023.12.31 동안 적용 + +#### 혜택 금액에 따른 12월 이벤트 배지 부여 + +- [ ] 총혜택 금액에 따라 다른 이벤트 배지를 부여합니다. 이 배지는 2024 새해 이벤트에서 활용할 예정입니다. + 배지에 따라 새해 이벤트 참여 시, 각각 다른 새해 선물을 증정할 예정입니다. + - 5천 원 이상: 별 + - 1만 원 이상: 트리 + - 2만 원 이상: 산타 + +#### 고객에게 안내할 이벤트 주의 사항 + +- [ ] 총주문 금액 10,000원 이상부터 이벤트가 적용 +- [ ] 음료만 주문 시, 주문 불가 +- [ ] 메뉴는 한 번에 최대 20개까지만 주문 가능 + (e.g. 시저샐러드-1, 티본스테이크-1, 크리스마스파스타-1, 제로콜라-3, 아이스크림-1의 총개수는 7개) + + +### 프로그램 Work Flow + +- [ ] 이벤트 플래너 안내 문구 출력 +- [ ] 예상 방문 날짜 입력 안내 문구 출력 +- [ ] 올바르지 않은 값 입력 시 에러 메세지 출력 후 재입력 받음 + - [ ] 방문할 날짜는 1 이상 31 이하의 숫자로만 입력받 + - [ ] 1 이상 31 이하의 숫자가 아닌 경우, "[ERROR] 유효하지 않은 날짜입니다. 다시 입력해 주세요."라는 에러 메시지 출력 + - [ ] 모든 에러 메시지는 "[ERROR]"로 시작하도록 작성 + + +- [ ] 주문할 메뉴와 개수 입력 안내 문구 출력 +- [ ] 올바르지 않은 값 입력 시 에러 메세지 출력 후 재입력 받음 + - [ ] 고객이 메뉴판에 없는 메뉴를 입력하는 경우, "[ERROR] 유효하지 않은 주문입니다. 다시 입력해 주세요."라는 에러 메시지 출력 + - [ ] 메뉴의 개수는 1 이상의 숫자만 입력. 이외의 입력값은 "[ERROR] 유효하지 않은 주문입니다. 다시 입력해 주세요."라는 에러 메시지 출력 + - [ ] 메뉴 형식이 예시와 다른 경우, "[ERROR] 유효하지 않은 주문입니다. 다시 입력해 주세요."라는 에러 메시지 출력 + - [ ] 중복 메뉴를 입력한 경우(e.g. 시저샐러드-1,시저샐러드-1), "[ERROR] 유효하지 않은 주문입니다. 다시 입력해 주세요."라는 에러 메시지 출력 + - [ ] 모든 에러 메시지는 "[ERROR]"로 시작하도록 작성 + + +- [ ] 주문 결과 출력 + - [ ] 미리보기 안내문 출력 + - [ ] 주문 메뉴 종류 및 갯수 출력 + - [ ] 할인 전 총 주문금액 출력 + - [ ] 증정 메뉴 출력 + - [ ] 없을 시 "없음" 출력 + - [ ] 혜택 내역 출력 + - [ ] 없을 시 "없음" 출력 + - [ ] 총혜택 금액 출력 + - [ ] 할인 후 예상 결제 금액 출력 + - [ ] 12월 이벤트 배지 출력 + \ No newline at end of file From ddb4f483e0215fc7938925c18b0d6bc848291c83 Mon Sep 17 00:00:00 2001 From: jonghwanlee Date: Tue, 26 Nov 2024 18:45:15 +0900 Subject: [PATCH 02/19] =?UTF-8?q?chore:=20=ED=94=84=EB=A1=9C=EA=B7=B8?= =?UTF-8?q?=EB=9E=A8=20=EA=B5=AC=EC=A1=B0=20=EC=84=A4=EA=B3=84=20=EB=B0=8F?= =?UTF-8?q?=20=ED=95=84=EC=9A=94=ED=95=9C=20=EB=B9=88=20=ED=8C=8C=EC=9D=BC?= =?UTF-8?q?=20=EC=83=9D=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/christmas/config/AppConfig.java | 4 ++++ src/main/java/christmas/controller/eventController.java | 5 +++++ src/main/java/christmas/domain/event/DiscountProcessor.java | 4 ++++ src/main/java/christmas/domain/event/Gift.java | 4 ++++ src/main/java/christmas/domain/event/impl/BadgeGift.java | 6 ++++++ .../java/christmas/domain/event/impl/ChampagneGift.java | 6 ++++++ src/main/java/christmas/domain/event/impl/DDayDiscount.java | 6 ++++++ .../java/christmas/domain/event/impl/SpecialDiscount.java | 6 ++++++ .../java/christmas/domain/event/impl/WeekdaysDiscount.java | 6 ++++++ .../java/christmas/domain/event/impl/WeekendDiscount.java | 6 ++++++ src/main/java/christmas/domain/menu/Dish.java | 4 ++++ src/main/java/christmas/domain/menu/Dishes.java | 4 ++++ src/main/java/christmas/domain/menu/impl/Appetizer.java | 6 ++++++ src/main/java/christmas/domain/menu/impl/Beverage.java | 6 ++++++ src/main/java/christmas/domain/menu/impl/Dessert.java | 6 ++++++ src/main/java/christmas/domain/menu/impl/MainDish.java | 6 ++++++ src/main/java/christmas/domain/menu/impl/Menu.java | 6 ++++++ src/main/java/christmas/domain/reservation/Reservation.java | 4 ++++ src/main/java/christmas/exception/ErrorMessage.java | 4 ++++ .../java/christmas/repository/ReservationRepository.java | 4 ++++ .../christmas/repository/ReservationRepositoryImpl.java | 4 ++++ .../java/christmas/service/AcceptReservationService.java | 4 ++++ .../christmas/service/AcceptReservationServiceImpl.java | 4 ++++ src/main/java/christmas/service/ProcessEventService.java | 4 ++++ .../java/christmas/service/ProcessEventServiceImpl.java | 4 ++++ src/main/java/christmas/utils/InputParser.java | 4 ++++ src/main/java/christmas/utils/InputValidator.java | 4 ++++ src/main/java/christmas/utils/impl/DateToVisitParser.java | 6 ++++++ .../java/christmas/utils/impl/DateToVisitValidator.java | 6 ++++++ src/main/java/christmas/utils/impl/OrderParser.java | 6 ++++++ src/main/java/christmas/utils/impl/OrderValidator.java | 6 ++++++ src/main/java/christmas/view/InputView.java | 4 ++++ src/main/java/christmas/view/OutputView.java | 4 ++++ src/main/java/christmas/view/impl/ConsoleInputView.java | 6 ++++++ src/main/java/christmas/view/impl/ConsoleOutputView.java | 6 ++++++ 35 files changed, 175 insertions(+) create mode 100644 src/main/java/christmas/config/AppConfig.java create mode 100644 src/main/java/christmas/controller/eventController.java create mode 100644 src/main/java/christmas/domain/event/DiscountProcessor.java create mode 100644 src/main/java/christmas/domain/event/Gift.java create mode 100644 src/main/java/christmas/domain/event/impl/BadgeGift.java create mode 100644 src/main/java/christmas/domain/event/impl/ChampagneGift.java create mode 100644 src/main/java/christmas/domain/event/impl/DDayDiscount.java create mode 100644 src/main/java/christmas/domain/event/impl/SpecialDiscount.java create mode 100644 src/main/java/christmas/domain/event/impl/WeekdaysDiscount.java create mode 100644 src/main/java/christmas/domain/event/impl/WeekendDiscount.java create mode 100644 src/main/java/christmas/domain/menu/Dish.java create mode 100644 src/main/java/christmas/domain/menu/Dishes.java create mode 100644 src/main/java/christmas/domain/menu/impl/Appetizer.java create mode 100644 src/main/java/christmas/domain/menu/impl/Beverage.java create mode 100644 src/main/java/christmas/domain/menu/impl/Dessert.java create mode 100644 src/main/java/christmas/domain/menu/impl/MainDish.java create mode 100644 src/main/java/christmas/domain/menu/impl/Menu.java create mode 100644 src/main/java/christmas/domain/reservation/Reservation.java create mode 100644 src/main/java/christmas/exception/ErrorMessage.java create mode 100644 src/main/java/christmas/repository/ReservationRepository.java create mode 100644 src/main/java/christmas/repository/ReservationRepositoryImpl.java create mode 100644 src/main/java/christmas/service/AcceptReservationService.java create mode 100644 src/main/java/christmas/service/AcceptReservationServiceImpl.java create mode 100644 src/main/java/christmas/service/ProcessEventService.java create mode 100644 src/main/java/christmas/service/ProcessEventServiceImpl.java create mode 100644 src/main/java/christmas/utils/InputParser.java create mode 100644 src/main/java/christmas/utils/InputValidator.java create mode 100644 src/main/java/christmas/utils/impl/DateToVisitParser.java create mode 100644 src/main/java/christmas/utils/impl/DateToVisitValidator.java create mode 100644 src/main/java/christmas/utils/impl/OrderParser.java create mode 100644 src/main/java/christmas/utils/impl/OrderValidator.java create mode 100644 src/main/java/christmas/view/InputView.java create mode 100644 src/main/java/christmas/view/OutputView.java create mode 100644 src/main/java/christmas/view/impl/ConsoleInputView.java create mode 100644 src/main/java/christmas/view/impl/ConsoleOutputView.java diff --git a/src/main/java/christmas/config/AppConfig.java b/src/main/java/christmas/config/AppConfig.java new file mode 100644 index 0000000..3f45c4e --- /dev/null +++ b/src/main/java/christmas/config/AppConfig.java @@ -0,0 +1,4 @@ +package christmas.config; + +public class AppConfig { +} diff --git a/src/main/java/christmas/controller/eventController.java b/src/main/java/christmas/controller/eventController.java new file mode 100644 index 0000000..30358c4 --- /dev/null +++ b/src/main/java/christmas/controller/eventController.java @@ -0,0 +1,5 @@ +package christmas.controller; + +public class eventController +{ +} diff --git a/src/main/java/christmas/domain/event/DiscountProcessor.java b/src/main/java/christmas/domain/event/DiscountProcessor.java new file mode 100644 index 0000000..beaa569 --- /dev/null +++ b/src/main/java/christmas/domain/event/DiscountProcessor.java @@ -0,0 +1,4 @@ +package christmas.domain.event; + +public interface DiscountProcessor { +} diff --git a/src/main/java/christmas/domain/event/Gift.java b/src/main/java/christmas/domain/event/Gift.java new file mode 100644 index 0000000..725951f --- /dev/null +++ b/src/main/java/christmas/domain/event/Gift.java @@ -0,0 +1,4 @@ +package christmas.domain.event; + +public interface Gift { +} diff --git a/src/main/java/christmas/domain/event/impl/BadgeGift.java b/src/main/java/christmas/domain/event/impl/BadgeGift.java new file mode 100644 index 0000000..0274cab --- /dev/null +++ b/src/main/java/christmas/domain/event/impl/BadgeGift.java @@ -0,0 +1,6 @@ +package christmas.domain.event.impl; + +import christmas.domain.event.Gift; + +public class BadgeGift implements Gift { +} diff --git a/src/main/java/christmas/domain/event/impl/ChampagneGift.java b/src/main/java/christmas/domain/event/impl/ChampagneGift.java new file mode 100644 index 0000000..21d1ee7 --- /dev/null +++ b/src/main/java/christmas/domain/event/impl/ChampagneGift.java @@ -0,0 +1,6 @@ +package christmas.domain.event.impl; + +import christmas.domain.event.Gift; + +public class ChampagneGift implements Gift { +} diff --git a/src/main/java/christmas/domain/event/impl/DDayDiscount.java b/src/main/java/christmas/domain/event/impl/DDayDiscount.java new file mode 100644 index 0000000..4f09516 --- /dev/null +++ b/src/main/java/christmas/domain/event/impl/DDayDiscount.java @@ -0,0 +1,6 @@ +package christmas.domain.event.impl; + +import christmas.domain.event.DiscountProcessor; + +public class DDayDiscount implements DiscountProcessor { +} diff --git a/src/main/java/christmas/domain/event/impl/SpecialDiscount.java b/src/main/java/christmas/domain/event/impl/SpecialDiscount.java new file mode 100644 index 0000000..8025896 --- /dev/null +++ b/src/main/java/christmas/domain/event/impl/SpecialDiscount.java @@ -0,0 +1,6 @@ +package christmas.domain.event.impl; + +import christmas.domain.event.DiscountProcessor; + +public class SpecialDiscount implements DiscountProcessor { +} diff --git a/src/main/java/christmas/domain/event/impl/WeekdaysDiscount.java b/src/main/java/christmas/domain/event/impl/WeekdaysDiscount.java new file mode 100644 index 0000000..1c7772e --- /dev/null +++ b/src/main/java/christmas/domain/event/impl/WeekdaysDiscount.java @@ -0,0 +1,6 @@ +package christmas.domain.event.impl; + +import christmas.domain.event.DiscountProcessor; + +public class WeekdaysDiscount implements DiscountProcessor { +} diff --git a/src/main/java/christmas/domain/event/impl/WeekendDiscount.java b/src/main/java/christmas/domain/event/impl/WeekendDiscount.java new file mode 100644 index 0000000..86b6323 --- /dev/null +++ b/src/main/java/christmas/domain/event/impl/WeekendDiscount.java @@ -0,0 +1,6 @@ +package christmas.domain.event.impl; + +import christmas.domain.event.DiscountProcessor; + +public class WeekendDiscount implements DiscountProcessor { +} diff --git a/src/main/java/christmas/domain/menu/Dish.java b/src/main/java/christmas/domain/menu/Dish.java new file mode 100644 index 0000000..b054948 --- /dev/null +++ b/src/main/java/christmas/domain/menu/Dish.java @@ -0,0 +1,4 @@ +package christmas.domain.menu; + +public interface Dish { +} diff --git a/src/main/java/christmas/domain/menu/Dishes.java b/src/main/java/christmas/domain/menu/Dishes.java new file mode 100644 index 0000000..b25d862 --- /dev/null +++ b/src/main/java/christmas/domain/menu/Dishes.java @@ -0,0 +1,4 @@ +package christmas.domain.menu; + +public interface Dishes { +} diff --git a/src/main/java/christmas/domain/menu/impl/Appetizer.java b/src/main/java/christmas/domain/menu/impl/Appetizer.java new file mode 100644 index 0000000..f1474e5 --- /dev/null +++ b/src/main/java/christmas/domain/menu/impl/Appetizer.java @@ -0,0 +1,6 @@ +package christmas.domain.menu.impl; + +import christmas.domain.menu.Dish; + +public class Appetizer implements Dish { +} diff --git a/src/main/java/christmas/domain/menu/impl/Beverage.java b/src/main/java/christmas/domain/menu/impl/Beverage.java new file mode 100644 index 0000000..78b47f1 --- /dev/null +++ b/src/main/java/christmas/domain/menu/impl/Beverage.java @@ -0,0 +1,6 @@ +package christmas.domain.menu.impl; + +import christmas.domain.menu.Dish; + +public class Beverage implements Dish { +} diff --git a/src/main/java/christmas/domain/menu/impl/Dessert.java b/src/main/java/christmas/domain/menu/impl/Dessert.java new file mode 100644 index 0000000..26dd516 --- /dev/null +++ b/src/main/java/christmas/domain/menu/impl/Dessert.java @@ -0,0 +1,6 @@ +package christmas.domain.menu.impl; + +import christmas.domain.menu.Dish; + +public class Dessert implements Dish { +} diff --git a/src/main/java/christmas/domain/menu/impl/MainDish.java b/src/main/java/christmas/domain/menu/impl/MainDish.java new file mode 100644 index 0000000..f1a23dc --- /dev/null +++ b/src/main/java/christmas/domain/menu/impl/MainDish.java @@ -0,0 +1,6 @@ +package christmas.domain.menu.impl; + +import christmas.domain.menu.Dish; + +public class MainDish implements Dish { +} diff --git a/src/main/java/christmas/domain/menu/impl/Menu.java b/src/main/java/christmas/domain/menu/impl/Menu.java new file mode 100644 index 0000000..89e3e0f --- /dev/null +++ b/src/main/java/christmas/domain/menu/impl/Menu.java @@ -0,0 +1,6 @@ +package christmas.domain.menu.impl; + +import christmas.domain.menu.Dishes; + +public class Menu implements Dishes { +} diff --git a/src/main/java/christmas/domain/reservation/Reservation.java b/src/main/java/christmas/domain/reservation/Reservation.java new file mode 100644 index 0000000..d47051b --- /dev/null +++ b/src/main/java/christmas/domain/reservation/Reservation.java @@ -0,0 +1,4 @@ +package christmas.domain.reservation; + +public interface Reservation { +} diff --git a/src/main/java/christmas/exception/ErrorMessage.java b/src/main/java/christmas/exception/ErrorMessage.java new file mode 100644 index 0000000..481ecbd --- /dev/null +++ b/src/main/java/christmas/exception/ErrorMessage.java @@ -0,0 +1,4 @@ +package christmas.exception; + +public enum ErrorMessage { +} diff --git a/src/main/java/christmas/repository/ReservationRepository.java b/src/main/java/christmas/repository/ReservationRepository.java new file mode 100644 index 0000000..2017215 --- /dev/null +++ b/src/main/java/christmas/repository/ReservationRepository.java @@ -0,0 +1,4 @@ +package christmas.repository; + +public interface ReservationRepository { +} diff --git a/src/main/java/christmas/repository/ReservationRepositoryImpl.java b/src/main/java/christmas/repository/ReservationRepositoryImpl.java new file mode 100644 index 0000000..9962220 --- /dev/null +++ b/src/main/java/christmas/repository/ReservationRepositoryImpl.java @@ -0,0 +1,4 @@ +package christmas.repository; + +public class ReservationRepositoryImpl implements ReservationRepository { +} diff --git a/src/main/java/christmas/service/AcceptReservationService.java b/src/main/java/christmas/service/AcceptReservationService.java new file mode 100644 index 0000000..2a6ce1f --- /dev/null +++ b/src/main/java/christmas/service/AcceptReservationService.java @@ -0,0 +1,4 @@ +package christmas.service; + +public interface AcceptReservationService { +} diff --git a/src/main/java/christmas/service/AcceptReservationServiceImpl.java b/src/main/java/christmas/service/AcceptReservationServiceImpl.java new file mode 100644 index 0000000..e330f12 --- /dev/null +++ b/src/main/java/christmas/service/AcceptReservationServiceImpl.java @@ -0,0 +1,4 @@ +package christmas.service; + +public class AcceptReservationServiceImpl implements AcceptReservationService { +} diff --git a/src/main/java/christmas/service/ProcessEventService.java b/src/main/java/christmas/service/ProcessEventService.java new file mode 100644 index 0000000..eadeeee --- /dev/null +++ b/src/main/java/christmas/service/ProcessEventService.java @@ -0,0 +1,4 @@ +package christmas.service; + +public interface ProcessEventService { +} diff --git a/src/main/java/christmas/service/ProcessEventServiceImpl.java b/src/main/java/christmas/service/ProcessEventServiceImpl.java new file mode 100644 index 0000000..2d33d4c --- /dev/null +++ b/src/main/java/christmas/service/ProcessEventServiceImpl.java @@ -0,0 +1,4 @@ +package christmas.service; + +public class ProcessEventServiceImpl implements ProcessEventService{ +} diff --git a/src/main/java/christmas/utils/InputParser.java b/src/main/java/christmas/utils/InputParser.java new file mode 100644 index 0000000..8a7aa48 --- /dev/null +++ b/src/main/java/christmas/utils/InputParser.java @@ -0,0 +1,4 @@ +package christmas.utils; + +public interface InputParser { +} diff --git a/src/main/java/christmas/utils/InputValidator.java b/src/main/java/christmas/utils/InputValidator.java new file mode 100644 index 0000000..7a440f6 --- /dev/null +++ b/src/main/java/christmas/utils/InputValidator.java @@ -0,0 +1,4 @@ +package christmas.utils; + +public interface InputValidator { +} diff --git a/src/main/java/christmas/utils/impl/DateToVisitParser.java b/src/main/java/christmas/utils/impl/DateToVisitParser.java new file mode 100644 index 0000000..b767af1 --- /dev/null +++ b/src/main/java/christmas/utils/impl/DateToVisitParser.java @@ -0,0 +1,6 @@ +package christmas.utils.impl; + +import christmas.utils.InputParser; + +public class DateToVisitParser implements InputParser { +} diff --git a/src/main/java/christmas/utils/impl/DateToVisitValidator.java b/src/main/java/christmas/utils/impl/DateToVisitValidator.java new file mode 100644 index 0000000..645cd4d --- /dev/null +++ b/src/main/java/christmas/utils/impl/DateToVisitValidator.java @@ -0,0 +1,6 @@ +package christmas.utils.impl; + +import christmas.utils.InputValidator; + +public class DateToVisitValidator implements InputValidator { +} diff --git a/src/main/java/christmas/utils/impl/OrderParser.java b/src/main/java/christmas/utils/impl/OrderParser.java new file mode 100644 index 0000000..798f6f0 --- /dev/null +++ b/src/main/java/christmas/utils/impl/OrderParser.java @@ -0,0 +1,6 @@ +package christmas.utils.impl; + +import christmas.utils.InputParser; + +public class OrderParser implements InputParser { +} diff --git a/src/main/java/christmas/utils/impl/OrderValidator.java b/src/main/java/christmas/utils/impl/OrderValidator.java new file mode 100644 index 0000000..d250198 --- /dev/null +++ b/src/main/java/christmas/utils/impl/OrderValidator.java @@ -0,0 +1,6 @@ +package christmas.utils.impl; + +import christmas.utils.InputValidator; + +public class OrderValidator implements InputValidator { +} diff --git a/src/main/java/christmas/view/InputView.java b/src/main/java/christmas/view/InputView.java new file mode 100644 index 0000000..42966ad --- /dev/null +++ b/src/main/java/christmas/view/InputView.java @@ -0,0 +1,4 @@ +package christmas.view; + +public interface InputView { +} diff --git a/src/main/java/christmas/view/OutputView.java b/src/main/java/christmas/view/OutputView.java new file mode 100644 index 0000000..10caa60 --- /dev/null +++ b/src/main/java/christmas/view/OutputView.java @@ -0,0 +1,4 @@ +package christmas.view; + +public interface OutputView { +} diff --git a/src/main/java/christmas/view/impl/ConsoleInputView.java b/src/main/java/christmas/view/impl/ConsoleInputView.java new file mode 100644 index 0000000..2dfb0f8 --- /dev/null +++ b/src/main/java/christmas/view/impl/ConsoleInputView.java @@ -0,0 +1,6 @@ +package christmas.view.impl; + +import christmas.view.InputView; + +public class ConsoleInputView implements InputView { +} diff --git a/src/main/java/christmas/view/impl/ConsoleOutputView.java b/src/main/java/christmas/view/impl/ConsoleOutputView.java new file mode 100644 index 0000000..691d42e --- /dev/null +++ b/src/main/java/christmas/view/impl/ConsoleOutputView.java @@ -0,0 +1,6 @@ +package christmas.view.impl; + +import christmas.view.OutputView; + +public class ConsoleOutputView implements OutputView { +} From 83ccd27dfd04d9ee58bb074484fa7d1605436ad8 Mon Sep 17 00:00:00 2001 From: jonghwanlee Date: Tue, 26 Nov 2024 19:36:43 +0900 Subject: [PATCH 03/19] =?UTF-8?q?feat(domain):=20Menu=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/christmas/domain/menu/Dish.java | 4 --- .../christmas/domain/menu/impl/Appetizer.java | 6 ---- .../christmas/domain/menu/impl/Beverage.java | 6 ---- .../christmas/domain/menu/impl/Dessert.java | 6 ---- .../christmas/domain/menu/impl/MainDish.java | 6 ---- .../java/christmas/domain/menu/impl/Menu.java | 35 ++++++++++++++++++- 6 files changed, 34 insertions(+), 29 deletions(-) delete mode 100644 src/main/java/christmas/domain/menu/Dish.java delete mode 100644 src/main/java/christmas/domain/menu/impl/Appetizer.java delete mode 100644 src/main/java/christmas/domain/menu/impl/Beverage.java delete mode 100644 src/main/java/christmas/domain/menu/impl/Dessert.java delete mode 100644 src/main/java/christmas/domain/menu/impl/MainDish.java diff --git a/src/main/java/christmas/domain/menu/Dish.java b/src/main/java/christmas/domain/menu/Dish.java deleted file mode 100644 index b054948..0000000 --- a/src/main/java/christmas/domain/menu/Dish.java +++ /dev/null @@ -1,4 +0,0 @@ -package christmas.domain.menu; - -public interface Dish { -} diff --git a/src/main/java/christmas/domain/menu/impl/Appetizer.java b/src/main/java/christmas/domain/menu/impl/Appetizer.java deleted file mode 100644 index f1474e5..0000000 --- a/src/main/java/christmas/domain/menu/impl/Appetizer.java +++ /dev/null @@ -1,6 +0,0 @@ -package christmas.domain.menu.impl; - -import christmas.domain.menu.Dish; - -public class Appetizer implements Dish { -} diff --git a/src/main/java/christmas/domain/menu/impl/Beverage.java b/src/main/java/christmas/domain/menu/impl/Beverage.java deleted file mode 100644 index 78b47f1..0000000 --- a/src/main/java/christmas/domain/menu/impl/Beverage.java +++ /dev/null @@ -1,6 +0,0 @@ -package christmas.domain.menu.impl; - -import christmas.domain.menu.Dish; - -public class Beverage implements Dish { -} diff --git a/src/main/java/christmas/domain/menu/impl/Dessert.java b/src/main/java/christmas/domain/menu/impl/Dessert.java deleted file mode 100644 index 26dd516..0000000 --- a/src/main/java/christmas/domain/menu/impl/Dessert.java +++ /dev/null @@ -1,6 +0,0 @@ -package christmas.domain.menu.impl; - -import christmas.domain.menu.Dish; - -public class Dessert implements Dish { -} diff --git a/src/main/java/christmas/domain/menu/impl/MainDish.java b/src/main/java/christmas/domain/menu/impl/MainDish.java deleted file mode 100644 index f1a23dc..0000000 --- a/src/main/java/christmas/domain/menu/impl/MainDish.java +++ /dev/null @@ -1,6 +0,0 @@ -package christmas.domain.menu.impl; - -import christmas.domain.menu.Dish; - -public class MainDish implements Dish { -} diff --git a/src/main/java/christmas/domain/menu/impl/Menu.java b/src/main/java/christmas/domain/menu/impl/Menu.java index 89e3e0f..14203ff 100644 --- a/src/main/java/christmas/domain/menu/impl/Menu.java +++ b/src/main/java/christmas/domain/menu/impl/Menu.java @@ -2,5 +2,38 @@ import christmas.domain.menu.Dishes; -public class Menu implements Dishes { +public enum Menu implements Dishes { + + 양송이스프(6_000, "Appetizer"), + 타파스(5_500, "Appetizer"), + 시저샐러드(8_000, "Appetizer"), + + 티본스테이크(55_000, "MainDish"), + 바비큐립(54_000,"MainDish"), + 해산물파스타(35_000, "MainDish"), + 크리스마스파스타(25_000, "MainDish"), + + 초코케이크(15_000, "Dessert"), + 아이스크림(5_000, "Dessert"), + + 제로콜라(3_000, "Beverage"), + 레드와인(60_000, "Beverage"), + 샴페인(25_000,"Beverage"); + + + private final int price; + public final String category; + + Menu(int price, String category) { + this.price = price; + this.category = category; + } + + public int getPrice() { + return price; + } + + public String getCategory() { + return category; + } } From 6a56730a3f8a1ca5d0f45057002b18f54d1a8552 Mon Sep 17 00:00:00 2001 From: jonghwanlee Date: Tue, 26 Nov 2024 19:51:35 +0900 Subject: [PATCH 04/19] =?UTF-8?q?feat(domain):=20EventOrder=20=EA=B5=AC?= =?UTF-8?q?=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Order.java의 구현체인 EventOrder.java 구현 --- .../domain/reservation/EventOrder.java | 18 ++++++++++++++++++ .../christmas/domain/reservation/Order.java | 6 ++++++ 2 files changed, 24 insertions(+) create mode 100644 src/main/java/christmas/domain/reservation/EventOrder.java create mode 100644 src/main/java/christmas/domain/reservation/Order.java diff --git a/src/main/java/christmas/domain/reservation/EventOrder.java b/src/main/java/christmas/domain/reservation/EventOrder.java new file mode 100644 index 0000000..f7085e0 --- /dev/null +++ b/src/main/java/christmas/domain/reservation/EventOrder.java @@ -0,0 +1,18 @@ +package christmas.domain.reservation; + +public class EventOrder implements Order { + private final String dishName; + private final int count; + + public EventOrder(String dishName, int count) { + this.dishName = dishName; + this.count = count; + } + + public int getCount(){ + return count; + } + public String getDishName() { + return dishName; + } +} diff --git a/src/main/java/christmas/domain/reservation/Order.java b/src/main/java/christmas/domain/reservation/Order.java new file mode 100644 index 0000000..60916a2 --- /dev/null +++ b/src/main/java/christmas/domain/reservation/Order.java @@ -0,0 +1,6 @@ +package christmas.domain.reservation; + +public interface Order { + int getCount(); + String getDishName(); +} From 0314bd3228663e3e28917bae359c8b08e5cec36c Mon Sep 17 00:00:00 2001 From: jonghwanlee Date: Tue, 26 Nov 2024 20:11:42 +0900 Subject: [PATCH 05/19] =?UTF-8?q?feat(utils):=20OrderParser=20=EA=B5=AC?= =?UTF-8?q?=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit InputParser.java의 구현체인 OrderParser.java 구현 --- .../domain/reservation/EventOrder.java | 10 +++++----- .../java/christmas/utils/InputParser.java | 3 ++- .../christmas/utils/impl/OrderParser.java | 19 ++++++++++++++++++- 3 files changed, 25 insertions(+), 7 deletions(-) diff --git a/src/main/java/christmas/domain/reservation/EventOrder.java b/src/main/java/christmas/domain/reservation/EventOrder.java index f7085e0..b425301 100644 --- a/src/main/java/christmas/domain/reservation/EventOrder.java +++ b/src/main/java/christmas/domain/reservation/EventOrder.java @@ -2,15 +2,15 @@ public class EventOrder implements Order { private final String dishName; - private final int count; + private final int quantity; - public EventOrder(String dishName, int count) { + public EventOrder(String dishName, int quantity) { this.dishName = dishName; - this.count = count; + this.quantity = quantity; } - public int getCount(){ - return count; + public int getQuantity(){ + return quantity; } public String getDishName() { return dishName; diff --git a/src/main/java/christmas/utils/InputParser.java b/src/main/java/christmas/utils/InputParser.java index 8a7aa48..5e1fbb9 100644 --- a/src/main/java/christmas/utils/InputParser.java +++ b/src/main/java/christmas/utils/InputParser.java @@ -1,4 +1,5 @@ package christmas.utils; -public interface InputParser { +public interface InputParser { + Type parse(String input); } diff --git a/src/main/java/christmas/utils/impl/OrderParser.java b/src/main/java/christmas/utils/impl/OrderParser.java index 798f6f0..dc2e7fd 100644 --- a/src/main/java/christmas/utils/impl/OrderParser.java +++ b/src/main/java/christmas/utils/impl/OrderParser.java @@ -1,6 +1,23 @@ package christmas.utils.impl; +import christmas.domain.reservation.EventOrder; +import christmas.domain.reservation.Order; import christmas.utils.InputParser; +import java.util.ArrayList; +import java.util.List; -public class OrderParser implements InputParser { +public class OrderParser implements InputParser> { + @Override + public List parse(String rawOrders) { + List orders = new ArrayList<>(); + for (String rawOrder : rawOrders.split(",")) { + String[] parts = rawOrder.split("-"); + + String dishName = parts[0]; + int quantity = Integer.parseInt(parts[1]); + Order order = new EventOrder(dishName, quantity); + orders.add(order); + } + return orders; + } } From acf7940b5c5215c3131d9f362f20a46cfa3a9a09 Mon Sep 17 00:00:00 2001 From: jonghwanlee Date: Tue, 26 Nov 2024 21:34:11 +0900 Subject: [PATCH 06/19] =?UTF-8?q?feat(domain):=20EventReservation=20?= =?UTF-8?q?=EC=83=9D=EC=84=B1=EC=9E=90=20=EB=A9=94=EC=84=9C=EB=93=9C=20?= =?UTF-8?q?=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../domain/reservation/EventReservation.java | 57 +++++++++++++++++++ .../christmas/domain/reservation/Order.java | 2 +- 2 files changed, 58 insertions(+), 1 deletion(-) create mode 100644 src/main/java/christmas/domain/reservation/EventReservation.java diff --git a/src/main/java/christmas/domain/reservation/EventReservation.java b/src/main/java/christmas/domain/reservation/EventReservation.java new file mode 100644 index 0000000..a8fe81f --- /dev/null +++ b/src/main/java/christmas/domain/reservation/EventReservation.java @@ -0,0 +1,57 @@ +package christmas.domain.reservation; + +import christmas.domain.event.DiscountProcessor; +import christmas.domain.menu.impl.Menu; +import java.time.LocalDate; +import java.util.List; + +public class EventReservation implements Reservation { + private final List orders; + private final LocalDate eventDate; + private final int totalPrice; + + private EventReservation(List orders,LocalDate eventDate) { + this.orders = orders; + this.eventDate = eventDate; + this.totalPrice = getTotalPrice(); + + } + + public static void create(List orders,LocalDate eventDate){ + new EventReservation(orders,eventDate); + } + + public int applyDDayDiscount(DiscountProcessor dDayDiscount){ + int discountAmount = 0; + return discountAmount; + } + + public int applySpecialDiscount(DiscountProcessor specialDiscount){ + int discountAmount = 0; + return discountAmount; + } + + public int applyWeekdaysDiscount(DiscountProcessor weekdaysDiscount){ + int discountAmount = 0; + return discountAmount; + } + + public int applyWeekendDiscount(DiscountProcessor weekendDiscount){ + int discountAmount = 0; + return discountAmount; + } + + private int getTotalPrice(){ + int priceSum = 0; + + for (Order order : orders) { + String dishName = order.getDishName(); + int quantity = order.getQuantity(); + + priceSum += quantity * Menu.valueOf(dishName).getPrice(); + } + return priceSum; + } + + +} diff --git a/src/main/java/christmas/domain/reservation/Order.java b/src/main/java/christmas/domain/reservation/Order.java index 60916a2..f508ca9 100644 --- a/src/main/java/christmas/domain/reservation/Order.java +++ b/src/main/java/christmas/domain/reservation/Order.java @@ -1,6 +1,6 @@ package christmas.domain.reservation; public interface Order { - int getCount(); + int getQuantity(); String getDishName(); } From 97b8398855c353b9fdafcd454fe43c278289d3fb Mon Sep 17 00:00:00 2001 From: jonghwanlee Date: Tue, 26 Nov 2024 22:26:07 +0900 Subject: [PATCH 07/19] =?UTF-8?q?feat(domain):=20DiscountProcessor=20?= =?UTF-8?q?=EA=B5=AC=ED=98=84=EC=B2=B4=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 네 개의 DiscountProcessor.java 구현체 구현 --- docs/README.md | 18 +++++++++--------- .../domain/event/DiscountProcessor.java | 3 ++- .../domain/event/impl/DDayDiscount.java | 14 +++++++++++++- .../domain/event/impl/SpecialDiscount.java | 14 +++++++++++++- .../domain/event/impl/WeekdaysDiscount.java | 19 ++++++++++++++++++- .../domain/event/impl/WeekendDiscount.java | 19 ++++++++++++++++++- 6 files changed, 73 insertions(+), 14 deletions(-) diff --git a/docs/README.md b/docs/README.md index 1f71e8b..f3a2031 100644 --- a/docs/README.md +++ b/docs/README.md @@ -25,20 +25,19 @@ #### 12월 이벤트 계획 - 크리스마스 디데이 할인 - - [ ] 이벤트 기간: 2023.12.1 ~ 2023.12.25 - - [ ] 1,000원으로 시작하여 크리스마스가 다가올수록 날마다 할인 금액이 100원씩 증가 - - [ ] 총주문 금액에서 해당 금액만큼 할인 + - [x] 이벤트 기간: 2023.12.1 ~ 2023.12.25 + - [x] 1,000원으로 시작하여 크리스마스가 다가올수록 날마다 할인 금액이 100원씩 증가 + - [x] 총주문 금액에서 해당 금액만큼 할인 (e.g. 시작일인 12월 1일에 1,000원, 2일에 1,100원, ..., 25일엔 3,400원 할인) -- [ ] 평일 할인(일요일~목요일): 평일에는 디저트 메뉴를 메뉴 1개당 2,023원 할인 -- [ ] 주말 할인(금요일, 토요일): 주말에는 메인 메뉴를 메뉴 1개당 2,023원 할인 -- [ ] 특별 할인: 이벤트 달력에 별이 있으면 총주문 금액에서 1,000원 할인 +- [x] 평일 할인(일요일~목요일): 평일에는 디저트 메뉴를 메뉴 1개당 2,023원 할인 +- [x] 주말 할인(금요일, 토요일): 주말에는 메인 메뉴를 메뉴 1개당 2,023원 할인 +- [x] 특별 할인: 이벤트 달력에 별이 있으면 총주문 금액에서 1,000원 할인 - [ ] 증정 이벤트: 할인 전 총주문 금액이 12만 원 이상일 때, 샴페인 1개 증정 -- [ ] 이벤트 기간: '크리스마스 디데이 할인'을 제외한 다른 이벤트는 2023.12.1 ~ 2023.12.31 동안 적용 +- [x] 이벤트 기간: '크리스마스 디데이 할인'을 제외한 다른 이벤트는 2023.12.1 ~ 2023.12.31 동안 적용 #### 혜택 금액에 따른 12월 이벤트 배지 부여 -- [ ] 총혜택 금액에 따라 다른 이벤트 배지를 부여합니다. 이 배지는 2024 새해 이벤트에서 활용할 예정입니다. - 배지에 따라 새해 이벤트 참여 시, 각각 다른 새해 선물을 증정할 예정입니다. +- [ ] 총혜택 금액에 따라 다른 이벤트 배지를 부여 - 5천 원 이상: 별 - 1만 원 이상: 트리 - 2만 원 이상: 산타 @@ -60,6 +59,7 @@ - [ ] 1 이상 31 이하의 숫자가 아닌 경우, "[ERROR] 유효하지 않은 날짜입니다. 다시 입력해 주세요."라는 에러 메시지 출력 - [ ] 모든 에러 메시지는 "[ERROR]"로 시작하도록 작성 +- [x] 입력값에 따른 ```EventReservation``` 객체 생성 - [ ] 주문할 메뉴와 개수 입력 안내 문구 출력 - [ ] 올바르지 않은 값 입력 시 에러 메세지 출력 후 재입력 받음 diff --git a/src/main/java/christmas/domain/event/DiscountProcessor.java b/src/main/java/christmas/domain/event/DiscountProcessor.java index beaa569..94e7abc 100644 --- a/src/main/java/christmas/domain/event/DiscountProcessor.java +++ b/src/main/java/christmas/domain/event/DiscountProcessor.java @@ -1,4 +1,5 @@ package christmas.domain.event; -public interface DiscountProcessor { +public interface DiscountProcessor { + int processDiscount(Type input); } diff --git a/src/main/java/christmas/domain/event/impl/DDayDiscount.java b/src/main/java/christmas/domain/event/impl/DDayDiscount.java index 4f09516..714edb1 100644 --- a/src/main/java/christmas/domain/event/impl/DDayDiscount.java +++ b/src/main/java/christmas/domain/event/impl/DDayDiscount.java @@ -1,6 +1,18 @@ package christmas.domain.event.impl; import christmas.domain.event.DiscountProcessor; +import java.time.LocalDate; -public class DDayDiscount implements DiscountProcessor { +public class DDayDiscount implements DiscountProcessor { + private static final LocalDate CHRISTMAS =LocalDate.of(2023,12,25); + @Override + public int processDiscount(LocalDate reservationDate) { + if (reservationDate.isAfter(CHRISTMAS)) { + return 0; + } + int discount = 1000; + discount += 100 * (reservationDate.getDayOfMonth() - 1); + + return discount; + } } diff --git a/src/main/java/christmas/domain/event/impl/SpecialDiscount.java b/src/main/java/christmas/domain/event/impl/SpecialDiscount.java index 8025896..d6ea8f2 100644 --- a/src/main/java/christmas/domain/event/impl/SpecialDiscount.java +++ b/src/main/java/christmas/domain/event/impl/SpecialDiscount.java @@ -1,6 +1,18 @@ package christmas.domain.event.impl; import christmas.domain.event.DiscountProcessor; +import java.time.LocalDate; +import java.util.List; -public class SpecialDiscount implements DiscountProcessor { +public class SpecialDiscount implements DiscountProcessor { + private static final List specialDays = List.of(3,10,17,24,25,31); + + @Override + public int processDiscount(LocalDate reservationDate) { + int discount = 0; + if (specialDays.contains(reservationDate.getDayOfWeek())) { + discount +=1000; + } + return discount; + } } diff --git a/src/main/java/christmas/domain/event/impl/WeekdaysDiscount.java b/src/main/java/christmas/domain/event/impl/WeekdaysDiscount.java index 1c7772e..e47c11a 100644 --- a/src/main/java/christmas/domain/event/impl/WeekdaysDiscount.java +++ b/src/main/java/christmas/domain/event/impl/WeekdaysDiscount.java @@ -1,6 +1,23 @@ package christmas.domain.event.impl; import christmas.domain.event.DiscountProcessor; +import christmas.domain.menu.impl.Menu; +import christmas.domain.reservation.Order; +import java.util.List; -public class WeekdaysDiscount implements DiscountProcessor { +public class WeekdaysDiscount implements DiscountProcessor> { + @Override + public int processDiscount(List orders) { + int discount = 0; + + for (Order order : orders) { + String dishName = order.getDishName(); + + if (Menu.valueOf(dishName).getCategory().equals("Dessert")){ + discount += 2023; + } + } + + return discount; + } } diff --git a/src/main/java/christmas/domain/event/impl/WeekendDiscount.java b/src/main/java/christmas/domain/event/impl/WeekendDiscount.java index 86b6323..efb6dcf 100644 --- a/src/main/java/christmas/domain/event/impl/WeekendDiscount.java +++ b/src/main/java/christmas/domain/event/impl/WeekendDiscount.java @@ -1,6 +1,23 @@ package christmas.domain.event.impl; import christmas.domain.event.DiscountProcessor; +import christmas.domain.menu.impl.Menu; +import christmas.domain.reservation.Order; +import java.util.List; -public class WeekendDiscount implements DiscountProcessor { +public class WeekendDiscount implements DiscountProcessor> { + @Override + public int processDiscount(List orders) { + int discount = 0; + + for (Order order : orders) { + String dishName = order.getDishName(); + + if (Menu.valueOf(dishName).getCategory().equals("MainDish")){ + discount += 2023; + } + } + + return discount; + } } From 87f0beb67dddf3910b338ae01394ffc5b0a331b3 Mon Sep 17 00:00:00 2001 From: jonghwanlee Date: Tue, 26 Nov 2024 23:23:34 +0900 Subject: [PATCH 08/19] =?UTF-8?q?feat(domain):=20TotalEventProcessor.java?= =?UTF-8?q?=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../domain/event/EventProcessor.java | 9 ++ .../java/christmas/domain/event/Gift.java | 3 +- .../domain/event/impl/BadgeGift.java | 15 ++- .../domain/event/impl/ChampagneGift.java | 10 +- .../event/impl/TotalEventProcessor.java | 103 ++++++++++++++++++ 5 files changed, 137 insertions(+), 3 deletions(-) create mode 100644 src/main/java/christmas/domain/event/EventProcessor.java create mode 100644 src/main/java/christmas/domain/event/impl/TotalEventProcessor.java diff --git a/src/main/java/christmas/domain/event/EventProcessor.java b/src/main/java/christmas/domain/event/EventProcessor.java new file mode 100644 index 0000000..4beb2bb --- /dev/null +++ b/src/main/java/christmas/domain/event/EventProcessor.java @@ -0,0 +1,9 @@ +package christmas.domain.event; + +import christmas.domain.reservation.Order; +import java.time.LocalDate; +import java.util.List; + +public interface EventProcessor { + String getEventResult(List orders, LocalDate date, int totalPrice); +} diff --git a/src/main/java/christmas/domain/event/Gift.java b/src/main/java/christmas/domain/event/Gift.java index 725951f..109a8ca 100644 --- a/src/main/java/christmas/domain/event/Gift.java +++ b/src/main/java/christmas/domain/event/Gift.java @@ -1,4 +1,5 @@ package christmas.domain.event; -public interface Gift { +public interface Gift { + Type getGiftOrNot(int amount); } diff --git a/src/main/java/christmas/domain/event/impl/BadgeGift.java b/src/main/java/christmas/domain/event/impl/BadgeGift.java index 0274cab..b0f9ae2 100644 --- a/src/main/java/christmas/domain/event/impl/BadgeGift.java +++ b/src/main/java/christmas/domain/event/impl/BadgeGift.java @@ -2,5 +2,18 @@ import christmas.domain.event.Gift; -public class BadgeGift implements Gift { +public class BadgeGift implements Gift { + @Override + public String getGiftOrNot(int discountAmount) { + if (discountAmount >= 20000) { + return "산타"; + } + if (discountAmount >= 10000) { + return "트리"; + } + if (discountAmount >= 5000) { + return "별"; + } + return "없음"; + } } diff --git a/src/main/java/christmas/domain/event/impl/ChampagneGift.java b/src/main/java/christmas/domain/event/impl/ChampagneGift.java index 21d1ee7..6f82c28 100644 --- a/src/main/java/christmas/domain/event/impl/ChampagneGift.java +++ b/src/main/java/christmas/domain/event/impl/ChampagneGift.java @@ -2,5 +2,13 @@ import christmas.domain.event.Gift; -public class ChampagneGift implements Gift { +public class ChampagneGift implements Gift { + @Override + public Boolean getGiftOrNot(int totalAmount) { + if (totalAmount >= 120000) { + return true; + } + return false; + + } } diff --git a/src/main/java/christmas/domain/event/impl/TotalEventProcessor.java b/src/main/java/christmas/domain/event/impl/TotalEventProcessor.java new file mode 100644 index 0000000..6a19f69 --- /dev/null +++ b/src/main/java/christmas/domain/event/impl/TotalEventProcessor.java @@ -0,0 +1,103 @@ +package christmas.domain.event.impl; +import christmas.domain.event.DiscountProcessor; +import christmas.domain.event.EventProcessor; +import christmas.domain.event.Gift; +import christmas.domain.menu.impl.Menu; +import christmas.domain.reservation.Order; +import java.time.LocalDate; +import java.util.List; + +public class TotalEventProcessor implements EventProcessor { + private static final List weekends = List.of(1,2,8,9,15,16,22,33,29,30); + + private final DiscountProcessor dDayDiscount; + private final DiscountProcessor specialDiscount; + private final DiscountProcessor> weekdaysDiscount; + private final DiscountProcessor> weekendDiscount; + private final Gift champagneGift; + private final Gift badgeGift; + + public TotalEventProcessor(DiscountProcessor dDayDiscount, + DiscountProcessor specialDiscount, + DiscountProcessor> weekdaysDiscount, + DiscountProcessor> weekendDiscount, + Gift champagneGift, + Gift badgeGift + ) { + this.dDayDiscount = dDayDiscount; + this.specialDiscount = specialDiscount; + this.weekdaysDiscount = weekdaysDiscount; + this.weekendDiscount = weekendDiscount; + this.champagneGift = champagneGift; + this.badgeGift = badgeGift; + } + + + @Override + public String getEventResult(List orders, LocalDate date, int totalPrice) { + StringBuilder result = new StringBuilder(); + + result.append("<증정메뉴>\n"); + + int champagneDiscount = getChampagneDiscount(totalPrice, result); + int totalDiscountAmount = champagneDiscount; + + result.append("\n혜택 내역\n"); + totalDiscountAmount += getDDayDiscount(date,result); + if(weekends.contains(date.getDayOfWeek()) ) { + totalDiscountAmount += getWeekendDiscount(orders,result); + } + if (!weekends.contains(date.getDayOfWeek())){ + totalDiscountAmount += getWeekdaysDiscount(orders,result); + } + totalDiscountAmount += getSpecialDiscount(date,result); + if(champagneDiscount != 0) { + result.append("증정 이벤트: -").append(champagneDiscount).append("원").append("\n"); + } + + result.append("\n<총혜택 금액>\n-").append(totalDiscountAmount).append("원").append("\n"); + result.append("\n<할인 후 예상 결제 금액>\n").append(totalPrice - totalDiscountAmount).append("원").append("\n"); + result.append("\n<12월 이벤트 배지>\n").append(badgeGift.getGiftOrNot(totalDiscountAmount)); + + return result.toString(); + } + + private int getChampagneDiscount(int totalPrice, StringBuilder result) { + int champagneDiscountAmount = 0; + if(champagneGift.getGiftOrNot(totalPrice)){ + champagneDiscountAmount += Menu.valueOf("샴페인").getPrice(); + result.append("샴페인 1개\n"); + return champagneDiscountAmount; + } + result.append("없음\n"); + return champagneDiscountAmount; + } + + private int getDDayDiscount(LocalDate date, StringBuilder result) { + int dDayDiscountAmount = dDayDiscount.processDiscount(date); + result.append("크리스마스 디데이 할인: -").append(dDayDiscountAmount).append("원").append("\n"); + return dDayDiscountAmount; + } + + private int getWeekendDiscount(List orders, StringBuilder result) { + int weekendDiscountAmount = weekendDiscount.processDiscount(orders); + result.append("주말 할인: -").append(weekendDiscountAmount).append("원").append("\n"); + return weekendDiscountAmount; + } + + private int getWeekdaysDiscount(List orders, StringBuilder result) { + int weekdaysDiscountAmount = weekdaysDiscount.processDiscount(orders); + result.append("평일 할인: -").append(weekdaysDiscountAmount).append("원").append("\n"); + return weekdaysDiscountAmount; + } + + private int getSpecialDiscount(LocalDate date, StringBuilder result) { + int specialDiscountAmount = specialDiscount.processDiscount(date); + result.append("특별 할인: -").append(specialDiscountAmount).append("원").append("\n"); + return specialDiscountAmount; + + } + + + +} From c5fe70fd8a96f6fdc519646ea8ce4dde6f9733b4 Mon Sep 17 00:00:00 2001 From: jonghwanlee Date: Tue, 26 Nov 2024 23:33:05 +0900 Subject: [PATCH 09/19] =?UTF-8?q?feat(domain):=20=EC=B5=9C=EC=A2=85=20?= =?UTF-8?q?=EC=98=81=EC=88=98=EC=A6=9D=20=EB=A7=8C=EB=93=9C=EB=8A=94=20?= =?UTF-8?q?=EA=B8=B0=EB=8A=A5=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit EventReservation에 최종 프린트를 만드는 makeReceipt() 구현 --- .../event/impl/TotalEventProcessor.java | 26 ++++++++--------- .../domain/reservation/EventReservation.java | 28 ++++++++----------- .../domain/reservation/Reservation.java | 3 ++ 3 files changed, 28 insertions(+), 29 deletions(-) diff --git a/src/main/java/christmas/domain/event/impl/TotalEventProcessor.java b/src/main/java/christmas/domain/event/impl/TotalEventProcessor.java index 6a19f69..dc68fe9 100644 --- a/src/main/java/christmas/domain/event/impl/TotalEventProcessor.java +++ b/src/main/java/christmas/domain/event/impl/TotalEventProcessor.java @@ -35,31 +35,31 @@ public TotalEventProcessor(DiscountProcessor dDayDiscount, @Override public String getEventResult(List orders, LocalDate date, int totalPrice) { - StringBuilder result = new StringBuilder(); + StringBuilder builder = new StringBuilder(); - result.append("<증정메뉴>\n"); + builder.append("\n<증정메뉴>\n"); - int champagneDiscount = getChampagneDiscount(totalPrice, result); + int champagneDiscount = getChampagneDiscount(totalPrice, builder); int totalDiscountAmount = champagneDiscount; - result.append("\n혜택 내역\n"); - totalDiscountAmount += getDDayDiscount(date,result); + builder.append("\n혜택 내역\n"); + totalDiscountAmount += getDDayDiscount(date,builder); if(weekends.contains(date.getDayOfWeek()) ) { - totalDiscountAmount += getWeekendDiscount(orders,result); + totalDiscountAmount += getWeekendDiscount(orders,builder); } if (!weekends.contains(date.getDayOfWeek())){ - totalDiscountAmount += getWeekdaysDiscount(orders,result); + totalDiscountAmount += getWeekdaysDiscount(orders,builder); } - totalDiscountAmount += getSpecialDiscount(date,result); + totalDiscountAmount += getSpecialDiscount(date,builder); if(champagneDiscount != 0) { - result.append("증정 이벤트: -").append(champagneDiscount).append("원").append("\n"); + builder.append("증정 이벤트: -").append(champagneDiscount).append("원").append("\n"); } - result.append("\n<총혜택 금액>\n-").append(totalDiscountAmount).append("원").append("\n"); - result.append("\n<할인 후 예상 결제 금액>\n").append(totalPrice - totalDiscountAmount).append("원").append("\n"); - result.append("\n<12월 이벤트 배지>\n").append(badgeGift.getGiftOrNot(totalDiscountAmount)); + builder.append("\n<총혜택 금액>\n-").append(totalDiscountAmount).append("원").append("\n"); + builder.append("\n<할인 후 예상 결제 금액>\n").append(totalPrice - totalDiscountAmount).append("원").append("\n"); + builder.append("\n<12월 이벤트 배지>\n").append(badgeGift.getGiftOrNot(totalDiscountAmount)); - return result.toString(); + return builder.toString(); } private int getChampagneDiscount(int totalPrice, StringBuilder result) { diff --git a/src/main/java/christmas/domain/reservation/EventReservation.java b/src/main/java/christmas/domain/reservation/EventReservation.java index a8fe81f..7f403a4 100644 --- a/src/main/java/christmas/domain/reservation/EventReservation.java +++ b/src/main/java/christmas/domain/reservation/EventReservation.java @@ -1,6 +1,6 @@ package christmas.domain.reservation; -import christmas.domain.event.DiscountProcessor; +import christmas.domain.event.EventProcessor; import christmas.domain.menu.impl.Menu; import java.time.LocalDate; import java.util.List; @@ -21,26 +21,22 @@ public static void create(List orders,LocalDate eventDate){ new EventReservation(orders,eventDate); } - public int applyDDayDiscount(DiscountProcessor dDayDiscount){ - int discountAmount = 0; - return discountAmount; - } + public String makeReceipt(EventProcessor totalEventProcessor){ + StringBuilder builder = new StringBuilder(); + builder.append("12월 ").append(eventDate.getDayOfWeek()).append("일에 우테코 식당에서 받을 혜택 미리 보기!\n"); - public int applySpecialDiscount(DiscountProcessor specialDiscount){ - int discountAmount = 0; - return discountAmount; - } + builder.append("\n<주문 메뉴>\n"); + for(Order order : orders){ + builder.append(order.getDishName()).append(" ").append(order.getQuantity()).append("개\n"); + } + builder.append("<할인 전 총주문 금액>\n").append(totalPrice).append("원\n"); - public int applyWeekdaysDiscount(DiscountProcessor weekdaysDiscount){ - int discountAmount = 0; - return discountAmount; - } + builder.append(totalEventProcessor.getEventResult(orders,eventDate,totalPrice)); - public int applyWeekendDiscount(DiscountProcessor weekendDiscount){ - int discountAmount = 0; - return discountAmount; + return builder.toString(); } + private int getTotalPrice(){ int priceSum = 0; diff --git a/src/main/java/christmas/domain/reservation/Reservation.java b/src/main/java/christmas/domain/reservation/Reservation.java index d47051b..c9323b0 100644 --- a/src/main/java/christmas/domain/reservation/Reservation.java +++ b/src/main/java/christmas/domain/reservation/Reservation.java @@ -1,4 +1,7 @@ package christmas.domain.reservation; +import christmas.domain.event.EventProcessor; + public interface Reservation { + String makeReceipt(EventProcessor eventProcessor); } From 2dee4fe6cd6ff618a66d5d65f1b6088ba9c78c8b Mon Sep 17 00:00:00 2001 From: jonghwanlee Date: Tue, 26 Nov 2024 23:46:24 +0900 Subject: [PATCH 10/19] =?UTF-8?q?feat(repository):=20ReservationRepository?= =?UTF-8?q?=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../repository/ReservationRepository.java | 17 ++++++++++++++++- .../repository/ReservationRepositoryImpl.java | 4 ---- .../christmas/repository/SingleRepository.java | 8 ++++++++ 3 files changed, 24 insertions(+), 5 deletions(-) delete mode 100644 src/main/java/christmas/repository/ReservationRepositoryImpl.java create mode 100644 src/main/java/christmas/repository/SingleRepository.java diff --git a/src/main/java/christmas/repository/ReservationRepository.java b/src/main/java/christmas/repository/ReservationRepository.java index 2017215..1dc37dc 100644 --- a/src/main/java/christmas/repository/ReservationRepository.java +++ b/src/main/java/christmas/repository/ReservationRepository.java @@ -1,4 +1,19 @@ package christmas.repository; -public interface ReservationRepository { +import christmas.domain.reservation.Reservation; +import java.util.Optional; + +public class ReservationRepository implements SingleRepository { + private Reservation reservation; + + @Override + public Optional get() { + return Optional.ofNullable(this.reservation); + } + + @Override + public void save(Reservation reservation) { + this.reservation = reservation; + } } + diff --git a/src/main/java/christmas/repository/ReservationRepositoryImpl.java b/src/main/java/christmas/repository/ReservationRepositoryImpl.java deleted file mode 100644 index 9962220..0000000 --- a/src/main/java/christmas/repository/ReservationRepositoryImpl.java +++ /dev/null @@ -1,4 +0,0 @@ -package christmas.repository; - -public class ReservationRepositoryImpl implements ReservationRepository { -} diff --git a/src/main/java/christmas/repository/SingleRepository.java b/src/main/java/christmas/repository/SingleRepository.java new file mode 100644 index 0000000..ecc83bb --- /dev/null +++ b/src/main/java/christmas/repository/SingleRepository.java @@ -0,0 +1,8 @@ +package christmas.repository; + +import java.util.Optional; + +public interface SingleRepository { + void save(Type entity); + Optional get(); +} From f0c2e0fbbb738bf384eb63ed72093dfab298bc29 Mon Sep 17 00:00:00 2001 From: jonghwanlee Date: Wed, 27 Nov 2024 00:05:25 +0900 Subject: [PATCH 11/19] =?UTF-8?q?feat(service):=20=EC=B5=9C=EC=A2=85=20?= =?UTF-8?q?=EA=B2=B0=EA=B3=BC=20=EC=B6=9C=EB=A0=A5=20=EA=B3=BC=EC=A0=95=20?= =?UTF-8?q?=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/christmas/dto/ReceiptDTO.java | 4 ++++ .../service/ProcessEventServiceImpl.java | 21 +++++++++++++++++++ 2 files changed, 25 insertions(+) create mode 100644 src/main/java/christmas/dto/ReceiptDTO.java diff --git a/src/main/java/christmas/dto/ReceiptDTO.java b/src/main/java/christmas/dto/ReceiptDTO.java new file mode 100644 index 0000000..5f555aa --- /dev/null +++ b/src/main/java/christmas/dto/ReceiptDTO.java @@ -0,0 +1,4 @@ +package christmas.dto; + +public record ReceiptDTO(String receipt) { +} diff --git a/src/main/java/christmas/service/ProcessEventServiceImpl.java b/src/main/java/christmas/service/ProcessEventServiceImpl.java index 2d33d4c..8f99307 100644 --- a/src/main/java/christmas/service/ProcessEventServiceImpl.java +++ b/src/main/java/christmas/service/ProcessEventServiceImpl.java @@ -1,4 +1,25 @@ package christmas.service; +import christmas.domain.event.EventProcessor; +import christmas.domain.reservation.Reservation; +import christmas.dto.ReceiptDTO; +import christmas.repository.SingleRepository; + public class ProcessEventServiceImpl implements ProcessEventService{ + private final SingleRepository reservationRepositoryImpl; + private final EventProcessor totalEventProcessor; + + public ProcessEventServiceImpl(SingleRepository reservationRepositoryImpl, + EventProcessor totalEventProcessor) { + this.reservationRepositoryImpl = reservationRepositoryImpl; + this.totalEventProcessor = totalEventProcessor; + } + + + public ReceiptDTO sendReceipt(){ + Reservation eventReservation = reservationRepositoryImpl.get() + .orElseThrow(() -> new RuntimeException("There is no event reservation")); + + return new ReceiptDTO(eventReservation.makeReceipt(totalEventProcessor)); + } } From 29ab7fd0124f1bbb2aabb13c97d4fbd651106944 Mon Sep 17 00:00:00 2001 From: jonghwanlee Date: Wed, 27 Nov 2024 00:29:18 +0900 Subject: [PATCH 12/19] =?UTF-8?q?feat(view):=20view=20=EA=B4=80=EB=A0=A8?= =?UTF-8?q?=20=ED=81=B4=EB=9E=98=EC=8A=A4=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/christmas/view/InputView.java | 2 ++ src/main/java/christmas/view/OutputView.java | 4 ++++ .../java/christmas/view/impl/ConsoleInputView.java | 11 +++++++++++ .../java/christmas/view/impl/ConsoleOutputView.java | 9 +++++++++ 4 files changed, 26 insertions(+) diff --git a/src/main/java/christmas/view/InputView.java b/src/main/java/christmas/view/InputView.java index 42966ad..4fb71f1 100644 --- a/src/main/java/christmas/view/InputView.java +++ b/src/main/java/christmas/view/InputView.java @@ -1,4 +1,6 @@ package christmas.view; public interface InputView { + String readDate(); + String readOrders(); } diff --git a/src/main/java/christmas/view/OutputView.java b/src/main/java/christmas/view/OutputView.java index 10caa60..4a33a8a 100644 --- a/src/main/java/christmas/view/OutputView.java +++ b/src/main/java/christmas/view/OutputView.java @@ -1,4 +1,8 @@ package christmas.view; +import christmas.dto.ReceiptDTO; + public interface OutputView { + void printWelcomeMessage(); + void printReceipt(ReceiptDTO receiptDTO); } diff --git a/src/main/java/christmas/view/impl/ConsoleInputView.java b/src/main/java/christmas/view/impl/ConsoleInputView.java index 2dfb0f8..3b7a571 100644 --- a/src/main/java/christmas/view/impl/ConsoleInputView.java +++ b/src/main/java/christmas/view/impl/ConsoleInputView.java @@ -1,6 +1,17 @@ package christmas.view.impl; +import camp.nextstep.edu.missionutils.Console; import christmas.view.InputView; public class ConsoleInputView implements InputView { + + public String readDate(){ + System.out.println("12월 중 식당 예상 방문 날짜는 언제인가요? (숫자만 입력해 주세요!)"); + return Console.readLine(); + } + + public String readOrders(){ + System.out.println("주문하실 메뉴와 개수를 알려 주세요. (e.g. 해물파스타-2,레드와인-1,초코케이크-1"); + return Console.readLine(); + } } diff --git a/src/main/java/christmas/view/impl/ConsoleOutputView.java b/src/main/java/christmas/view/impl/ConsoleOutputView.java index 691d42e..afc55f7 100644 --- a/src/main/java/christmas/view/impl/ConsoleOutputView.java +++ b/src/main/java/christmas/view/impl/ConsoleOutputView.java @@ -1,6 +1,15 @@ package christmas.view.impl; +import christmas.dto.ReceiptDTO; import christmas.view.OutputView; public class ConsoleOutputView implements OutputView { + + public void printWelcomeMessage(){ + System.out.println("안녕하세요! 우테코 식당 12월 이벤트 플래너입니다."); + } + + public void printReceipt(ReceiptDTO receiptDTO) { + System.out.println(receiptDTO.receipt()); + } } From dd6baa8ca2a01cf7be5c528db345f755f973eef5 Mon Sep 17 00:00:00 2001 From: jonghwanlee Date: Wed, 27 Nov 2024 14:17:32 +0900 Subject: [PATCH 13/19] =?UTF-8?q?feat(utils):=20DateToVisit=20=EA=B4=80?= =?UTF-8?q?=EB=A0=A8=20Parser=20=EB=B0=8F=20Validator=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../christmas/exception/ErrorMessage.java | 17 ++++++++++++ .../service/ProcessEventService.java | 3 +++ .../java/christmas/utils/InputValidator.java | 1 + .../utils/impl/DateToVisitParser.java | 14 +++++++++- .../utils/impl/DateToVisitValidator.java | 26 +++++++++++++++++++ 5 files changed, 60 insertions(+), 1 deletion(-) diff --git a/src/main/java/christmas/exception/ErrorMessage.java b/src/main/java/christmas/exception/ErrorMessage.java index 481ecbd..a75b1a0 100644 --- a/src/main/java/christmas/exception/ErrorMessage.java +++ b/src/main/java/christmas/exception/ErrorMessage.java @@ -1,4 +1,21 @@ package christmas.exception; public enum ErrorMessage { + ERROR_HEADER("[ERROR] "), + NOT_VALID_ORDER_FORMAT("유효하지 않은 주문입니다. 다시 입력해 주세요."), + NOT_INTEGER("입력값이 숫자가 아닙니다. 다시 입력해주세요"), + NOT_VALID_DATE("유효하지 않은 날짜입니다. 다시 입력해주세요."); + private final String message; + + ErrorMessage(String message) { + this.message = message; + } + + private String getMessage() { + return message; + } + + public String getErrorMessage() { + return ERROR_HEADER.getMessage() + message; + } } diff --git a/src/main/java/christmas/service/ProcessEventService.java b/src/main/java/christmas/service/ProcessEventService.java index eadeeee..b242dcc 100644 --- a/src/main/java/christmas/service/ProcessEventService.java +++ b/src/main/java/christmas/service/ProcessEventService.java @@ -1,4 +1,7 @@ package christmas.service; +import christmas.dto.ReceiptDTO; + public interface ProcessEventService { + ReceiptDTO sendReceipt(); } diff --git a/src/main/java/christmas/utils/InputValidator.java b/src/main/java/christmas/utils/InputValidator.java index 7a440f6..d69cc65 100644 --- a/src/main/java/christmas/utils/InputValidator.java +++ b/src/main/java/christmas/utils/InputValidator.java @@ -1,4 +1,5 @@ package christmas.utils; public interface InputValidator { + void validate(String input); } diff --git a/src/main/java/christmas/utils/impl/DateToVisitParser.java b/src/main/java/christmas/utils/impl/DateToVisitParser.java index b767af1..25375f3 100644 --- a/src/main/java/christmas/utils/impl/DateToVisitParser.java +++ b/src/main/java/christmas/utils/impl/DateToVisitParser.java @@ -1,6 +1,18 @@ package christmas.utils.impl; import christmas.utils.InputParser; +import christmas.utils.InputValidator; -public class DateToVisitParser implements InputParser { +public class DateToVisitParser implements InputParser { + private final InputValidator dateToVisitValidator; + + public DateToVisitParser(InputValidator dateToVisitValidator) { + this.dateToVisitValidator = dateToVisitValidator; + } + + @Override + public Integer parse(String rawDate) { + dateToVisitValidator.validate(rawDate); + return Integer.parseInt(rawDate); + } } diff --git a/src/main/java/christmas/utils/impl/DateToVisitValidator.java b/src/main/java/christmas/utils/impl/DateToVisitValidator.java index 645cd4d..e5e1a0a 100644 --- a/src/main/java/christmas/utils/impl/DateToVisitValidator.java +++ b/src/main/java/christmas/utils/impl/DateToVisitValidator.java @@ -1,6 +1,32 @@ package christmas.utils.impl; +import static christmas.exception.ErrorMessage.NOT_INTEGER; +import static christmas.exception.ErrorMessage.NOT_VALID_DATE; + import christmas.utils.InputValidator; public class DateToVisitValidator implements InputValidator { + private final int FIRST_DATE = 1; + private final int LAST_DATE = 31; + + @Override + public void validate(String input) { + validateInteger(input); + validateInRange(input); + } + + private void validateInteger(String date) { + try{ + Integer.parseInt(date); + } catch(NumberFormatException e) { + throw new IllegalArgumentException(NOT_INTEGER.getErrorMessage()); + } + } + + private void validateInRange(String date) { + int parsedDate = Integer.parseInt(date); + if (parsedDate < FIRST_DATE || parsedDate > LAST_DATE) { + throw new IllegalArgumentException(NOT_VALID_DATE.getErrorMessage()); + } + } } From 2672f9cec4f0a05fee9d5c498a1399f8f969e3e6 Mon Sep 17 00:00:00 2001 From: jonghwanlee Date: Wed, 27 Nov 2024 14:32:47 +0900 Subject: [PATCH 14/19] =?UTF-8?q?feat(utils):=20Orders=20=EA=B4=80?= =?UTF-8?q?=EB=A0=A8=20Parser=20=EB=B0=8F=20Validator=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../christmas/utils/impl/OrderValidator.java | 6 -- .../{OrderParser.java => OrdersParser.java} | 11 +++- .../christmas/utils/impl/OrdersValidator.java | 66 +++++++++++++++++++ 3 files changed, 76 insertions(+), 7 deletions(-) delete mode 100644 src/main/java/christmas/utils/impl/OrderValidator.java rename src/main/java/christmas/utils/impl/{OrderParser.java => OrdersParser.java} (68%) create mode 100644 src/main/java/christmas/utils/impl/OrdersValidator.java diff --git a/src/main/java/christmas/utils/impl/OrderValidator.java b/src/main/java/christmas/utils/impl/OrderValidator.java deleted file mode 100644 index d250198..0000000 --- a/src/main/java/christmas/utils/impl/OrderValidator.java +++ /dev/null @@ -1,6 +0,0 @@ -package christmas.utils.impl; - -import christmas.utils.InputValidator; - -public class OrderValidator implements InputValidator { -} diff --git a/src/main/java/christmas/utils/impl/OrderParser.java b/src/main/java/christmas/utils/impl/OrdersParser.java similarity index 68% rename from src/main/java/christmas/utils/impl/OrderParser.java rename to src/main/java/christmas/utils/impl/OrdersParser.java index dc2e7fd..bf1a87c 100644 --- a/src/main/java/christmas/utils/impl/OrderParser.java +++ b/src/main/java/christmas/utils/impl/OrdersParser.java @@ -3,12 +3,21 @@ import christmas.domain.reservation.EventOrder; import christmas.domain.reservation.Order; import christmas.utils.InputParser; +import christmas.utils.InputValidator; import java.util.ArrayList; import java.util.List; -public class OrderParser implements InputParser> { +public class OrdersParser implements InputParser> { + private final InputValidator orderValidator; + + public OrdersParser(InputValidator orderValidator) { + this.orderValidator = orderValidator; + } + @Override public List parse(String rawOrders) { + orderValidator.validate(rawOrders); + List orders = new ArrayList<>(); for (String rawOrder : rawOrders.split(",")) { String[] parts = rawOrder.split("-"); diff --git a/src/main/java/christmas/utils/impl/OrdersValidator.java b/src/main/java/christmas/utils/impl/OrdersValidator.java new file mode 100644 index 0000000..4b84ef5 --- /dev/null +++ b/src/main/java/christmas/utils/impl/OrdersValidator.java @@ -0,0 +1,66 @@ +package christmas.utils.impl; + +import static christmas.exception.ErrorMessage.NOT_VALID_ORDER_FORMAT; + +import christmas.domain.menu.impl.Menu; +import christmas.utils.InputValidator; +import java.util.HashSet; +import java.util.Set; + +public class OrdersValidator implements InputValidator { + @Override + public void validate(String rawOrders) { + validateNotEmpty(rawOrders); + validateFormat(rawOrders); + + } + + private void validateNotEmpty(String rawOrders) { + if (rawOrders == null || rawOrders.isEmpty()) { + throw new IllegalArgumentException(NOT_VALID_ORDER_FORMAT.getErrorMessage()); + } + } + + private void validateFormat(String rawOrders) { + Set dishes = new HashSet<>(); + + for (String rawOrder : rawOrders.split(",")) { + String[] parts = rawOrder.split("-"); + + validateDishName(parts[0]); + validateQuantity(parts[1]); + + String dishName = parts[0]; + int quantity = Integer.parseInt(parts[1]); + + if (dishes.contains(dishName)) { + throw new IllegalArgumentException(NOT_VALID_ORDER_FORMAT.getErrorMessage()); + } + dishes.add(dishName); + } + } + + private void validateDishName(String dishName) { + if (dishName == null || dishName.isEmpty()) { + throw new IllegalArgumentException(NOT_VALID_ORDER_FORMAT.getErrorMessage()); + } + try {Menu.valueOf(dishName); + } catch (IllegalArgumentException e) { + throw new IllegalArgumentException(NOT_VALID_ORDER_FORMAT.getErrorMessage()); + } + } + + private void validateQuantity(String rawQuantity) { + if (rawQuantity == null || rawQuantity.isEmpty()) { + throw new IllegalArgumentException(NOT_VALID_ORDER_FORMAT.getErrorMessage()); + } + try{ + int quantity = Integer.parseInt(rawQuantity); + if(quantity < 1){ + throw new IllegalArgumentException(NOT_VALID_ORDER_FORMAT.getErrorMessage()); + } + } catch (NumberFormatException e) { + throw new IllegalArgumentException(NOT_VALID_ORDER_FORMAT.getErrorMessage()); + } + } +} From ea32be51ef743cb9ecdae6fbd261308665bf612d Mon Sep 17 00:00:00 2001 From: jonghwanlee Date: Wed, 27 Nov 2024 16:13:34 +0900 Subject: [PATCH 15/19] =?UTF-8?q?feat(service):=20AcceptReservationService?= =?UTF-8?q?=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../domain/reservation/EventReservation.java | 4 +- .../service/AcceptReservationService.java | 3 ++ .../service/AcceptReservationServiceImpl.java | 37 +++++++++++++++++++ .../christmas/utils/impl/OrdersParser.java | 8 ++-- 4 files changed, 46 insertions(+), 6 deletions(-) diff --git a/src/main/java/christmas/domain/reservation/EventReservation.java b/src/main/java/christmas/domain/reservation/EventReservation.java index 7f403a4..413a514 100644 --- a/src/main/java/christmas/domain/reservation/EventReservation.java +++ b/src/main/java/christmas/domain/reservation/EventReservation.java @@ -17,8 +17,8 @@ private EventReservation(List orders,LocalDate eventDate) { } - public static void create(List orders,LocalDate eventDate){ - new EventReservation(orders,eventDate); + public static EventReservation create(List orders,LocalDate eventDate){ + return new EventReservation(orders,eventDate); } public String makeReceipt(EventProcessor totalEventProcessor){ diff --git a/src/main/java/christmas/service/AcceptReservationService.java b/src/main/java/christmas/service/AcceptReservationService.java index 2a6ce1f..345a591 100644 --- a/src/main/java/christmas/service/AcceptReservationService.java +++ b/src/main/java/christmas/service/AcceptReservationService.java @@ -1,4 +1,7 @@ package christmas.service; public interface AcceptReservationService { + void buildDateToVisit(String rawDateToVisit); + void buildOrders(String rawOrders); + void buildReservations(); } diff --git a/src/main/java/christmas/service/AcceptReservationServiceImpl.java b/src/main/java/christmas/service/AcceptReservationServiceImpl.java index e330f12..871503b 100644 --- a/src/main/java/christmas/service/AcceptReservationServiceImpl.java +++ b/src/main/java/christmas/service/AcceptReservationServiceImpl.java @@ -1,4 +1,41 @@ package christmas.service; +import christmas.domain.reservation.EventReservation; +import christmas.domain.reservation.Order; +import christmas.domain.reservation.Reservation; +import christmas.repository.ReservationRepository; +import christmas.utils.InputParser; +import java.time.LocalDate; +import java.util.List; + public class AcceptReservationServiceImpl implements AcceptReservationService { + private final ReservationRepository reservationRepository; + private final InputParser> ordersParser; + private final InputParser dateToVisitParser; + private LocalDate dateToVisit; + private List orders; + + public AcceptReservationServiceImpl(ReservationRepository reservationRepository, + InputParser> ordersParser, + InputParser dateToVisitParser) { + this.reservationRepository = reservationRepository; + this.ordersParser = ordersParser; + this.dateToVisitParser = dateToVisitParser; + } + + @Override + public void buildDateToVisit(String rawDateToVisit) { + dateToVisit = dateToVisitParser.parse(rawDateToVisit); + } + + @Override + public void buildOrders(String rawOrders) { + orders = ordersParser.parse(rawOrders); + } + + @Override + public void buildReservations() { + Reservation reservation = EventReservation.create(orders,dateToVisit); + reservationRepository.save(reservation); + } } diff --git a/src/main/java/christmas/utils/impl/OrdersParser.java b/src/main/java/christmas/utils/impl/OrdersParser.java index bf1a87c..f2856b2 100644 --- a/src/main/java/christmas/utils/impl/OrdersParser.java +++ b/src/main/java/christmas/utils/impl/OrdersParser.java @@ -8,15 +8,15 @@ import java.util.List; public class OrdersParser implements InputParser> { - private final InputValidator orderValidator; + private final InputValidator ordersValidator; - public OrdersParser(InputValidator orderValidator) { - this.orderValidator = orderValidator; + public OrdersParser(InputValidator ordersValidator) { + this.ordersValidator = ordersValidator; } @Override public List parse(String rawOrders) { - orderValidator.validate(rawOrders); + ordersValidator.validate(rawOrders); List orders = new ArrayList<>(); for (String rawOrder : rawOrders.split(",")) { From 5f479befd6201d1bd3c39dbd1b5ff4c07ef5654c Mon Sep 17 00:00:00 2001 From: jonghwanlee Date: Wed, 27 Nov 2024 16:42:28 +0900 Subject: [PATCH 16/19] =?UTF-8?q?fix:=20DateToVisitParser=20=EB=A1=9C?= =?UTF-8?q?=EC=A7=81=20=EC=83=81=20=EC=98=A4=EB=A5=98=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/christmas/utils/impl/DateToVisitParser.java | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/main/java/christmas/utils/impl/DateToVisitParser.java b/src/main/java/christmas/utils/impl/DateToVisitParser.java index 25375f3..e7cae96 100644 --- a/src/main/java/christmas/utils/impl/DateToVisitParser.java +++ b/src/main/java/christmas/utils/impl/DateToVisitParser.java @@ -2,8 +2,9 @@ import christmas.utils.InputParser; import christmas.utils.InputValidator; +import java.time.LocalDate; -public class DateToVisitParser implements InputParser { +public class DateToVisitParser implements InputParser { private final InputValidator dateToVisitValidator; public DateToVisitParser(InputValidator dateToVisitValidator) { @@ -11,8 +12,9 @@ public DateToVisitParser(InputValidator dateToVisitValidator) { } @Override - public Integer parse(String rawDate) { + public LocalDate parse(String rawDate) { dateToVisitValidator.validate(rawDate); - return Integer.parseInt(rawDate); + int day = Integer.parseInt(rawDate); + return LocalDate.of(2023, 12, day); } } From 7e83acebd525056df461ae43ca07636a5d7623c5 Mon Sep 17 00:00:00 2001 From: jonghwanlee Date: Wed, 27 Nov 2024 17:03:25 +0900 Subject: [PATCH 17/19] =?UTF-8?q?feat(controller):=20=EA=B5=AC=ED=98=84?= =?UTF-8?q?=EC=9A=94=EC=86=8C=20=EC=97=B0=EA=B2=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/README.md | 22 +++--- src/main/java/christmas/Application.java | 7 +- src/main/java/christmas/config/AppConfig.java | 72 +++++++++++++++++++ .../christmas/controller/EventController.java | 36 ++++++++++ .../christmas/controller/eventController.java | 5 -- .../service/AcceptReservationServiceImpl.java | 6 +- 6 files changed, 128 insertions(+), 20 deletions(-) create mode 100644 src/main/java/christmas/controller/EventController.java delete mode 100644 src/main/java/christmas/controller/eventController.java diff --git a/docs/README.md b/docs/README.md index f3a2031..299b09e 100644 --- a/docs/README.md +++ b/docs/README.md @@ -37,7 +37,7 @@ #### 혜택 금액에 따른 12월 이벤트 배지 부여 -- [ ] 총혜택 금액에 따라 다른 이벤트 배지를 부여 +- [x] 총혜택 금액에 따라 다른 이벤트 배지를 부여 - 5천 원 이상: 별 - 1만 원 이상: 트리 - 2만 원 이상: 산타 @@ -54,20 +54,20 @@ - [ ] 이벤트 플래너 안내 문구 출력 - [ ] 예상 방문 날짜 입력 안내 문구 출력 -- [ ] 올바르지 않은 값 입력 시 에러 메세지 출력 후 재입력 받음 - - [ ] 방문할 날짜는 1 이상 31 이하의 숫자로만 입력받 - - [ ] 1 이상 31 이하의 숫자가 아닌 경우, "[ERROR] 유효하지 않은 날짜입니다. 다시 입력해 주세요."라는 에러 메시지 출력 - - [ ] 모든 에러 메시지는 "[ERROR]"로 시작하도록 작성 +- [x] 올바르지 않은 값 입력 시 에러 메세지 출력 후 재입력 받음 + - [x] 방문할 날짜는 1 이상 31 이하의 숫자로만 입력받 + - [x] 1 이상 31 이하의 숫자가 아닌 경우, "[ERROR] 유효하지 않은 날짜입니다. 다시 입력해 주세요."라는 에러 메시지 출력 + - [x] 모든 에러 메시지는 "[ERROR]"로 시작하도록 작성 - [x] 입력값에 따른 ```EventReservation``` 객체 생성 - [ ] 주문할 메뉴와 개수 입력 안내 문구 출력 -- [ ] 올바르지 않은 값 입력 시 에러 메세지 출력 후 재입력 받음 - - [ ] 고객이 메뉴판에 없는 메뉴를 입력하는 경우, "[ERROR] 유효하지 않은 주문입니다. 다시 입력해 주세요."라는 에러 메시지 출력 - - [ ] 메뉴의 개수는 1 이상의 숫자만 입력. 이외의 입력값은 "[ERROR] 유효하지 않은 주문입니다. 다시 입력해 주세요."라는 에러 메시지 출력 - - [ ] 메뉴 형식이 예시와 다른 경우, "[ERROR] 유효하지 않은 주문입니다. 다시 입력해 주세요."라는 에러 메시지 출력 - - [ ] 중복 메뉴를 입력한 경우(e.g. 시저샐러드-1,시저샐러드-1), "[ERROR] 유효하지 않은 주문입니다. 다시 입력해 주세요."라는 에러 메시지 출력 - - [ ] 모든 에러 메시지는 "[ERROR]"로 시작하도록 작성 +- [x] 올바르지 않은 값 입력 시 에러 메세지 출력 후 재입력 받음 + - [x] 고객이 메뉴판에 없는 메뉴를 입력하는 경우, "[ERROR] 유효하지 않은 주문입니다. 다시 입력해 주세요."라는 에러 메시지 출력 + - [x] 메뉴의 개수는 1 이상의 숫자만 입력. 이외의 입력값은 "[ERROR] 유효하지 않은 주문입니다. 다시 입력해 주세요."라는 에러 메시지 출력 + - [x] 메뉴 형식이 예시와 다른 경우, "[ERROR] 유효하지 않은 주문입니다. 다시 입력해 주세요."라는 에러 메시지 출력 + - [x] 중복 메뉴를 입력한 경우(e.g. 시저샐러드-1,시저샐러드-1), "[ERROR] 유효하지 않은 주문입니다. 다시 입력해 주세요."라는 에러 메시지 출력 + - [x] 모든 에러 메시지는 "[ERROR]"로 시작하도록 작성 - [ ] 주문 결과 출력 diff --git a/src/main/java/christmas/Application.java b/src/main/java/christmas/Application.java index b9ba6a2..50ca474 100644 --- a/src/main/java/christmas/Application.java +++ b/src/main/java/christmas/Application.java @@ -1,7 +1,12 @@ package christmas; +import christmas.config.AppConfig; +import christmas.controller.EventController; + public class Application { public static void main(String[] args) { - // TODO: 프로그램 구현 + EventController eventController = AppConfig.getEventController(); + eventController.run(); + } } diff --git a/src/main/java/christmas/config/AppConfig.java b/src/main/java/christmas/config/AppConfig.java index 3f45c4e..a830d44 100644 --- a/src/main/java/christmas/config/AppConfig.java +++ b/src/main/java/christmas/config/AppConfig.java @@ -1,4 +1,76 @@ package christmas.config; +import christmas.controller.EventController; +import christmas.domain.event.DiscountProcessor; +import christmas.domain.event.EventProcessor; +import christmas.domain.event.Gift; +import christmas.domain.event.impl.BadgeGift; +import christmas.domain.event.impl.ChampagneGift; +import christmas.domain.event.impl.DDayDiscount; +import christmas.domain.event.impl.SpecialDiscount; +import christmas.domain.event.impl.TotalEventProcessor; +import christmas.domain.event.impl.WeekdaysDiscount; +import christmas.domain.event.impl.WeekendDiscount; +import christmas.domain.reservation.Order; +import christmas.domain.reservation.Reservation; +import christmas.repository.ReservationRepository; +import christmas.repository.SingleRepository; +import christmas.service.AcceptReservationService; +import christmas.service.AcceptReservationServiceImpl; +import christmas.service.ProcessEventService; +import christmas.service.ProcessEventServiceImpl; +import christmas.utils.InputParser; +import christmas.utils.InputValidator; +import christmas.utils.impl.DateToVisitParser; +import christmas.utils.impl.DateToVisitValidator; +import christmas.utils.impl.OrdersParser; +import christmas.utils.impl.OrdersValidator; +import christmas.view.InputView; +import christmas.view.OutputView; +import christmas.view.impl.ConsoleInputView; +import christmas.view.impl.ConsoleOutputView; +import java.time.LocalDate; +import java.util.List; + public class AppConfig { + + private final static OutputView consoleOutputView = new ConsoleOutputView(); + private final static InputView consoleInputView = new ConsoleInputView(); + + private final static SingleRepository reservationRepository = new ReservationRepository(); + + private final static InputValidator dateToVisitValidator = new DateToVisitValidator(); + private final static InputValidator ordersValidator = new OrdersValidator(); + + private final static InputParser dateToVisitParser = new DateToVisitParser(dateToVisitValidator); + private final static InputParser> ordersParser = new OrdersParser(ordersValidator); + + private final static DiscountProcessor dDayDiscount = new DDayDiscount(); + private final static DiscountProcessor specialDiscount = new SpecialDiscount(); + private final static DiscountProcessor> weekdaysDiscount = new WeekdaysDiscount(); + private final static DiscountProcessor> weekendDiscount = new WeekendDiscount(); + + private final static Gift badgeGift = new BadgeGift(); + private final static Gift champagneGift = new ChampagneGift(); + + private final static EventProcessor totalEventProcessor = new TotalEventProcessor(dDayDiscount, + specialDiscount, + weekdaysDiscount, + weekendDiscount, + champagneGift + ,badgeGift); + + private final static AcceptReservationService acceptReservationServiceImpl = new AcceptReservationServiceImpl(reservationRepository, + ordersParser, + dateToVisitParser); + private final static ProcessEventService processEventService = new ProcessEventServiceImpl(reservationRepository, totalEventProcessor); + + private final static EventController eventController = new EventController(consoleInputView, + consoleOutputView, + acceptReservationServiceImpl, + processEventService); + + public static EventController getEventController() { + return eventController; + } } diff --git a/src/main/java/christmas/controller/EventController.java b/src/main/java/christmas/controller/EventController.java new file mode 100644 index 0000000..f53a5a4 --- /dev/null +++ b/src/main/java/christmas/controller/EventController.java @@ -0,0 +1,36 @@ +package christmas.controller; + +import christmas.dto.ReceiptDTO; +import christmas.service.AcceptReservationService; +import christmas.service.ProcessEventService; +import christmas.view.InputView; +import christmas.view.OutputView; + +public class EventController { + private final InputView inputView; + private final OutputView outputView; + private final AcceptReservationService acceptReservationService; + private final ProcessEventService processEventService; + + public EventController(InputView inputView, + OutputView outputView, + AcceptReservationService acceptReservationService, + ProcessEventService processEventService) { + + this.inputView = inputView; + this.outputView = outputView; + this.acceptReservationService = acceptReservationService; + this.processEventService = processEventService; + } + + public void run(){ + outputView.printWelcomeMessage(); + + acceptReservationService.buildDateToVisit(inputView.readDate()); + acceptReservationService.buildOrders(inputView.readOrders()); + acceptReservationService.buildReservations(); + + ReceiptDTO receiptDTO = processEventService.sendReceipt(); + outputView.printReceipt(receiptDTO); + } +} diff --git a/src/main/java/christmas/controller/eventController.java b/src/main/java/christmas/controller/eventController.java deleted file mode 100644 index 30358c4..0000000 --- a/src/main/java/christmas/controller/eventController.java +++ /dev/null @@ -1,5 +0,0 @@ -package christmas.controller; - -public class eventController -{ -} diff --git a/src/main/java/christmas/service/AcceptReservationServiceImpl.java b/src/main/java/christmas/service/AcceptReservationServiceImpl.java index 871503b..dd2e72f 100644 --- a/src/main/java/christmas/service/AcceptReservationServiceImpl.java +++ b/src/main/java/christmas/service/AcceptReservationServiceImpl.java @@ -3,19 +3,19 @@ import christmas.domain.reservation.EventReservation; import christmas.domain.reservation.Order; import christmas.domain.reservation.Reservation; -import christmas.repository.ReservationRepository; +import christmas.repository.SingleRepository; import christmas.utils.InputParser; import java.time.LocalDate; import java.util.List; public class AcceptReservationServiceImpl implements AcceptReservationService { - private final ReservationRepository reservationRepository; + private final SingleRepository reservationRepository; private final InputParser> ordersParser; private final InputParser dateToVisitParser; private LocalDate dateToVisit; private List orders; - public AcceptReservationServiceImpl(ReservationRepository reservationRepository, + public AcceptReservationServiceImpl(SingleRepository reservationRepository, InputParser> ordersParser, InputParser dateToVisitParser) { this.reservationRepository = reservationRepository; From 193fd4b828dba3b792737813a1e6703d5c97c506 Mon Sep 17 00:00:00 2001 From: jonghwanlee Date: Wed, 27 Nov 2024 17:47:58 +0900 Subject: [PATCH 18/19] =?UTF-8?q?feat(utils):=20=EC=9D=B4=EB=B2=A4?= =?UTF-8?q?=ED=8A=B8=20=EC=A3=BC=EC=9D=98=20=EC=82=AC=ED=95=AD=20=EA=B4=80?= =?UTF-8?q?=EB=A0=A8=20=EB=A1=9C=EC=A7=81=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/README.md | 38 +++++++++---------- .../christmas/utils/impl/OrdersValidator.java | 13 +++++++ 2 files changed, 32 insertions(+), 19 deletions(-) diff --git a/docs/README.md b/docs/README.md index 299b09e..32fcf39 100644 --- a/docs/README.md +++ b/docs/README.md @@ -44,25 +44,25 @@ #### 고객에게 안내할 이벤트 주의 사항 -- [ ] 총주문 금액 10,000원 이상부터 이벤트가 적용 -- [ ] 음료만 주문 시, 주문 불가 -- [ ] 메뉴는 한 번에 최대 20개까지만 주문 가능 +- [] 총주문 금액 10,000원 이상부터 이벤트가 적용 +- [x] 음료만 주문 시, 주문 불가 +- [x] 메뉴는 한 번에 최대 20개까지만 주문 가능 (e.g. 시저샐러드-1, 티본스테이크-1, 크리스마스파스타-1, 제로콜라-3, 아이스크림-1의 총개수는 7개) ### 프로그램 Work Flow -- [ ] 이벤트 플래너 안내 문구 출력 -- [ ] 예상 방문 날짜 입력 안내 문구 출력 -- [x] 올바르지 않은 값 입력 시 에러 메세지 출력 후 재입력 받음 +- [x] 이벤트 플래너 안내 문구 출력 +- [x] 예상 방문 날짜 입력 안내 문구 출력 +- [ ] 올바르지 않은 값 입력 시 에러 메세지 출력 후 재입력 받음 - [x] 방문할 날짜는 1 이상 31 이하의 숫자로만 입력받 - [x] 1 이상 31 이하의 숫자가 아닌 경우, "[ERROR] 유효하지 않은 날짜입니다. 다시 입력해 주세요."라는 에러 메시지 출력 - [x] 모든 에러 메시지는 "[ERROR]"로 시작하도록 작성 - [x] 입력값에 따른 ```EventReservation``` 객체 생성 -- [ ] 주문할 메뉴와 개수 입력 안내 문구 출력 -- [x] 올바르지 않은 값 입력 시 에러 메세지 출력 후 재입력 받음 +- [x] 주문할 메뉴와 개수 입력 안내 문구 출력 +- [ ] 올바르지 않은 값 입력 시 에러 메세지 출력 후 재입력 받음 - [x] 고객이 메뉴판에 없는 메뉴를 입력하는 경우, "[ERROR] 유효하지 않은 주문입니다. 다시 입력해 주세요."라는 에러 메시지 출력 - [x] 메뉴의 개수는 1 이상의 숫자만 입력. 이외의 입력값은 "[ERROR] 유효하지 않은 주문입니다. 다시 입력해 주세요."라는 에러 메시지 출력 - [x] 메뉴 형식이 예시와 다른 경우, "[ERROR] 유효하지 않은 주문입니다. 다시 입력해 주세요."라는 에러 메시지 출력 @@ -70,15 +70,15 @@ - [x] 모든 에러 메시지는 "[ERROR]"로 시작하도록 작성 -- [ ] 주문 결과 출력 - - [ ] 미리보기 안내문 출력 - - [ ] 주문 메뉴 종류 및 갯수 출력 - - [ ] 할인 전 총 주문금액 출력 - - [ ] 증정 메뉴 출력 - - [ ] 없을 시 "없음" 출력 - - [ ] 혜택 내역 출력 - - [ ] 없을 시 "없음" 출력 - - [ ] 총혜택 금액 출력 - - [ ] 할인 후 예상 결제 금액 출력 - - [ ] 12월 이벤트 배지 출력 +- [x] 주문 결과 출력 + - [x] 미리보기 안내문 출력 + - [x] 주문 메뉴 종류 및 갯수 출력 + - [x] 할인 전 총 주문금액 출력 + - [x] 증정 메뉴 출력 + - [x] 없을 시 "없음" 출력 + - [x] 혜택 내역 출력 + - [x] 없을 시 "없음" 출력 + - [x] 총혜택 금액 출력 + - [x] 할인 후 예상 결제 금액 출력 + - [x] 12월 이벤트 배지 출력 \ No newline at end of file diff --git a/src/main/java/christmas/utils/impl/OrdersValidator.java b/src/main/java/christmas/utils/impl/OrdersValidator.java index 4b84ef5..330525a 100644 --- a/src/main/java/christmas/utils/impl/OrdersValidator.java +++ b/src/main/java/christmas/utils/impl/OrdersValidator.java @@ -27,17 +27,30 @@ private void validateFormat(String rawOrders) { for (String rawOrder : rawOrders.split(",")) { String[] parts = rawOrder.split("-"); + if (parts.length > 40 || parts.length %2 == 1) { + throw new IllegalArgumentException(NOT_VALID_ORDER_FORMAT.getErrorMessage()); + } + validateDishName(parts[0]); validateQuantity(parts[1]); String dishName = parts[0]; int quantity = Integer.parseInt(parts[1]); + if (dishes.contains(dishName)) { throw new IllegalArgumentException(NOT_VALID_ORDER_FORMAT.getErrorMessage()); } dishes.add(dishName); } + + for (String dishName : dishes) { + if( !Menu.valueOf(dishName).getCategory().equals("BEVERAGE")){ + return; + } + } + + throw new IllegalArgumentException(NOT_VALID_ORDER_FORMAT.getErrorMessage()); } private void validateDishName(String dishName) { From 281e7914e2288e57018ed4073cf6f01bf94b3176 Mon Sep 17 00:00:00 2001 From: jonghwanlee Date: Wed, 27 Nov 2024 18:09:04 +0900 Subject: [PATCH 19/19] =?UTF-8?q?feat(domain):=20=EC=B6=9C=EB=A0=A5=20?= =?UTF-8?q?=EB=A1=9C=EC=A7=81=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../event/impl/TotalEventProcessor.java | 33 +++++++++++++++---- .../domain/reservation/EventReservation.java | 2 +- 2 files changed, 28 insertions(+), 7 deletions(-) diff --git a/src/main/java/christmas/domain/event/impl/TotalEventProcessor.java b/src/main/java/christmas/domain/event/impl/TotalEventProcessor.java index dc68fe9..705ac8e 100644 --- a/src/main/java/christmas/domain/event/impl/TotalEventProcessor.java +++ b/src/main/java/christmas/domain/event/impl/TotalEventProcessor.java @@ -37,12 +37,17 @@ public TotalEventProcessor(DiscountProcessor dDayDiscount, public String getEventResult(List orders, LocalDate date, int totalPrice) { StringBuilder builder = new StringBuilder(); + if (totalPrice > 10000){ + getLessMoneyResult(totalPrice,builder); + return builder.toString(); + } + builder.append("\n<증정메뉴>\n"); int champagneDiscount = getChampagneDiscount(totalPrice, builder); int totalDiscountAmount = champagneDiscount; - builder.append("\n혜택 내역\n"); + builder.append("\n<혜택 내역>\n"); totalDiscountAmount += getDDayDiscount(date,builder); if(weekends.contains(date.getDayOfWeek()) ) { totalDiscountAmount += getWeekendDiscount(orders,builder); @@ -55,7 +60,7 @@ public String getEventResult(List orders, LocalDate date, int totalPrice) builder.append("증정 이벤트: -").append(champagneDiscount).append("원").append("\n"); } - builder.append("\n<총혜택 금액>\n-").append(totalDiscountAmount).append("원").append("\n"); + builder.append("\n<총혜택 금액>\n").append( (-1)*totalDiscountAmount).append("원").append("\n"); builder.append("\n<할인 후 예상 결제 금액>\n").append(totalPrice - totalDiscountAmount).append("원").append("\n"); builder.append("\n<12월 이벤트 배지>\n").append(badgeGift.getGiftOrNot(totalDiscountAmount)); @@ -75,29 +80,45 @@ private int getChampagneDiscount(int totalPrice, StringBuilder result) { private int getDDayDiscount(LocalDate date, StringBuilder result) { int dDayDiscountAmount = dDayDiscount.processDiscount(date); - result.append("크리스마스 디데이 할인: -").append(dDayDiscountAmount).append("원").append("\n"); + if (dDayDiscountAmount != 0) { + result.append("크리스마스 디데이 할인: -").append(dDayDiscountAmount).append("원").append("\n"); + } + return dDayDiscountAmount; } private int getWeekendDiscount(List orders, StringBuilder result) { int weekendDiscountAmount = weekendDiscount.processDiscount(orders); - result.append("주말 할인: -").append(weekendDiscountAmount).append("원").append("\n"); + if (weekendDiscountAmount != 0) { + result.append("주말 할인: -").append(weekendDiscountAmount).append("원").append("\n"); + } return weekendDiscountAmount; } private int getWeekdaysDiscount(List orders, StringBuilder result) { int weekdaysDiscountAmount = weekdaysDiscount.processDiscount(orders); - result.append("평일 할인: -").append(weekdaysDiscountAmount).append("원").append("\n"); + if (weekdaysDiscountAmount != 0) { + result.append("평일 할인: -").append(weekdaysDiscountAmount).append("원").append("\n"); + } return weekdaysDiscountAmount; } private int getSpecialDiscount(LocalDate date, StringBuilder result) { int specialDiscountAmount = specialDiscount.processDiscount(date); - result.append("특별 할인: -").append(specialDiscountAmount).append("원").append("\n"); + if (specialDiscountAmount != 0) { + result.append("특별 할인: -").append(specialDiscountAmount).append("원").append("\n"); + } return specialDiscountAmount; } + private void getLessMoneyResult(int totalPrice, StringBuilder builder) { + builder.append("\n<증정 메뉴>\n없음\n").append("\n<혜택 내역>\n없음\n").append("\n<총혜택 금액>\n0원\n") + .append("\n<할인 후 예상 결재 금액>\n").append(totalPrice).append("원\n") + .append("\n<12월 이벤트 배지>\n없음"); + + } + } diff --git a/src/main/java/christmas/domain/reservation/EventReservation.java b/src/main/java/christmas/domain/reservation/EventReservation.java index 413a514..edf311b 100644 --- a/src/main/java/christmas/domain/reservation/EventReservation.java +++ b/src/main/java/christmas/domain/reservation/EventReservation.java @@ -29,7 +29,7 @@ public String makeReceipt(EventProcessor totalEventProcessor){ for(Order order : orders){ builder.append(order.getDishName()).append(" ").append(order.getQuantity()).append("개\n"); } - builder.append("<할인 전 총주문 금액>\n").append(totalPrice).append("원\n"); + builder.append("\n<할인 전 총주문 금액>\n").append(totalPrice).append("원\n"); builder.append(totalEventProcessor.getEventResult(orders,eventDate,totalPrice));