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

[크리스마스] 코드 리뷰 부탁드립니다! #1

Open
wants to merge 51 commits into
base: review
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from 1 commit
Commits
Show all changes
51 commits
Select commit Hold shift + click to select a range
8e1abb6
docs : 기능 요구사항 초안 정리
youngsu5582 Nov 11, 2023
5d4a71e
feat : 입출력 담당 하는 InputView,OutputView 추가
youngsu5582 Nov 11, 2023
199640c
feat : Parser , CustomException 추가
youngsu5582 Nov 11, 2023
78d259d
feat : Calendar , DayOfWeek 추가
youngsu5582 Nov 11, 2023
9674ca5
feat : Date 를 생성 하는 기능 추가
youngsu5582 Nov 11, 2023
ec5663b
feat : Category , Menu , MenuItem 추가
youngsu5582 Nov 11, 2023
10a9bad
feat : MenuCatalog 추가
youngsu5582 Nov 11, 2023
8a7f8b1
feat : RequestOrder 추가
youngsu5582 Nov 11, 2023
307c46e
feat : Order 추가
youngsu5582 Nov 12, 2023
eec9b9a
feat : OrderResult 추가 , MenuCatalog 함수 변경
youngsu5582 Nov 12, 2023
66303fe
feat : Bill 추가
youngsu5582 Nov 12, 2023
2b7addd
feat : DayOfWeek 에 함수 추가
youngsu5582 Nov 12, 2023
24930ab
feat : Event,DiscountEvent,PresentEvent 추가
youngsu5582 Nov 12, 2023
8e2d438
feat : Event,DiscountEvent,PresentEvent 제네릭 타입 추가
youngsu5582 Nov 12, 2023
0227308
feat : WeekendDiscountEvent 기능 추가
youngsu5582 Nov 12, 2023
4e8dc13
feat : WeekdayDiscountEvent,ChristmasDiscountEvent 추가
youngsu5582 Nov 12, 2023
7b950dd
feat : SpecialDiscountEvent,ChampagnePresentEvent 추가
youngsu5582 Nov 13, 2023
7d90095
feat : DiscountEventReward , PresentEventReward 추가
youngsu5582 Nov 13, 2023
8b5dfa8
feat : 기존 Event 리턴 타입 변경
youngsu5582 Nov 13, 2023
d9bd891
feat : EventReward 추가
youngsu5582 Nov 13, 2023
6883c9d
feat : 혜택을 모오는 Reward 추가
youngsu5582 Nov 13, 2023
8bfd238
feat : Badge 추가
youngsu5582 Nov 13, 2023
f5cf59d
feat : 방문할 날짜를 입력 하는 1번 기능 요구 사항 완료
youngsu5582 Nov 13, 2023
a23b4a1
feat : 주문할 메뉴와 메뉴 개수 입력 하는 2번 기능 요구 사항 완료
youngsu5582 Nov 13, 2023
6a1ad99
fix : 누락된 파일 추가
youngsu5582 Nov 13, 2023
5259f91
feat : 숫자 변환 해주는 Formatter 추가
youngsu5582 Nov 13, 2023
a28a077
feat : 적용 가능한 이벤트 혜택 적용 하는 3번 기능 요구 사항 완료
youngsu5582 Nov 13, 2023
55540fa
fix : 잘못 기입한 상수명 수정
youngsu5582 Nov 13, 2023
ed16c00
feat : 총 혜택 금액 따라 이벤트 뱃지 부여 하는 4번 기능 요구 사항 완료
youngsu5582 Nov 14, 2023
163e909
feat : 숫자에 따라 , 포맷 결정 하는 formatBasedOnNumber 추가
youngsu5582 Nov 14, 2023
f72430a
feat : 모든 기능 완료에 따른 Application 에 GameController 추가
youngsu5582 Nov 14, 2023
6b8c209
refactor : 에러 메시지 내용 변경 및 불필요한 파일 제거
youngsu5582 Nov 14, 2023
f33c8bc
refactor : 에러 메시지 내용 변경 , 구분자 상수 파일로 이동
youngsu5582 Nov 14, 2023
4a00ee2
refactor : 배열 생성중 , 반복문 구문 분리
youngsu5582 Nov 14, 2023
d67a2c7
feat : RewardDto getTotalDiscountReward 추가
youngsu5582 Nov 14, 2023
54276b0
feat : Date Service try - catch 문 추가
youngsu5582 Nov 14, 2023
e0d8cf1
refactor : 코드 전반 적인 리팩토링
youngsu5582 Nov 14, 2023
eba4437
refactor : Coverage 위한 불 필요한 코드 제거
youngsu5582 Nov 14, 2023
830c2b7
refactor : Date Domain 관련 리팩토링
youngsu5582 Nov 14, 2023
dbbd4fe
refactor : Order Domain 관련 리팩토링
youngsu5582 Nov 14, 2023
8e0860e
refactor : Event 파일들 Discount , Present 로 구분
youngsu5582 Nov 14, 2023
a955741
refactor : Event 이름 상수 파일로 이동
youngsu5582 Nov 14, 2023
39ac7eb
refactor : Domain 폴더 변경
youngsu5582 Nov 14, 2023
fbb42fc
refactor : import 구문 순서 변경
youngsu5582 Nov 14, 2023
48f694b
refactor : 제출 전 리팩토링
youngsu5582 Nov 14, 2023
a5c7c16
test : 테스트 케이스 추가
youngsu5582 Nov 14, 2023
0367681
feat : Event,Service,Controller Factory 추가
youngsu5582 Nov 15, 2023
562c727
test : 파일명 변경 및 테스트 코드 추가
youngsu5582 Nov 15, 2023
0a7415e
refactor : 테스트 함수명 변경 , 누락 함수 추가
youngsu5582 Nov 15, 2023
cfce5be
refactor : Test 내 Domain 파일 폴더별 분리
youngsu5582 Nov 15, 2023
ba73ffc
docs : 기능 전부 구현 후 README 상세 내용 추가
youngsu5582 Nov 15, 2023
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
Prev Previous commit
Next Next commit
feat : RequestOrder 추가
RequestOrder Domain 생성
Parser 에 parseInfoWithSeparator 에 함수 추가

