Skip to content
Open
Show file tree
Hide file tree
Changes from 1 commit
Commits
Show all changes
23 commits
Select commit Hold shift + click to select a range
824a8b0
Merge branch 'week2' into main
kmebin Jul 13, 2023
99257f3
chore: thymeleaf, lombok 의존성 추가
kmebin Jul 13, 2023
563525c
feat: 바우처 프로그램 메인 뷰 구현
kmebin Jul 13, 2023
08b1903
feat: 바우처 전체 조회, 생성, 삭제 뷰 구현
kmebin Jul 13, 2023
2afdbd3
feat: 바우처 전체 조회, 생성, 삭제 요청 매핑
kmebin Jul 13, 2023
67e5b89
feat: 바우처 상세 조회 뷰 구현
kmebin Jul 13, 2023
9ea89d5
feat: 바우처 상세 조회 요청 매핑
kmebin Jul 13, 2023
c88e54e
feat: 전체 메뉴로 돌아가기 버튼 추가
kmebin Jul 13, 2023
b0fa89f
feat: 고객 생성, 조회, 삭제 뷰 구현 및 요청 매핑
kmebin Jul 13, 2023
e132e49
docs: 3주차 요구 사항 업데이트
kmebin Jul 13, 2023
776f45a
feat: ErrorCode 적용
kmebin Jul 14, 2023
b386283
feat: 바우처 조회, 생성, 삭제 API 구현
kmebin Jul 14, 2023
14e0920
feat: 고객 조회, 생성, 삭제 API 구현
kmebin Jul 14, 2023
b1faf0b
feat: 바우처 타입별 조회 구현
kmebin Jul 14, 2023
9aeea3e
docs: API 개발 요구 사항 업데이트
kmebin Jul 14, 2023
0b98cae
fix: VoucherType 불필요한 필드 제거
kmebin Jul 14, 2023
cd3aeaa
feat: RestControllerAdivce를 통해 전역 예외 처리
kmebin Jul 14, 2023
1c5cee0
refactor: lombok 적용
kmebin Jul 14, 2023
7ea52b9
refactor: Enum values를 맵으로 관리
kmebin Jul 14, 2023
706714b
refactor: console 하위 패키지로 분리
kmebin Jul 14, 2023
7ee0757
chore: validation 의존성 추가
kmebin Jul 14, 2023
75221d7
feat: validation을 통한 요청 검증
kmebin Jul 14, 2023
5d601a2
test: 잘못된 검증 로직 수정
kmebin Jul 14, 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: ErrorCode 적용
  • Loading branch information
kmebin committed Jul 14, 2023
commit 776f45a7df69f75fb7c1bbf9c0b718c9afd62708
42 changes: 42 additions & 0 deletions src/main/java/com/programmers/voucher/constant/BaseResponse.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
package com.programmers.voucher.constant;

import com.fasterxml.jackson.annotation.JsonInclude;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.RequiredArgsConstructor;
import org.springframework.http.HttpStatus;

import static com.fasterxml.jackson.annotation.JsonInclude.Include.NON_NULL;

@Getter
@RequiredArgsConstructor
@AllArgsConstructor
public class BaseResponse<T> {
private final int status;

@JsonInclude(NON_NULL)
private String message;

@JsonInclude(NON_NULL)
private T data;
Comment on lines +18 to +22
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

JsonInclude는 어떤것때문에 넣으신건가요??


public static <T> BaseResponse<T> ok() {
return new BaseResponse<>(HttpStatus.OK.value());
}

public static <T> BaseResponse<T> ok(T data) {
return new BaseResponse<>(HttpStatus.OK.value(), null, data);
}

public static <T> BaseResponse<T> created() {
return new BaseResponse<>(HttpStatus.CREATED.value());
}

public static <T> BaseResponse<T> created(T data) {
return new BaseResponse<>(HttpStatus.CREATED.value(), null, data);
}

public static <T> BaseResponse<T> error(ErrorCode errorCode) {
return new BaseResponse<>(errorCode.getStatus().value(), errorCode.getMessage(), null);
}
}
19 changes: 19 additions & 0 deletions src/main/java/com/programmers/voucher/constant/ErrorCode.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
package com.programmers.voucher.constant;

import lombok.Getter;
import lombok.RequiredArgsConstructor;
import org.springframework.http.HttpStatus;

