From 579e1070844d4645be77beecfbe6b9133afdbdcc Mon Sep 17 00:00:00 2001 From: beaniejoy Date: Tue, 29 Nov 2022 01:15:21 +0900 Subject: [PATCH] =?UTF-8?q?[#24]=20feat:=20front=EC=9A=A9=20=EC=97=90?= =?UTF-8?q?=EB=9F=AC=20=EC=9D=91=EB=8B=B5=20=ED=8F=AC=EB=A9=A7=20=EC=A0=81?= =?UTF-8?q?=EC=9A=A9(=EB=AF=B8=EC=99=84=EC=84=B1)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - error response 규격화 때 개발 계획 - front용 임시 에러응답 적용 --- .../common/security/UserDetailsServiceImpl.kt | 2 +- .../error/handler/CommonControllerAdvice.kt | 27 +++++++++++++++++++ .../dongnecafe/error/ErrorResponse.kt | 6 +++++ .../domain/cafe/service/CafeMenuService.kt | 2 +- .../domain/cafe/service/CafeService.kt | 4 +-- .../domain/cafe/service/MenuOptionService.kt | 2 +- .../cafe/service/OptionDetailService.kt | 2 +- .../error/CafeExceptionHandler.kt | 4 +-- .../error/exception/CafeExistedException.kt | 2 +- .../exception/CafeMenuNotFoundException.kt | 2 +- .../error/exception/CafeNotFoundException.kt | 2 +- .../exception/MenuOptionNotFoundException.kt | 2 +- .../OptionDetailNotFoundException.kt | 2 +- .../cafe/service/CafeMenuServiceTest.kt | 2 +- .../domain/cafe/service/CafeServiceTest.kt | 4 +-- 15 files changed, 49 insertions(+), 16 deletions(-) create mode 100644 dongne-account-api/src/main/kotlin/io/beaniejoy/dongnecafe/error/handler/CommonControllerAdvice.kt create mode 100644 dongne-common/src/main/kotlin/io/beaniejoy/dongnecafe/error/ErrorResponse.kt rename dongne-service-api/src/main/kotlin/io/beaniejoy/dongnecafe/{common => }/error/CafeExceptionHandler.kt (79%) rename dongne-service-api/src/main/kotlin/io/beaniejoy/dongnecafe/{common => }/error/exception/CafeExistedException.kt (63%) rename dongne-service-api/src/main/kotlin/io/beaniejoy/dongnecafe/{common => }/error/exception/CafeMenuNotFoundException.kt (74%) rename dongne-service-api/src/main/kotlin/io/beaniejoy/dongnecafe/{common => }/error/exception/CafeNotFoundException.kt (62%) rename dongne-service-api/src/main/kotlin/io/beaniejoy/dongnecafe/{common => }/error/exception/MenuOptionNotFoundException.kt (67%) rename dongne-service-api/src/main/kotlin/io/beaniejoy/dongnecafe/{common => }/error/exception/OptionDetailNotFoundException.kt (69%) diff --git a/dongne-account-api/src/main/kotlin/io/beaniejoy/dongnecafe/common/security/UserDetailsServiceImpl.kt b/dongne-account-api/src/main/kotlin/io/beaniejoy/dongnecafe/common/security/UserDetailsServiceImpl.kt index 970cc3f..b0259bb 100644 --- a/dongne-account-api/src/main/kotlin/io/beaniejoy/dongnecafe/common/security/UserDetailsServiceImpl.kt +++ b/dongne-account-api/src/main/kotlin/io/beaniejoy/dongnecafe/common/security/UserDetailsServiceImpl.kt @@ -22,7 +22,7 @@ class UserDetailsServiceImpl( return memberRepository.findByEmail(email)?.let { logger.info { "[LOAD MEMBER] email: ${it.email}, role: ${it.roleType}, activated: ${it.activated}" } createSecurityUser(it) - } ?: throw UsernameNotFoundException(email) + } ?: throw UsernameNotFoundException("${email} is not found") } private fun createSecurityUser(member: Member): SecurityUser { diff --git a/dongne-account-api/src/main/kotlin/io/beaniejoy/dongnecafe/error/handler/CommonControllerAdvice.kt b/dongne-account-api/src/main/kotlin/io/beaniejoy/dongnecafe/error/handler/CommonControllerAdvice.kt new file mode 100644 index 0000000..83d901c --- /dev/null +++ b/dongne-account-api/src/main/kotlin/io/beaniejoy/dongnecafe/error/handler/CommonControllerAdvice.kt @@ -0,0 +1,27 @@ +package io.beaniejoy.dongnecafe.error.handler + +import io.beaniejoy.dongnecafe.error.ErrorResponse +import mu.KLogging +import org.springframework.http.HttpStatus +import org.springframework.http.ResponseEntity +import org.springframework.security.core.AuthenticationException +import org.springframework.web.bind.annotation.ExceptionHandler +import org.springframework.web.bind.annotation.RestControllerAdvice + +// TODO 통합된 에러 핸들링 필요(ErrorResponse 규격화) +@RestControllerAdvice +class CommonControllerAdvice { + + companion object : KLogging() + + @ExceptionHandler(AuthenticationException::class) + fun handleAuthenticationException(e: AuthenticationException): ResponseEntity { + logger.error { "AuthenticationException: ${e.message}" } + return ResponseEntity.ok().body( + ErrorResponse( + code = HttpStatus.BAD_REQUEST.value(), + message = "계정 혹은 비밀번호가 일치하지 않습니다." + ) + ) + } +} \ No newline at end of file diff --git a/dongne-common/src/main/kotlin/io/beaniejoy/dongnecafe/error/ErrorResponse.kt b/dongne-common/src/main/kotlin/io/beaniejoy/dongnecafe/error/ErrorResponse.kt new file mode 100644 index 0000000..a6e8abd --- /dev/null +++ b/dongne-common/src/main/kotlin/io/beaniejoy/dongnecafe/error/ErrorResponse.kt @@ -0,0 +1,6 @@ +package io.beaniejoy.dongnecafe.error + +data class ErrorResponse( + val code: Int, + val message: String? +) \ No newline at end of file diff --git a/dongne-service-api/src/main/kotlin/io/beaniejoy/dongnecafe/domain/cafe/service/CafeMenuService.kt b/dongne-service-api/src/main/kotlin/io/beaniejoy/dongnecafe/domain/cafe/service/CafeMenuService.kt index 23c0857..72733c6 100644 --- a/dongne-service-api/src/main/kotlin/io/beaniejoy/dongnecafe/domain/cafe/service/CafeMenuService.kt +++ b/dongne-service-api/src/main/kotlin/io/beaniejoy/dongnecafe/domain/cafe/service/CafeMenuService.kt @@ -1,7 +1,7 @@ package io.beaniejoy.dongnecafe.domain.cafe.service import io.beaniejoy.dongnecafe.domain.cafe.model.response.CafeMenuDetailedInfo -import io.beaniejoy.dongnecafe.common.error.exception.CafeMenuNotFoundException +import io.beaniejoy.dongnecafe.error.exception.CafeMenuNotFoundException import io.beaniejoy.dongnecafe.domain.cafe.model.request.CafeMenuUpdateRequest import io.beaniejoy.dongnecafe.domain.cafe.repository.CafeMenuRepository import org.springframework.data.repository.findByIdOrNull diff --git a/dongne-service-api/src/main/kotlin/io/beaniejoy/dongnecafe/domain/cafe/service/CafeService.kt b/dongne-service-api/src/main/kotlin/io/beaniejoy/dongnecafe/domain/cafe/service/CafeService.kt index 8d0504c..e311c5d 100644 --- a/dongne-service-api/src/main/kotlin/io/beaniejoy/dongnecafe/domain/cafe/service/CafeService.kt +++ b/dongne-service-api/src/main/kotlin/io/beaniejoy/dongnecafe/domain/cafe/service/CafeService.kt @@ -4,8 +4,8 @@ import io.beaniejoy.dongnecafe.domain.cafe.model.response.CafeDetailedInfo import io.beaniejoy.dongnecafe.domain.cafe.model.response.CafeSearchInfo import io.beaniejoy.dongnecafe.domain.cafe.model.request.CafeMenuRegisterRequest import io.beaniejoy.dongnecafe.domain.cafe.entity.Cafe -import io.beaniejoy.dongnecafe.common.error.exception.CafeExistedException -import io.beaniejoy.dongnecafe.common.error.exception.CafeNotFoundException +import io.beaniejoy.dongnecafe.error.exception.CafeExistedException +import io.beaniejoy.dongnecafe.error.exception.CafeNotFoundException import io.beaniejoy.dongnecafe.domain.cafe.repository.CafeRepository import mu.KLogging import org.springframework.data.domain.Page diff --git a/dongne-service-api/src/main/kotlin/io/beaniejoy/dongnecafe/domain/cafe/service/MenuOptionService.kt b/dongne-service-api/src/main/kotlin/io/beaniejoy/dongnecafe/domain/cafe/service/MenuOptionService.kt index dde1d00..a34440e 100644 --- a/dongne-service-api/src/main/kotlin/io/beaniejoy/dongnecafe/domain/cafe/service/MenuOptionService.kt +++ b/dongne-service-api/src/main/kotlin/io/beaniejoy/dongnecafe/domain/cafe/service/MenuOptionService.kt @@ -1,6 +1,6 @@ package io.beaniejoy.dongnecafe.domain.cafe.service -import io.beaniejoy.dongnecafe.common.error.exception.MenuOptionNotFoundException +import io.beaniejoy.dongnecafe.error.exception.MenuOptionNotFoundException import io.beaniejoy.dongnecafe.domain.cafe.model.request.MenuOptionUpdateRequest import io.beaniejoy.dongnecafe.domain.cafe.repository.MenuOptionRepository import org.springframework.data.repository.findByIdOrNull diff --git a/dongne-service-api/src/main/kotlin/io/beaniejoy/dongnecafe/domain/cafe/service/OptionDetailService.kt b/dongne-service-api/src/main/kotlin/io/beaniejoy/dongnecafe/domain/cafe/service/OptionDetailService.kt index 269589b..94e5753 100644 --- a/dongne-service-api/src/main/kotlin/io/beaniejoy/dongnecafe/domain/cafe/service/OptionDetailService.kt +++ b/dongne-service-api/src/main/kotlin/io/beaniejoy/dongnecafe/domain/cafe/service/OptionDetailService.kt @@ -1,6 +1,6 @@ package io.beaniejoy.dongnecafe.domain.cafe.service -import io.beaniejoy.dongnecafe.common.error.exception.OptionDetailNotFoundException +import io.beaniejoy.dongnecafe.error.exception.OptionDetailNotFoundException import io.beaniejoy.dongnecafe.domain.cafe.model.request.OptionDetailUpdateRequest import io.beaniejoy.dongnecafe.domain.cafe.repository.OptionDetailRepository import org.springframework.data.repository.findByIdOrNull diff --git a/dongne-service-api/src/main/kotlin/io/beaniejoy/dongnecafe/common/error/CafeExceptionHandler.kt b/dongne-service-api/src/main/kotlin/io/beaniejoy/dongnecafe/error/CafeExceptionHandler.kt similarity index 79% rename from dongne-service-api/src/main/kotlin/io/beaniejoy/dongnecafe/common/error/CafeExceptionHandler.kt rename to dongne-service-api/src/main/kotlin/io/beaniejoy/dongnecafe/error/CafeExceptionHandler.kt index c2e534c..1d869ea 100644 --- a/dongne-service-api/src/main/kotlin/io/beaniejoy/dongnecafe/common/error/CafeExceptionHandler.kt +++ b/dongne-service-api/src/main/kotlin/io/beaniejoy/dongnecafe/error/CafeExceptionHandler.kt @@ -1,6 +1,6 @@ -package io.beaniejoy.dongnecafe.common.error +package io.beaniejoy.dongnecafe.error -import io.beaniejoy.dongnecafe.common.error.exception.CafeNotFoundException +import io.beaniejoy.dongnecafe.error.exception.CafeNotFoundException import org.springframework.http.ResponseEntity import org.springframework.web.bind.annotation.ExceptionHandler import org.springframework.web.bind.annotation.RestControllerAdvice diff --git a/dongne-service-api/src/main/kotlin/io/beaniejoy/dongnecafe/common/error/exception/CafeExistedException.kt b/dongne-service-api/src/main/kotlin/io/beaniejoy/dongnecafe/error/exception/CafeExistedException.kt similarity index 63% rename from dongne-service-api/src/main/kotlin/io/beaniejoy/dongnecafe/common/error/exception/CafeExistedException.kt rename to dongne-service-api/src/main/kotlin/io/beaniejoy/dongnecafe/error/exception/CafeExistedException.kt index cbf77c8..e88e84c 100644 --- a/dongne-service-api/src/main/kotlin/io/beaniejoy/dongnecafe/common/error/exception/CafeExistedException.kt +++ b/dongne-service-api/src/main/kotlin/io/beaniejoy/dongnecafe/error/exception/CafeExistedException.kt @@ -1,3 +1,3 @@ -package io.beaniejoy.dongnecafe.common.error.exception +package io.beaniejoy.dongnecafe.error.exception class CafeExistedException(name: String) : RuntimeException("Cafe[$name] is already existed") \ No newline at end of file diff --git a/dongne-service-api/src/main/kotlin/io/beaniejoy/dongnecafe/common/error/exception/CafeMenuNotFoundException.kt b/dongne-service-api/src/main/kotlin/io/beaniejoy/dongnecafe/error/exception/CafeMenuNotFoundException.kt similarity index 74% rename from dongne-service-api/src/main/kotlin/io/beaniejoy/dongnecafe/common/error/exception/CafeMenuNotFoundException.kt rename to dongne-service-api/src/main/kotlin/io/beaniejoy/dongnecafe/error/exception/CafeMenuNotFoundException.kt index 1a963a8..bb60691 100644 --- a/dongne-service-api/src/main/kotlin/io/beaniejoy/dongnecafe/common/error/exception/CafeMenuNotFoundException.kt +++ b/dongne-service-api/src/main/kotlin/io/beaniejoy/dongnecafe/error/exception/CafeMenuNotFoundException.kt @@ -1,4 +1,4 @@ -package io.beaniejoy.dongnecafe.common.error.exception +package io.beaniejoy.dongnecafe.error.exception class CafeMenuNotFoundException(menuId: Long, cafeId: Long) : RuntimeException("Cafe[${cafeId}]의 Menu[${menuId}]는 존재하지 않는 메뉴입니다.") \ No newline at end of file diff --git a/dongne-service-api/src/main/kotlin/io/beaniejoy/dongnecafe/common/error/exception/CafeNotFoundException.kt b/dongne-service-api/src/main/kotlin/io/beaniejoy/dongnecafe/error/exception/CafeNotFoundException.kt similarity index 62% rename from dongne-service-api/src/main/kotlin/io/beaniejoy/dongnecafe/common/error/exception/CafeNotFoundException.kt rename to dongne-service-api/src/main/kotlin/io/beaniejoy/dongnecafe/error/exception/CafeNotFoundException.kt index 053daec..e8a0c09 100644 --- a/dongne-service-api/src/main/kotlin/io/beaniejoy/dongnecafe/common/error/exception/CafeNotFoundException.kt +++ b/dongne-service-api/src/main/kotlin/io/beaniejoy/dongnecafe/error/exception/CafeNotFoundException.kt @@ -1,3 +1,3 @@ -package io.beaniejoy.dongnecafe.common.error.exception +package io.beaniejoy.dongnecafe.error.exception class CafeNotFoundException(cafeId: Long) : RuntimeException("Cafe[$cafeId] is not found") \ No newline at end of file diff --git a/dongne-service-api/src/main/kotlin/io/beaniejoy/dongnecafe/common/error/exception/MenuOptionNotFoundException.kt b/dongne-service-api/src/main/kotlin/io/beaniejoy/dongnecafe/error/exception/MenuOptionNotFoundException.kt similarity index 67% rename from dongne-service-api/src/main/kotlin/io/beaniejoy/dongnecafe/common/error/exception/MenuOptionNotFoundException.kt rename to dongne-service-api/src/main/kotlin/io/beaniejoy/dongnecafe/error/exception/MenuOptionNotFoundException.kt index 44742f6..cb42fe7 100644 --- a/dongne-service-api/src/main/kotlin/io/beaniejoy/dongnecafe/common/error/exception/MenuOptionNotFoundException.kt +++ b/dongne-service-api/src/main/kotlin/io/beaniejoy/dongnecafe/error/exception/MenuOptionNotFoundException.kt @@ -1,3 +1,3 @@ -package io.beaniejoy.dongnecafe.common.error.exception +package io.beaniejoy.dongnecafe.error.exception class MenuOptionNotFoundException(menuOptionId: Long) : RuntimeException("MenuOption[$menuOptionId] is not found") \ No newline at end of file diff --git a/dongne-service-api/src/main/kotlin/io/beaniejoy/dongnecafe/common/error/exception/OptionDetailNotFoundException.kt b/dongne-service-api/src/main/kotlin/io/beaniejoy/dongnecafe/error/exception/OptionDetailNotFoundException.kt similarity index 69% rename from dongne-service-api/src/main/kotlin/io/beaniejoy/dongnecafe/common/error/exception/OptionDetailNotFoundException.kt rename to dongne-service-api/src/main/kotlin/io/beaniejoy/dongnecafe/error/exception/OptionDetailNotFoundException.kt index 3bb8d45..69df3ac 100644 --- a/dongne-service-api/src/main/kotlin/io/beaniejoy/dongnecafe/common/error/exception/OptionDetailNotFoundException.kt +++ b/dongne-service-api/src/main/kotlin/io/beaniejoy/dongnecafe/error/exception/OptionDetailNotFoundException.kt @@ -1,3 +1,3 @@ -package io.beaniejoy.dongnecafe.common.error.exception +package io.beaniejoy.dongnecafe.error.exception class OptionDetailNotFoundException(optionDetailId: Long) : RuntimeException("OptionDetail[$optionDetailId] is not found") \ No newline at end of file diff --git a/dongne-service-api/src/test/kotlin/io/beaniejoy/dongnecafe/domain/cafe/service/CafeMenuServiceTest.kt b/dongne-service-api/src/test/kotlin/io/beaniejoy/dongnecafe/domain/cafe/service/CafeMenuServiceTest.kt index 4654bf1..f9789a2 100644 --- a/dongne-service-api/src/test/kotlin/io/beaniejoy/dongnecafe/domain/cafe/service/CafeMenuServiceTest.kt +++ b/dongne-service-api/src/test/kotlin/io/beaniejoy/dongnecafe/domain/cafe/service/CafeMenuServiceTest.kt @@ -1,7 +1,7 @@ package io.beaniejoy.dongnecafe.domain.cafe.service import io.beaniejoy.dongnecafe.domain.cafe.entity.CafeMenu -import io.beaniejoy.dongnecafe.common.error.exception.CafeMenuNotFoundException +import io.beaniejoy.dongnecafe.error.exception.CafeMenuNotFoundException import io.beaniejoy.dongnecafe.domain.cafe.repository.CafeMenuRepository import io.beaniejoy.dongnecafe.domain.cafe.repository.MenuOptionRepository import io.beaniejoy.dongnecafe.domain.cafe.repository.OptionDetailRepository diff --git a/dongne-service-api/src/test/kotlin/io/beaniejoy/dongnecafe/domain/cafe/service/CafeServiceTest.kt b/dongne-service-api/src/test/kotlin/io/beaniejoy/dongnecafe/domain/cafe/service/CafeServiceTest.kt index c66c95a..7914fe0 100644 --- a/dongne-service-api/src/test/kotlin/io/beaniejoy/dongnecafe/domain/cafe/service/CafeServiceTest.kt +++ b/dongne-service-api/src/test/kotlin/io/beaniejoy/dongnecafe/domain/cafe/service/CafeServiceTest.kt @@ -1,8 +1,8 @@ package io.beaniejoy.dongnecafe.domain.cafe.service import io.beaniejoy.dongnecafe.domain.cafe.entity.Cafe -import io.beaniejoy.dongnecafe.common.error.exception.CafeExistedException -import io.beaniejoy.dongnecafe.common.error.exception.CafeNotFoundException +import io.beaniejoy.dongnecafe.error.exception.CafeExistedException +import io.beaniejoy.dongnecafe.error.exception.CafeNotFoundException import io.beaniejoy.dongnecafe.domain.cafe.repository.CafeRepository import io.beaniejoy.dongnecafe.domain.cafe.utils.CafeTestUtils import org.junit.jupiter.api.*