이에 따른 , 테스트 케이스 구현
- 정해진 형식에 맞게 입력 하는 케이스
- 정해진 형식에 맞지 않는 문자열 입력하는 케이스
- 1보다 작은 값을 입력하는 케이스
  • Loading branch information
youngsu5582 committed Nov 11, 2023
commit 8a7f8b1d0cffe6ae93a75c1b2fea2084e00d6384
5 changes: 5 additions & 0 deletions src/main/java/christmas/constant/OrderConstant.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
package christmas.constant;

public class OrderConstant {
public static final int MIN_AMOUNT = 1;
}
69 changes: 69 additions & 0 deletions src/main/java/christmas/domain/order/RequestOrder.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
package christmas.domain.order;

import christmas.exception.OrderException;
import christmas.exception.ParserException;
import christmas.exception.message.OrderExceptionMessage;
import christmas.util.Parser;

import java.util.List;

import static christmas.constant.OrderConstant.MIN_AMOUNT;

public record RequestOrder(String orderName, int amount) {
private static final String REQUEST_SEPERATOR = "-";

public static RequestOrder of(String request) {
List<String> parsedRequest = Parser.parseInfoWithSeparator(request, REQUEST_SEPERATOR);
validate(parsedRequest);
String orderName = parsedRequest.get(0);
int amount = Parser.parseInfoToNumber(parsedRequest.get(1));
return new RequestOrder(orderName, amount);
}

private static void validate(List<String> parsedRequest) {
validateParsedRequestSize(parsedRequest.size());
validateOrderName(parsedRequest.get(0));
validateAmount(parsedRequest.get(1));
}

private static void validateOrderName(String orderNameInfo) {
validateOrderNameIsValid(orderNameInfo);
}

private static void validateAmount(String amountInfo) {
validateAmountInfoIsNumber(amountInfo);
validateAmountIsInRange(Integer.parseInt(amountInfo));
}

private static void validateParsedRequestSize(int size) {
if (size != 2) {
throw new OrderException(OrderExceptionMessage.INVALID_FORMAT);
}
}

private static void validateOrderNameIsValid(String orderName) {
for (Character ch : orderName.toCharArray()) {
if (isSpecial(ch)) {
throw new OrderException(OrderExceptionMessage.INVALID_FORMAT);
}
}
}

private static boolean isSpecial(char ch) {
return !Character.isAlphabetic(ch);
}

private static void validateAmountInfoIsNumber(String amountInfo) {
try {
Parser.parseInfoToNumber(amountInfo);
} catch (ParserException exception) {
throw new OrderException(OrderExceptionMessage.INVALID_FORMAT);
}
}

private static void validateAmountIsInRange(int amount) {
if (amount < MIN_AMOUNT) {
throw new OrderException(OrderExceptionMessage.INVALID_AMOUNT);
}
}
}
10 changes: 10 additions & 0 deletions src/main/java/christmas/exception/OrderException.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
package christmas.exception;

