diff --git a/src/main/kotlin/roomescape/member/business/MemberService.kt b/src/main/kotlin/roomescape/member/business/MemberService.kt index 2dda221c..8ff4072e 100644 --- a/src/main/kotlin/roomescape/member/business/MemberService.kt +++ b/src/main/kotlin/roomescape/member/business/MemberService.kt @@ -1,11 +1,10 @@ package roomescape.member.business import org.springframework.data.repository.findByIdOrNull -import org.springframework.http.HttpStatus import org.springframework.stereotype.Service import org.springframework.transaction.annotation.Transactional -import roomescape.common.exception.ErrorType -import roomescape.common.exception.RoomescapeException +import roomescape.member.exception.MemberErrorCode +import roomescape.member.exception.MemberException import roomescape.member.infrastructure.persistence.MemberEntity import roomescape.member.infrastructure.persistence.MemberRepository import roomescape.member.web.MemberRetrieveListResponse @@ -17,24 +16,18 @@ class MemberService( private val memberRepository: MemberRepository ) { fun findMembers(): MemberRetrieveListResponse = MemberRetrieveListResponse( - memberRepository.findAll() - .map { it.toRetrieveResponse() } - .toList() + members = memberRepository.findAll().map { it.toRetrieveResponse() } ) - fun findById(memberId: Long): MemberEntity = memberRepository.findByIdOrNull(memberId) - ?: throw RoomescapeException( - ErrorType.MEMBER_NOT_FOUND, - String.format("[memberId: %d]", memberId), - HttpStatus.BAD_REQUEST - ) + fun findById(memberId: Long): MemberEntity = fetchOrThrow { + memberRepository.findByIdOrNull(memberId) + } - fun findByEmailAndPassword(email: String, password: String): MemberEntity = - memberRepository.findByEmailAndPassword(email, password) - ?: throw RoomescapeException( - ErrorType.MEMBER_NOT_FOUND, - String.format("[email: %s, password: %s]", email, password), - HttpStatus.BAD_REQUEST - ) + fun findByEmailAndPassword(email: String, password: String): MemberEntity = fetchOrThrow { + memberRepository.findByEmailAndPassword(email, password) + } + + private fun fetchOrThrow(block: () -> MemberEntity?): MemberEntity { + return block() ?: throw MemberException(MemberErrorCode.MEMBER_NOT_FOUND) + } } - diff --git a/src/main/kotlin/roomescape/member/exception/MemberErrorCode.kt b/src/main/kotlin/roomescape/member/exception/MemberErrorCode.kt new file mode 100644 index 00000000..3b365311 --- /dev/null +++ b/src/main/kotlin/roomescape/member/exception/MemberErrorCode.kt @@ -0,0 +1,12 @@ +package roomescape.member.exception + +import org.springframework.http.HttpStatus +import roomescape.common.exception.ErrorCode + +enum class MemberErrorCode( + override val httpStatus: HttpStatus, + override val errorCode: String, + override val message: String +) : ErrorCode { + MEMBER_NOT_FOUND(HttpStatus.NOT_FOUND, "M001", "회원을 찾을 수 없어요.") +} diff --git a/src/main/kotlin/roomescape/member/exception/MemberException.kt b/src/main/kotlin/roomescape/member/exception/MemberException.kt new file mode 100644 index 00000000..62bea601 --- /dev/null +++ b/src/main/kotlin/roomescape/member/exception/MemberException.kt @@ -0,0 +1,8 @@ +package roomescape.member.exception + +import roomescape.common.exception.RoomescapeExceptionV2 + +class MemberException( + override val errorCode: MemberErrorCode, + override val message: String = errorCode.message +) : RoomescapeExceptionV2(errorCode, message)