@Getter
@RequiredArgsConstructor
public enum ErrorCode {
INVALID_COMMAND(HttpStatus.BAD_REQUEST, "존재하지 않는 명령어입니다."),
INVALID_DISCOUNT_AMOUNT(HttpStatus.BAD_REQUEST, "할인 값은 양수만 가능합니다."),
INVALID_DISCOUNT_PERCENT(HttpStatus.BAD_REQUEST, "할인율은 100을 넘을 수 없습니다."),
NOT_FOUND_VOUCHER(HttpStatus.NOT_FOUND, "존재하는 바우처가 없습니다."),
NOT_FOUND_CUSTOMER(HttpStatus.NOT_FOUND, "존재하는 고객이 없습니다."),
EXISTED_NICKNAME(HttpStatus.CONFLICT, "이미 존재하는 닉네임입니다.");

private final HttpStatus status;
private final String message;
}
12 changes: 0 additions & 12 deletions src/main/java/com/programmers/voucher/constant/ErrorMessage.java

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -14,8 +14,8 @@
import java.util.Optional;
import java.util.UUID;

import static com.programmers.voucher.constant.ErrorMessage.EXISTED_NICKNAME;
import static com.programmers.voucher.constant.ErrorMessage.NOT_FOUND_CUSTOMER;
import static com.programmers.voucher.constant.ErrorCode.EXISTED_NICKNAME;
import static com.programmers.voucher.constant.ErrorCode.NOT_FOUND_CUSTOMER;

@Service
@Transactional(readOnly = true)
Expand Down
Original file line number Diff line number Diff line change
@@ -1,16 +1,13 @@
package com.programmers.voucher.domain.voucher.entity;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.programmers.voucher.exception.BadRequestException;

import java.util.UUID;

import static com.programmers.voucher.constant.ErrorMessage.INVALID_DISCOUNT_AMOUNT;
import static com.programmers.voucher.constant.ErrorMessage.INVALID_DISCOUNT_PERCENT;
import static com.programmers.voucher.constant.ErrorCode.INVALID_DISCOUNT_AMOUNT;
import static com.programmers.voucher.constant.ErrorCode.INVALID_DISCOUNT_PERCENT;