import christmas.exception.message.OrderExceptionMessage;
import christmas.lib.exception.CustomException;

public class OrderException extends CustomException {
public OrderException(OrderExceptionMessage errorMessage) {
super(errorMessage.getMessage());
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
package christmas.exception.message;

import static christmas.constant.OrderConstant.MIN_AMOUNT;

public enum OrderExceptionMessage {
INVALID_AMOUNT(String.format("주문 개수는 %d보다 더 큰 값을 입력해주세요!",MIN_AMOUNT)),
INVALID_FORMAT("메뉴명을 똑바로 입력해주세요!");
private final String message;

OrderExceptionMessage(String message) {
this.message = message;
}

public String getMessage() {
return message;
}
}
6 changes: 6 additions & 0 deletions src/main/java/christmas/util/Parser.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,9 @@
import christmas.exception.ParserException;
import christmas.exception.message.ParserExceptionMessage;

import java.util.Arrays;
import java.util.List;

public class Parser {
public static Integer parseInfoToNumber(String info){
try{
Expand All @@ -11,4 +14,7 @@ public static Integer parseInfoToNumber(String info){
throw new ParserException(ParserExceptionMessage.NOT_NUMBER);
}
}
public static List<String> parseInfoWithSeparator(String info, String seperator){
return Arrays.asList(info.split(seperator));
}
}
40 changes: 40 additions & 0 deletions src/test/java/christmas/domain/RequestOrderTest.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
package christmas.domain;

import christmas.domain.order.RequestOrder;

import christmas.exception.OrderException;
import christmas.exception.message.OrderExceptionMessage;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.ValueSource;

import static org.assertj.core.api.Assertions.assertThatThrownBy;

public class RequestOrderTest {
@Test
@DisplayName("정해진 형식에 맞는 메뉴 요청(양송이수프-3)을 입력하면 RequestOrder 를 만든다.")
void createRequestOrderWithFormattedRequest(){
String requestInfo = "양송이수프-3";
RequestOrder requestOrder = RequestOrder.of(requestInfo);
Assertions.assertEquals(requestOrder.orderName(),"양송이수프");
Assertions.assertEquals(requestOrder.amount(),3);
}
@ParameterizedTest
@DisplayName("정해진 형식에 맞지 않는 문자열을 입력하면 예외를 발생한다.")
@ValueSource(strings = {"양송이수프!-3","양송이수프--3","양송이수프3개,양송이수프-a"})
void throwExceptionWhenRequestIsInValid(String invalidRequestInfo){
assertThatThrownBy(()->RequestOrder.of(invalidRequestInfo))
.isInstanceOf(OrderException.class)
.hasMessageContaining(OrderExceptionMessage.INVALID_FORMAT.getMessage());
}
@ParameterizedTest
@DisplayName("1보다 작은 값을 입력하면 예외를 발생한다.")
@ValueSource(strings = {"양송이수프-0"})
void throwExceptionWhenAmountOutBound(String invalidAmountRequestInfo){
assertThatThrownBy(()->RequestOrder.of(invalidAmountRequestInfo))
.isInstanceOf(OrderException.class)
.hasMessageContaining(OrderExceptionMessage.INVALID_AMOUNT.getMessage());
}
}