diff --git a/.github/workflows/dev.yaml b/.github/workflows/dev.yaml index 9419d69f..7cc7cfb3 100644 --- a/.github/workflows/dev.yaml +++ b/.github/workflows/dev.yaml @@ -4,7 +4,8 @@ on: branches: [ 'dev' ] paths: - 'config/**' # Config 모듈 변경 - - 'member/**' # Member 모듈 변뚶 + - 'member/**' # Member 모듈 변경 + - 'common/**' # Common 모듈 변경 - '.github/workflows/**' # 워크플로우와 관련된 파일이 변경된 경우 - 'build.gradle' # Parent Gradle 모듈 설정이 변경된 경우 - 'settings.gradle' # Parent Gradle 설정이 변경된 경우 diff --git a/.github/workflows/prod.yaml b/.github/workflows/prod.yaml index 046c98e2..e76e20cc 100644 --- a/.github/workflows/prod.yaml +++ b/.github/workflows/prod.yaml @@ -4,7 +4,8 @@ on: branches: [ 'main' ] paths: - 'config/**' # Config 모듈 변경 - - 'member/**' # Member 모듈 변뚶 + - 'member/**' # Member 모듈 변경 + - 'common/**' # Common 모듈 변경 - '.github/workflows/**' # 워크플로우와 관련된 파일이 변경된 경우 - 'build.gradle' # Parent Gradle 모듈 설정이 변경된 경우 - 'settings.gradle' # Parent Gradle 설정이 변경된 경우 diff --git a/common/build.gradle b/common/build.gradle new file mode 100644 index 00000000..6b9a397d --- /dev/null +++ b/common/build.gradle @@ -0,0 +1,15 @@ +repositories { + mavenCentral() +} + +dependencies { + +} + +tasks.named('bootJar') { + enabled = false +} + +tasks.named('jar') { + enabled = true +} diff --git a/common/src/main/java/com/oing/domain/exception/DomainException.java b/common/src/main/java/com/oing/domain/exception/DomainException.java new file mode 100644 index 00000000..33eae804 --- /dev/null +++ b/common/src/main/java/com/oing/domain/exception/DomainException.java @@ -0,0 +1,10 @@ +package com.oing.domain.exception; + +import lombok.Getter; +import lombok.RequiredArgsConstructor; + +@Getter +@RequiredArgsConstructor +public class DomainException extends RuntimeException { + private final ErrorCode errorCode; +} diff --git a/common/src/main/java/com/oing/domain/exception/ErrorCode.java b/common/src/main/java/com/oing/domain/exception/ErrorCode.java new file mode 100644 index 00000000..26c7903e --- /dev/null +++ b/common/src/main/java/com/oing/domain/exception/ErrorCode.java @@ -0,0 +1,22 @@ +package com.oing.domain.exception; + +import lombok.Getter; +import lombok.RequiredArgsConstructor; + +@Getter +@RequiredArgsConstructor +public enum ErrorCode { + /** + * Common Errors + */ + UNKNOWN_SERVER_ERROR("CM0001", "Unknown Server Error"), + INVALID_INPUT_VALUE("CM0002", "Invalid Input Value"), + /** + * Auth Related Errors + */ + AUTHENTICATION_FAILED("AU0001", "Authentication failed"), + AUTHORIZATION_FAILED("AU0002", "No Permission"); + + private final String code; + private final String message; +} diff --git a/common/src/main/java/com/oing/dto/response/ErrorResponse.java b/common/src/main/java/com/oing/dto/response/ErrorResponse.java new file mode 100644 index 00000000..82f26764 --- /dev/null +++ b/common/src/main/java/com/oing/dto/response/ErrorResponse.java @@ -0,0 +1,21 @@ +package com.oing.dto.response; + +import com.oing.domain.exception.ErrorCode; +import io.swagger.v3.oas.annotations.media.Schema; + +@Schema(description = "에러 응답") +public record ErrorResponse( + @Schema(description = "에러 코드", example = "AU0001") + String code, + + @Schema(description = "에러 메시지", example = "Authentication failed") + String message +) { + public static ErrorResponse of(String code, String message) { + return new ErrorResponse(code, message); + } + + public static ErrorResponse of(ErrorCode errorCode) { + return new ErrorResponse(errorCode.getCode(), errorCode.getMessage()); + } +} diff --git a/common/src/test/java/com/oing/domain/exception/DomainExceptionTest.java b/common/src/test/java/com/oing/domain/exception/DomainExceptionTest.java new file mode 100644 index 00000000..c2930823 --- /dev/null +++ b/common/src/test/java/com/oing/domain/exception/DomainExceptionTest.java @@ -0,0 +1,22 @@ +package com.oing.domain.exception; + +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + + +import static org.junit.jupiter.api.Assertions.*; + +public class DomainExceptionTest { + @DisplayName("DomainException 생성자 테스트") + @Test + void testConstructor() { + //given + ErrorCode errorCode = ErrorCode.AUTHENTICATION_FAILED; + + //when + DomainException exception = new DomainException(errorCode); + + //then + assertEquals(exception.getErrorCode(), errorCode); + } +} diff --git a/common/src/test/java/com/oing/dto/response/ErrorResponseTest.java b/common/src/test/java/com/oing/dto/response/ErrorResponseTest.java new file mode 100644 index 00000000..28729dda --- /dev/null +++ b/common/src/test/java/com/oing/dto/response/ErrorResponseTest.java @@ -0,0 +1,38 @@ +package com.oing.dto.response; + +import com.oing.domain.exception.ErrorCode; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.*; + +public class ErrorResponseTest { + @DisplayName("ErrorResponse.of(String, String) 메서드 테스트") + @Test + void testOfMethod() { + //given + String errorCode = "AU0001"; + String errorMessage = "Authentication failed"; + + //when + ErrorResponse errorResponse = ErrorResponse.of(errorCode, errorMessage); + + //then + assertEquals(errorResponse.code(), errorCode); + assertEquals(errorResponse.message(), errorMessage); + } + + @DisplayName("ErrorResponse.of(ErrorCode) 메서드 테스트") + @Test + void testOfMethod2() { + //given + ErrorCode errorCode = ErrorCode.AUTHENTICATION_FAILED; + + //when + ErrorResponse errorResponse = ErrorResponse.of(errorCode); + + //then + assertEquals(errorResponse.code(), errorCode.getCode()); + assertEquals(errorResponse.message(), errorCode.getMessage()); + } +} diff --git a/config/build.gradle b/config/build.gradle index 0fecdbc9..cb9e8b23 100644 --- a/config/build.gradle +++ b/config/build.gradle @@ -8,6 +8,7 @@ repositories { } dependencies { + implementation project(':common') implementation project(':member') implementation 'org.flywaydb:flyway-core' diff --git a/member/build.gradle b/member/build.gradle index 6b9a397d..de972abd 100644 --- a/member/build.gradle +++ b/member/build.gradle @@ -3,7 +3,7 @@ repositories { } dependencies { - + implementation project(':common') } tasks.named('bootJar') { diff --git a/settings.gradle b/settings.gradle index 2b1f2fef..c3d46fcf 100644 --- a/settings.gradle +++ b/settings.gradle @@ -2,3 +2,5 @@ rootProject.name = 'server' include 'config' include 'member' +include 'common' +