Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Seokwoo #19

Open
wants to merge 17 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 3 additions & 1 deletion src/main/java/christmas/Application.java
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
package christmas;

import christmas.controller.MainController;

public class Application {
public static void main(String[] args) {
// TODO: 프로그램 구현
MainController.start();
}
}
18 changes: 18 additions & 0 deletions src/main/java/christmas/controller/BadgeController.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
package christmas.controller;

import christmas.domain.Discount;
import christmas.global.constants.badge.Badge;
import christmas.service.BadgeService;

import static christmas.view.output.OutputMessage.BADGE_TITLE;
import static christmas.view.output.OutputView.printBadge;
import static christmas.view.output.OutputView.printStaticMessage;

public class BadgeController {
public static void printBadgeName(Discount discount) {
Badge badge = BadgeService.getBadge(discount);

printStaticMessage(BADGE_TITLE);
printBadge(badge);
}
}
55 changes: 55 additions & 0 deletions src/main/java/christmas/controller/DiscountController.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
package christmas.controller;

import christmas.domain.Discount;
import christmas.domain.Gift;
import christmas.domain.Orders;
import christmas.domain.VisitDay;
import christmas.global.util.MoneyFormating;
import christmas.service.DiscountService;

import java.util.List;

import static christmas.view.output.OutputMessage.*;
import static christmas.view.output.OutputView.*;
import static java.lang.String.format;

public class DiscountController {
public static Discount printDiscount(VisitDay visitDay, Orders orders, Gift gift) {
Discount discount = DiscountService.getDiscount(visitDay, orders, gift);
List<String> eventMenu = DiscountService.makeEventList(discount, visitDay, gift);
int totalDiscount = discount.getTotalDiscount();
int finalPayment = orders.getPreDiscountTotal() - discount.getTotalDiscount() + discount.getGiftDiscount();

printEventList(eventMenu);
printTotalDiscount(totalDiscount);
printFinalPayment(finalPayment);

return discount;
}

private static void printEventList(List<String> eventMenu) {
printStaticMessage(EVENT_LIST_TITLE);
if(eventMenu.isEmpty()) eventMenu.add(NONE_MESSAGE.getMessage());
printStringList(eventMenu);
printNewLine();
}

private static void printTotalDiscount(int totalDiscount) {
printStaticMessage(TOTAL_PRICE_TITLE);

if(totalDiscount == 0) {
printDynamicMessage(format(ORDER_PRICE_MESSAGE.getMessage(), MoneyFormating.convertMoneyFormat(totalDiscount)));
printNewLine();
return;
}

printDynamicMessage(format(DISCOUNT_PRICE_MESSAGE.getMessage(), MoneyFormating.convertMoneyFormat(totalDiscount)));
printNewLine();
}

private static void printFinalPayment(int finalPayment) {
printStaticMessage(FINAL_PAYMENT_TITLE);
printDynamicMessage(format(ORDER_PRICE_MESSAGE.getMessage(), MoneyFormating.convertMoneyFormat(finalPayment)));
printNewLine();
}
}
32 changes: 32 additions & 0 deletions src/main/java/christmas/controller/GiftController.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
package christmas.controller;

import christmas.domain.Gift;
import christmas.domain.Orders;
import christmas.service.GiftService;

import static christmas.view.output.OutputMessage.*;
import static christmas.view.output.OutputView.*;
import static java.lang.String.format;

public class GiftController {
public static Gift getGift(Orders orders) {
Gift gift = GiftService.makeGift(orders);

printStaticMessage(GIFT_MENU_TITLE);

if (isNone(gift)) {
printStaticMessage(NONE_MESSAGE);
printNewLine();
return gift;
}

printDynamicMessage(format(QUANTITY_MESSAGE.getMessage(), gift.getMenu().getName(), gift.getQuantity()));
printNewLine();
return gift;
}

private static boolean isNone(Gift gift) {
return gift.getQuantity() == 0;
}

}
21 changes: 21 additions & 0 deletions src/main/java/christmas/controller/MainController.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
package christmas.controller;

import christmas.domain.Discount;
import christmas.domain.Gift;
import christmas.domain.VisitDay;
import christmas.domain.Orders;

import static christmas.view.output.OutputMessage.INFORMATION_MESSAGE;
import static christmas.view.output.OutputView.printStaticMessage;

public class MainController {
public static void start() {
printStaticMessage(INFORMATION_MESSAGE);

VisitDay visitDay = VisitDayController.requestVisitDay();
Orders orders = OrderController.printOrders(visitDay);
Gift gift = GiftController.getGift(orders);
Discount discount = DiscountController.printDiscount(visitDay, orders, gift);
BadgeController.printBadgeName(discount);
}
}
49 changes: 49 additions & 0 deletions src/main/java/christmas/controller/OrderController.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
package christmas.controller;

import christmas.domain.Order;
import christmas.domain.Orders;
import christmas.domain.VisitDay;
import christmas.global.handler.ExceptionHandler;
import christmas.global.util.MoneyFormating;
import christmas.service.OrderService;
import christmas.view.input.InputView;

import java.util.List;

import static christmas.view.output.OutputMessage.*;
import static christmas.view.output.OutputView.*;
import static java.lang.String.format;

