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

[refactor] 코드 스타일 통일 #68

Merged
merged 28 commits into from
Aug 15, 2024
Merged
Show file tree
Hide file tree
Changes from 23 commits
Commits
Show all changes
28 commits
Select commit Hold shift + click to select a range
583832c
[feat] 유효하지 않은 가게 생성시 발생하는 커스텀 예외
june-777 Aug 15, 2024
714d227
[feat] 가게 카테고리를 찾지 못할 때 발생하는 커스텀 예외
june-777 Aug 15, 2024
cf6fbc1
[feat] 가게 관련 에러 코드 Enum 정의
june-777 Aug 15, 2024
0186770
[feat] 사용하지 않는 StoreException 제거
june-777 Aug 15, 2024
3830b2f
[refactor] 가게 카테고리를 찾지 못할 때, NotFoundStoreCategoryException 을 던지도록 수정
june-777 Aug 15, 2024
c029731
[refactor] 가게 Store 객체를 생성하지 못할 때, InvalidStoreCreationException 를 던지…
june-777 Aug 15, 2024
2f4f329
[test] 커스텀 예외 변경에 따라, 테스트 코드 수정 및 테스트
june-777 Aug 15, 2024
a193576
[style] 서비스 메서드에서 발생할 수 있는 런타임 예외 javadocs 주석 추가
june-777 Aug 15, 2024
cbfea0e
[refactor] 컨트롤러/서비스 계층 코드 스타일 통일
june-777 Aug 15, 2024
99ae329
[test] 컨트롤러/서비스 계층 코드 스타일 변경에 따라 테스트 코드 수정 및 테스트
june-777 Aug 15, 2024
5c13e48
[style] 가게 등록 서비스 계층에서 발생할 수 있는 RuntimeException javadocs 명시
june-777 Aug 15, 2024
a457300
[refactor] MenuLineItem DTO를 외부 클래스로 분리
june-777 Aug 15, 2024
b857876
[refactor] 서비스 계층 코드 스타일 통일
june-777 Aug 15, 2024
02e7aa8
[test] 서비스 계층 코드 스타일 변경에 따라 테스트 코드 수정 및 테스트
june-777 Aug 15, 2024
2e91d63
[refactor] 패키지 이동
june-777 Aug 15, 2024
0186f58
[feat] 가게 메뉴 등록 API 구현
june-777 Aug 15, 2024
c7ec4bc
[refactor] responseDTO 를 반환하도록 수정
june-777 Aug 15, 2024
c315a08
[feat] responseDTO 클래스 구현
june-777 Aug 15, 2024
ac0ab82
[refactor] 가게 등록, 가게 메뉴 등록 메서드 반환타입 변경
june-777 Aug 15, 2024
8d7cddd
[refactor] 기존 커스텀 예외가 NotFoundException, BadRequestException 상속하도록 수정
june-777 Aug 15, 2024
75c417e
[feat] 메뉴 에러 코드 Enum
june-777 Aug 15, 2024
915921f
[feat] Store 예외 핸들러 구현
june-777 Aug 15, 2024
e9d2954
[style] 가게 메뉴 등록 서비스에서 발생할 수 있는 RuntimeException javadocs 주석 처리
june-777 Aug 15, 2024
5e12a6e
[style] 테스트 코드의 주석 제거
june-777 Aug 15, 2024
067236c
[refactor] 커스텀 예외의 생성자 제거
june-777 Aug 15, 2024
0c38588
[fix] Not Null 예외 메시지 추가
june-777 Aug 15, 2024
f5b94ee
Merge remote-tracking branch 'origin/main' into refactor/63_june-777_…
june-777 Aug 15, 2024
3a6f52f
[merge] resolve merge conflict
june-777 Aug 15, 2024
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: 4 additions & 0 deletions src/main/java/camp/woowak/lab/menu/domain/Menu.java
Original file line number Diff line number Diff line change
Expand Up @@ -46,4 +46,8 @@ public Menu(Store store, MenuCategory menuCategory, String name, Integer price,
this.imageUrl = imageUrl;
}

public Long getId() {
return id;
}

}
Original file line number Diff line number Diff line change
@@ -1,6 +1,9 @@
package camp.woowak.lab.menu.domain;

import static camp.woowak.lab.menu.exception.MenuErrorCode.*;

import camp.woowak.lab.menu.exception.InvalidMenuCategoryCreationException;
import camp.woowak.lab.menu.exception.MenuErrorCode;
import camp.woowak.lab.store.domain.Store;