public class Voucher {
private static final Logger LOGGER = LoggerFactory.getLogger(Voucher.class);

private final UUID id;
private VoucherType type;
private int amount;
Expand Down Expand Up @@ -42,15 +39,13 @@ public long discount(long price) {

private static void validatePositive(int amount) {
if (amount <= 0) {
LOGGER.error("{} => {}", INVALID_DISCOUNT_AMOUNT, amount);
throw new IllegalArgumentException(INVALID_DISCOUNT_AMOUNT);
throw new BadRequestException(INVALID_DISCOUNT_AMOUNT);
}
}

private static void validatePercent(VoucherType type, int amount) {
if (type == VoucherType.PERCENT && amount > 100) {
LOGGER.error("{} => {}", INVALID_DISCOUNT_PERCENT, amount);
throw new IllegalArgumentException(INVALID_DISCOUNT_PERCENT);
throw new BadRequestException(INVALID_DISCOUNT_PERCENT);
}
}

Expand Down
Original file line number Diff line number Diff line change
@@ -1,22 +1,18 @@
package com.programmers.voucher.domain.voucher.entity;

import com.programmers.voucher.exception.InvalidCommandException;
import com.programmers.voucher.view.command.VoucherCommand;
import lombok.Getter;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.util.Arrays;
import java.util.function.BiFunction;

import static com.programmers.voucher.constant.ErrorMessage.INVALID_COMMAND;
import static com.programmers.voucher.constant.ErrorCode.INVALID_COMMAND;

@Getter
public enum VoucherType {
FIXED(1, "금액 할인", (price, amount) -> Math.max(0L, price - amount)),
PERCENT(2, "퍼센트 할인", (price, percent) -> Math.max(0L, price * (percent / 100)));

private static final Logger LOGGER = LoggerFactory.getLogger(VoucherCommand.class);
private final int number;
private final String text;
private final BiFunction<Long, Integer, Long> discount;
Expand All @@ -31,10 +27,7 @@ public static VoucherType findByNumber(int number) {
return Arrays.stream(VoucherType.values())
.filter(voucher -> voucher.isEqualTo(number))
.findFirst()
.orElseThrow(() -> {
LOGGER.error("{} => {}", INVALID_COMMAND, number);
return new InvalidCommandException(INVALID_COMMAND);
});
.orElseThrow(() -> new InvalidCommandException(INVALID_COMMAND));
}

public long discount(long price, int amount) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@
import java.util.Optional;
import java.util.UUID;

import static com.programmers.voucher.constant.ErrorMessage.NOT_FOUND_VOUCHER;
import static com.programmers.voucher.constant.ErrorCode.NOT_FOUND_VOUCHER;

@Service
@Transactional(readOnly = true)
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
package com.programmers.voucher.exception;

import com.programmers.voucher.constant.ErrorCode;

public class BadRequestException extends IllegalArgumentException {
public BadRequestException(ErrorCode errorCode) {
super(errorCode.getMessage());
}
}
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
package com.programmers.voucher.exception;

import com.programmers.voucher.constant.ErrorCode;

public class ConflictException extends IllegalArgumentException {
public ConflictException(String message) {
super(message);
public ConflictException(ErrorCode errorCode) {
super(errorCode.getMessage());
}
}
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
package com.programmers.voucher.exception;

import com.programmers.voucher.constant.ErrorCode;

public class InvalidCommandException extends IllegalArgumentException {
public InvalidCommandException(String message) {
super(message);
public InvalidCommandException(ErrorCode errorCode) {
super(errorCode.getMessage());
}
}
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
package com.programmers.voucher.exception;

import com.programmers.voucher.constant.ErrorCode;

public class NotFoundException extends IllegalArgumentException {
public NotFoundException(String message) {
super(message);
public NotFoundException(ErrorCode errorCode) {
super(errorCode.getMessage());
}
}
11 changes: 3 additions & 8 deletions src/main/java/com/programmers/voucher/view/command/Command.java
Original file line number Diff line number Diff line change
@@ -1,18 +1,16 @@
package com.programmers.voucher.view.command;

import com.programmers.voucher.constant.ErrorMessage;
import com.programmers.voucher.exception.InvalidCommandException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.util.Arrays;

import static com.programmers.voucher.constant.ErrorCode.INVALID_COMMAND;

public enum Command {
EXIT(1, "프로그램 종료"),
VOUCHER(2, "바우처 관리"),
CUSTOMER(3, "고객 관리");

private static final Logger LOG = LoggerFactory.getLogger(Command.class);
private final int number;
private final String text;

Expand All @@ -25,10 +23,7 @@ public static Command findByNumber(int number) {
return Arrays.stream(Command.values())
.filter(command -> command.isEqualTo(number))
.findFirst()
.orElseThrow(() -> {
LOG.error("{} => {}", ErrorMessage.INVALID_COMMAND, number);
return new InvalidCommandException(ErrorMessage.INVALID_COMMAND);
});
.orElseThrow(() -> new InvalidCommandException(INVALID_COMMAND));
}

private boolean isEqualTo(int number) {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,12 +1,10 @@
package com.programmers.voucher.view.command;

import com.programmers.voucher.exception.InvalidCommandException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.util.Arrays;

import static com.programmers.voucher.constant.ErrorMessage.INVALID_COMMAND;
import static com.programmers.voucher.constant.ErrorCode.INVALID_COMMAND;

public enum CustomerCommand {
CREATE(1, "고객 생성"),
Expand All @@ -15,7 +13,6 @@ public enum CustomerCommand {
UPDATE(4, "고객 수정"),
DELETE(5, "고객 삭제");

private static final Logger LOG = LoggerFactory.getLogger(CustomerCommand.class);
private final int number;
private final String text;

Expand All @@ -28,10 +25,7 @@ public static CustomerCommand findByNumber(int number) {
return Arrays.stream(CustomerCommand.values())
.filter(command -> command.isEqualTo(number))
.findFirst()
.orElseThrow(() -> {
LOG.error("{} => {}", INVALID_COMMAND, number);
return new InvalidCommandException(INVALID_COMMAND);
});
.orElseThrow(() -> new InvalidCommandException(INVALID_COMMAND));
}

private boolean isEqualTo(int number) {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,12 +1,10 @@
package com.programmers.voucher.view.command;

import com.programmers.voucher.exception.InvalidCommandException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.util.Arrays;

import static com.programmers.voucher.constant.ErrorMessage.INVALID_COMMAND;
import static com.programmers.voucher.constant.ErrorCode.INVALID_COMMAND;

public enum VoucherCommand {
CREATE(1, "바우처 생성"),
Expand All @@ -15,7 +13,6 @@ public enum VoucherCommand {
UPDATE(4, "바우처 수정"),
DELETE(5, "바우처 삭제");

private static final Logger LOG = LoggerFactory.getLogger(VoucherCommand.class);
private final int number;
private final String text;

Expand All @@ -28,10 +25,7 @@ public static VoucherCommand findByNumber(int number) {
return Arrays.stream(VoucherCommand.values())
.filter(command -> command.isEqualTo(number))
.findFirst()
.orElseThrow(() -> {
LOG.error("{} => {}", INVALID_COMMAND, number);
return new InvalidCommandException(INVALID_COMMAND);
});
.orElseThrow(() -> new InvalidCommandException(INVALID_COMMAND));
}

private boolean isEqualTo(int number) {
Expand Down