public class OrderController {
public static Orders printOrders(VisitDay visitDay) {
Orders orders = makeOrders();

List<String> orderMenu = OrderService.makeOrderFormat(orders.getOrderList());
String preDiscountTotal = MoneyFormating.convertMoneyFormat(orders.getPreDiscountTotal());

printDynamicMessage(format(EVENT_PREVIEW_MESSAGE.getMessage(), visitDay.getVisitDay()));
printNewLine();

printStaticMessage(ORDER_MENU_TITLE);
printStringList(orderMenu);
printNewLine();

printStaticMessage(PRE_DISCOUNT_TOTAL_TITLE);
printDynamicMessage(format(ORDER_PRICE_MESSAGE.getMessage(), preDiscountTotal));
printNewLine();

return orders;
}

private static Orders makeOrders() {
return ExceptionHandler.execute(OrderController::requestOrders);
}

private static Orders requestOrders() {
printStaticMessage(ASK_MENU_AND_COUNT_MESSAGE);

String input = InputView.input();

return OrderService.getOrders(input);
}
}
40 changes: 40 additions & 0 deletions src/main/java/christmas/controller/VisitDayController.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
package christmas.controller;

import christmas.domain.VisitDay;
import christmas.global.exception.InputException;
import christmas.global.handler.ExceptionHandler;
import christmas.view.input.InputView;

import static christmas.global.exception.ErrorMessage.INVALID_DAY_ERROR;
import static christmas.view.output.OutputMessage.ASK_VISIT_DAY_MESSAGE;
import static christmas.view.output.OutputView.printStaticMessage;

public class VisitDayController {

public static VisitDay requestVisitDay() {
return ExceptionHandler.execute(VisitDayController::getVisitDay);
}

private static VisitDay getVisitDay() {
printStaticMessage(ASK_VISIT_DAY_MESSAGE);

String input = InputView.input();

if(!isDigit(input)) throw new InputException(INVALID_DAY_ERROR);

int day = Integer.parseInt(input);

if(!isValidDay(day)) throw new InputException(INVALID_DAY_ERROR);

return VisitDay.createVisitDay(day);
}

private static boolean isDigit(String input) {
return input.matches("[0-9]+");
}

private static boolean isValidDay(int day) {
return day >= 1 && day <= 31;
}

}
48 changes: 48 additions & 0 deletions src/main/java/christmas/domain/Discount.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
package christmas.domain;

public class Discount {
private final int christmasDiscount;
private final int weekdayDiscount;
private final int weekendDiscount;
private final int specialDiscount;
private final int giftDiscount;
private final int totalDiscount;

private Discount(int christmasDiscount, int weekdayDiscount, int weekendDiscount, int specialDiscount, int giftDiscount, int totalDiscount) {
this.christmasDiscount = christmasDiscount;
this.weekdayDiscount = weekdayDiscount;
this.weekendDiscount = weekendDiscount;
this.specialDiscount = specialDiscount;
this.giftDiscount = giftDiscount;
this.totalDiscount = totalDiscount;
}

public int getChristmasDiscount() {
return christmasDiscount;
}

public int getWeekdayDiscount() {
return weekdayDiscount;
}

public int getWeekendDiscount() {
return weekendDiscount;
}

public int getSpecialDiscount() {
return specialDiscount;
}

public int getGiftDiscount() {
return giftDiscount;
}

public int getTotalDiscount() {
return totalDiscount;
}

public static Discount createDiscount( int christmasDiscount, int weekdayDiscount, int weekendDiscount, int specialDiscount, int giftDiscount, int totalDiscount ) {
return new Discount(christmasDiscount, weekdayDiscount, weekendDiscount, specialDiscount, giftDiscount, totalDiscount );
}

}
25 changes: 25 additions & 0 deletions src/main/java/christmas/domain/Gift.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
package christmas.domain;

import christmas.global.constants.menu.Menu;

public class Gift {
private final Menu menu;
private final int quantity;

private Gift(Menu menu, int quantity) {
this.menu = menu;
this.quantity = quantity;
}

public Menu getMenu() {
return menu;
}

public int getQuantity() {
return quantity;
}

public static Gift createGift(Menu menu, int quantity) {
return new Gift(menu, quantity);
}
}
25 changes: 25 additions & 0 deletions src/main/java/christmas/domain/Order.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
package christmas.domain;

import christmas.global.constants.menu.Menu;

public class Order {
private final Menu menu;
private final int quantity;

public Order(Menu menu, int quantity) {
this.menu = menu;
this.quantity = quantity;
}

public static Order createOrder(Menu menu, int quantity) {
return new Order(menu, quantity);
}

public int getQuantity() {
return quantity;
}

public Menu getMenu() {
return menu;
}
}
25 changes: 25 additions & 0 deletions src/main/java/christmas/domain/Orders.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
package christmas.domain;

import java.util.List;

public class Orders {
private final List<Order> orderList;
private final int preDiscountTotal;

private Orders(List<Order> orderList, int preDiscountTotal) {
this.orderList = orderList;
this.preDiscountTotal = preDiscountTotal;
}

public static Orders createOrders(List<Order> orderList, int preDiscountTotal) {
return new Orders(orderList, preDiscountTotal);
}

public int getPreDiscountTotal() {
return preDiscountTotal;
}

public List<Order> getOrderList() {
return orderList;
}
}
17 changes: 17 additions & 0 deletions src/main/java/christmas/domain/VisitDay.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
package christmas.domain;

public class VisitDay {
private final int visitDay;

private VisitDay(int visitDay) {
this.visitDay = visitDay;
}

public static VisitDay createVisitDay(int visitDay) {
return new VisitDay(visitDay);
}

public int getVisitDay() {
return visitDay;
}
}
Loading