public class MenuCategoryValidator {
Expand All @@ -16,23 +19,24 @@ public static void validate(final Store store, final String name) {
private static void validateNotNull(final Object... targets) {
for (Object target : targets) {
if (target == null) {
throw new InvalidMenuCategoryCreationException(target + "은 Null 이 될 수 없습니다.");
throw new InvalidMenuCategoryCreationException(MenuErrorCode.NULL_EXIST, target + "은 Null 이 될 수 없습니다.");
}
}
}

private static void validateNotBlank(final String... targets) {
for (String target : targets) {
if (target.isBlank()) {
throw new InvalidMenuCategoryCreationException(target + "은 빈 문자열이거나 공백 문자열이 포함될 수 없습니다.");
throw new InvalidMenuCategoryCreationException(BLANK_EXIST, target + "은 빈 문자열이거나 공백 문자열이 포함될 수 없습니다.");
}
}
}

private static void validateNameLength(final String name) {
if (name.length() > MAX_NAME_LENGTH) {
throw new InvalidMenuCategoryCreationException("메뉴 카테고리 이름은 " + MAX_NAME_LENGTH + "글자까지 가능합니다.");
throw new InvalidMenuCategoryCreationException(INVALID_NAME_RANGE,
"메뉴 카테고리 이름은 " + MAX_NAME_LENGTH + "글자까지 가능합니다.");
}
}

}
10 changes: 6 additions & 4 deletions src/main/java/camp/woowak/lab/menu/domain/MenuValidator.java
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
package camp.woowak.lab.menu.domain;

import static camp.woowak.lab.menu.exception.MenuErrorCode.*;

import camp.woowak.lab.menu.exception.InvalidMenuCreationException;
import camp.woowak.lab.store.domain.Store;

Expand All @@ -18,28 +20,28 @@ public static void validate(final Store store, final MenuCategory menuCategory,
private static void validateNotNull(final Object... targets) {
for (Object target : targets) {
if (target == null) {
throw new InvalidMenuCreationException(target + "은 Null 이 될 수 없습니다.");
throw new InvalidMenuCreationException(NULL_EXIST, target + "은 Null 이 될 수 없습니다.");
}
}
}

private static void validateNotBlank(final String... targets) {
for (String target : targets) {
if (target.isBlank()) {
throw new InvalidMenuCreationException(target + "은 빈 문자열이거나 공백 문자열이 포함될 수 없습니다.");
throw new InvalidMenuCreationException(BLANK_EXIST, target + "은 빈 문자열이거나 공백 문자열이 포함될 수 없습니다.");
}
}
}

private static void validateNameLength(final String name) {
if (name.length() > MAX_NAME_LENGTH) {
throw new InvalidMenuCreationException("메뉴 이름은 " + MAX_NAME_LENGTH + "글자까지 가능합니다.");
throw new InvalidMenuCreationException(INVALID_NAME_RANGE, "메뉴 이름은 " + MAX_NAME_LENGTH + "글자까지 가능합니다.");
}
}

private static void validatePriceNegative(final Integer price) {
if (price <= 0) {
throw new InvalidMenuCreationException("메뉴의 가격은 양수만 가능합니다");
throw new InvalidMenuCreationException(INVALID_PRICE, "메뉴의 가격은 양수만 가능합니다");
}
}

Expand Down
Original file line number Diff line number Diff line change
@@ -1,10 +1,12 @@
package camp.woowak.lab.menu.exception;

// TODO: extends CustomException
public class InvalidMenuCategoryCreationException extends RuntimeException {
import camp.woowak.lab.common.exception.BadRequestException;
import camp.woowak.lab.common.exception.ErrorCode;

public InvalidMenuCategoryCreationException(String message) {
super(message);
public class InvalidMenuCategoryCreationException extends BadRequestException {

public InvalidMenuCategoryCreationException(ErrorCode errorCode, String message) {
super(errorCode, message);
}

}
Original file line number Diff line number Diff line change
@@ -1,10 +1,12 @@
package camp.woowak.lab.menu.exception;

// TODO: extends CustomException
public class InvalidMenuCreationException extends RuntimeException {
import camp.woowak.lab.common.exception.BadRequestException;
import camp.woowak.lab.common.exception.ErrorCode;

public InvalidMenuCreationException(String message) {
super(message);
public class InvalidMenuCreationException extends BadRequestException {

public InvalidMenuCreationException(ErrorCode errorCode, String message) {
super(errorCode, message);
}

}
41 changes: 41 additions & 0 deletions src/main/java/camp/woowak/lab/menu/exception/MenuErrorCode.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
package camp.woowak.lab.menu.exception;

import org.springframework.http.HttpStatus;

import camp.woowak.lab.common.exception.ErrorCode;

public enum MenuErrorCode implements ErrorCode {

NULL_EXIST(HttpStatus.BAD_REQUEST, "M0", "값이 존재해야 합니다."),
BLANK_EXIST(HttpStatus.BAD_REQUEST, "M1", "빈 문자열이거나 공백 문자열이 포함되면 안됩니다."),
INVALID_NAME_RANGE(HttpStatus.BAD_REQUEST, "M2", "이름의 길이 범위를 벗어났습니다."),

INVALID_PRICE(HttpStatus.BAD_REQUEST, "M3", "메뉴의 가격 범위를 벗어났습니다."),

NOT_FOUND_MENU_CATEGORY(HttpStatus.BAD_REQUEST, "M3", "메뉴 카테고리를 찾을 수 없습니다.");

private final int status;
private final String errorCode;
private final String message;

MenuErrorCode(HttpStatus status, String errorCode, String message) {
this.status = status.value();
this.errorCode = errorCode;
this.message = message;
}

@Override
public int getStatus() {
return status;
}

@Override
public String getErrorCode() {
return errorCode;
}

@Override
public String getMessage() {
return message;
}
}
Original file line number Diff line number Diff line change
@@ -1,10 +1,12 @@
package camp.woowak.lab.menu.exception;

// TODO: extends CustomException
public class NotFoundMenuCategoryException extends RuntimeException {
import camp.woowak.lab.common.exception.BadRequestException;
import camp.woowak.lab.common.exception.ErrorCode;

public NotFoundMenuCategoryException(String message) {
super(message);
public class NotFoundMenuCategoryException extends BadRequestException {

public NotFoundMenuCategoryException(ErrorCode errorCode, String message) {
super(errorCode, message);
}

}
26 changes: 15 additions & 11 deletions src/main/java/camp/woowak/lab/store/domain/StoreValidator.java
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
package camp.woowak.lab.store.domain;

import static camp.woowak.lab.store.exception.StoreException.ErrorCode.*;
import static camp.woowak.lab.store.exception.StoreErrorCode.*;

import java.time.LocalDateTime;

import camp.woowak.lab.store.exception.StoreException;
import camp.woowak.lab.store.exception.InvalidStoreCreationException;
import camp.woowak.lab.vendor.domain.Vendor;

public class StoreValidator {
Expand All @@ -31,7 +31,7 @@ public static void validate(final Vendor owner, StoreCategory storeCategory, fin
private static void validateNotNull(Object... targets) {
for (Object target : targets) {
if (target == null) {
throw new StoreException(NULL_EXIST);
throw new InvalidStoreCreationException(NULL_EXIST);
}
}
}
Expand All @@ -40,45 +40,49 @@ private static void validateName(final String name) {
if (MIN_NAME_LENGTH <= name.length() && name.length() <= MAX_NAME_LENGTH) {
return;
}
throw new StoreException(INVALID_NAME_RANGE);
throw new InvalidStoreCreationException(INVALID_NAME_RANGE,
"이름의 길이는 " + MIN_NAME_LENGTH + " ~ " + MAX_NAME_LENGTH + " 만 가능합니다. cur: " + name.length());
}

private static void validateAddress(final String address) {
if (StoreAddress.DEFAULT_DISTRICT.equals(address)) {
return;
}
throw new StoreException(INVALID_ADDRESS);
throw new InvalidStoreCreationException(INVALID_ADDRESS, "주소는 송파만 가능합니다. cur: " + address);
}

private static void validateMinOrderPrice(final Integer minOrderPrice) {
if (minOrderPrice < MIN_ORDER_PRICE) {
throw new StoreException(INVALID_MIN_ORDER_PRICE);
throw new InvalidStoreCreationException(INVALID_MIN_ORDER_PRICE,
"최소 주문 금액은 " + MIN_ORDER_PRICE + " 보다 이상이어야 합니다. cur: " + minOrderPrice);
}
}

private static void validateUnitOrderPrice(final Integer minOrderPrice) {
if (minOrderPrice % UNIT_OF_MIN_ORDER_PRICE != 0) {
throw new StoreException(INVALID_UNIT_OF_MIN_ORDER_PRICE);
throw new InvalidStoreCreationException(INVALID_UNIT_OF_MIN_ORDER_PRICE,
"최소 주문 금액의 단위는 천원이어야 합니다. cur: " + minOrderPrice);
}
}

private static void validateTime(final LocalDateTime startTime,
final LocalDateTime endTime
) {
if (isInvalidStoreTimeUnit(startTime)) {
throw new StoreException(INVALID_TIME_UNIT);
throw new InvalidStoreCreationException(INVALID_TIME_UNIT, "가게 시간은 분단위까지 가능합니다. cur: " + startTime);
}

if (isInvalidStoreTimeUnit(endTime)) {
throw new StoreException(INVALID_TIME_UNIT);
throw new InvalidStoreCreationException(INVALID_TIME_UNIT, "가게 시간은 분단위까지 가능합니다. cur:" + endTime);
}

if (endTime.isBefore(startTime)) {
throw new StoreException(INVALID_TIME);
throw new InvalidStoreCreationException(INVALID_TIME,
"가게 종료 시간이 시작 시간보다 이전입니다. cur:" + startTime + "," + endTime);
}

if (startTime.isEqual(endTime)) {
throw new StoreException(INVALID_TIME);
throw new InvalidStoreCreationException(INVALID_TIME, "가게 시작 시간과 종료 시간이 같습니다. cur:" + startTime + endTime);
}
}

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
package camp.woowak.lab.store.exception;

import camp.woowak.lab.common.exception.BadRequestException;
import camp.woowak.lab.common.exception.ErrorCode;

public class InvalidStoreCreationException extends BadRequestException {

public InvalidStoreCreationException(ErrorCode errorCode) {
june-777 marked this conversation as resolved.
Show resolved Hide resolved
super(errorCode);
}

public InvalidStoreCreationException(ErrorCode errorCode, String message) {
super(errorCode, message);
}

}
Original file line number Diff line number Diff line change
@@ -1,9 +1,13 @@
package camp.woowak.lab.store.exception;

public class NotEqualsOwnerException extends RuntimeException {
import static camp.woowak.lab.store.exception.StoreErrorCode.*;

import camp.woowak.lab.common.exception.BadRequestException;

public class NotEqualsOwnerException extends BadRequestException {

public NotEqualsOwnerException(String message) {
super(message);
super(NOT_EQUALS_VENDOR, message);
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
package camp.woowak.lab.store.exception;

import camp.woowak.lab.common.exception.NotFoundException;

public class NotFoundStoreCategoryException extends NotFoundException {

public NotFoundStoreCategoryException(String message) {
super(StoreErrorCode.INVALID_STORE_CATEGORY, message);
}

}
Original file line number Diff line number Diff line change
@@ -1,10 +1,13 @@
package camp.woowak.lab.store.exception;

// TODO: 404Exception 상속하도록 수정
public class NotFoundStoreException extends RuntimeException {
import static camp.woowak.lab.store.exception.StoreErrorCode.*;

import camp.woowak.lab.common.exception.NotFoundException;

public class NotFoundStoreException extends NotFoundException {

public NotFoundStoreException(String message) {
super(message);
super(NOT_FOUND_STORE, message);
}

}
49 changes: 49 additions & 0 deletions src/main/java/camp/woowak/lab/store/exception/StoreErrorCode.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
package camp.woowak.lab.store.exception;

import org.springframework.http.HttpStatus;

import camp.woowak.lab.common.exception.ErrorCode;

public enum StoreErrorCode implements ErrorCode {
NULL_EXIST(HttpStatus.BAD_REQUEST, "S0", "값이 존재해야 합니다."),

INVALID_NAME_RANGE(HttpStatus.BAD_REQUEST, "S1", "가게 이름은 2글자 ~ 10글자 이어야합니다."),

INVALID_ADDRESS(HttpStatus.BAD_REQUEST, "S2", "가게 주소는 송파구만 가능합니다."),

INVALID_MIN_ORDER_PRICE(HttpStatus.BAD_REQUEST, "S3", "최소 주문 금액은 5,000원 이상이어야 합니다."),
INVALID_UNIT_OF_MIN_ORDER_PRICE(HttpStatus.BAD_REQUEST, "S4", "최소 주문 금액은 1,000원 단위이어야 합니다."),

INVALID_TIME_UNIT(HttpStatus.BAD_REQUEST, "S5", "가게 시작 시간은 분 단위까지 가능합니다"),
INVALID_TIME(HttpStatus.BAD_REQUEST, "S6", "가게 시작 시간은 종료 시간보다 이전이어야 합니다"),

INVALID_STORE_CATEGORY(HttpStatus.BAD_REQUEST, "S7", "존재하지 않는 가게 카테고리입니다."),

NOT_EQUALS_VENDOR(HttpStatus.BAD_REQUEST, "S8", "가게의 점주와 일치하지 않습니다."),
NOT_FOUND_STORE(HttpStatus.BAD_REQUEST, "S9", "가게를 찾을 수 없습니다.");

private final int status;
private final String errorCode;
private final String message;

StoreErrorCode(HttpStatus status, String errorCode, String message) {
this.status = status.value();
this.errorCode = errorCode;
this.message = message;
}

@Override
public int getStatus() {
return status;
}

@Override
public String getErrorCode() {
return errorCode;
}

@Override
public String getMessage() {
return message;
}
}
Loading