From 39da28d3f1e12dd335ee73032b282be2e269494b Mon Sep 17 00:00:00 2001 From: pricelees Date: Thu, 11 Sep 2025 16:52:56 +0900 Subject: [PATCH] =?UTF-8?q?feat:=20=EC=9D=B4=EC=A0=84=EC=97=90=20=EC=A0=95?= =?UTF-8?q?=EC=9D=98=ED=95=9C=20Credential=EA=B3=BC=20Context=EB=A5=BC=20?= =?UTF-8?q?=EA=B0=80=EC=A0=B8=EC=98=A4=EB=8A=94=20user=20=EC=84=9C?= =?UTF-8?q?=EB=B9=84=EC=8A=A4=20=EB=A1=9C=EC=A7=81=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../roomescape/member/business/UserService.kt | 52 +++++++++++++++++++ .../persistence/UserRepositories.kt | 5 +- 2 files changed, 56 insertions(+), 1 deletion(-) create mode 100644 src/main/kotlin/roomescape/member/business/UserService.kt diff --git a/src/main/kotlin/roomescape/member/business/UserService.kt b/src/main/kotlin/roomescape/member/business/UserService.kt new file mode 100644 index 00000000..036f5033 --- /dev/null +++ b/src/main/kotlin/roomescape/member/business/UserService.kt @@ -0,0 +1,52 @@ +package roomescape.member.business + +import io.github.oshai.kotlinlogging.KLogger +import io.github.oshai.kotlinlogging.KotlinLogging +import org.springframework.data.repository.findByIdOrNull +import org.springframework.stereotype.Service +import org.springframework.transaction.annotation.Transactional +import roomescape.common.dto.CurrentUserContext +import roomescape.common.dto.PrincipalType +import roomescape.common.dto.UserLoginCredentials +import roomescape.member.exception.UserErrorCode +import roomescape.member.exception.UserException +import roomescape.member.infrastructure.persistence.UserEntity +import roomescape.member.infrastructure.persistence.UserRepository + +private val log: KLogger = KotlinLogging.logger {} + +@Service +class UserService( + private val userRepository: UserRepository, +) { + @Transactional(readOnly = true) + fun findContextById(id: Long): CurrentUserContext { + log.info { "[UserService.findContextById] 현재 로그인된 회원 조회 시작: id=${id}" } + val user: UserEntity = findOrThrow(id) + + return CurrentUserContext(user.id, user.name, PrincipalType.USER) + .also { + log.info { "[UserService.findContextById] 현재 로그인된 회원 조회 완료: id=${id}" } + } + } + + @Transactional(readOnly = true) + fun findCredentialsByAccount(email: String): UserLoginCredentials { + log.info { "[UserService.findCredentialsByAccount] 회원 조회 시작: email=${email}" } + + return userRepository.findByEmail(email) + ?.let { + log.info { "[UserService.findCredentialsByAccount] 회원 조회 완료: id=${it.id}" } + UserLoginCredentials(it.id, it.password) + } + ?: run { + log.info { "[UserService.findCredentialsByAccount] 회원 조회 실패" } + throw UserException(UserErrorCode.USER_NOT_FOUND) + } + } + + private fun findOrThrow(id: Long): UserEntity { + return userRepository.findByIdOrNull(id) + ?: throw UserException(UserErrorCode.USER_NOT_FOUND) + } +} diff --git a/src/main/kotlin/roomescape/member/infrastructure/persistence/UserRepositories.kt b/src/main/kotlin/roomescape/member/infrastructure/persistence/UserRepositories.kt index e9aee97b..13a0adb3 100644 --- a/src/main/kotlin/roomescape/member/infrastructure/persistence/UserRepositories.kt +++ b/src/main/kotlin/roomescape/member/infrastructure/persistence/UserRepositories.kt @@ -2,6 +2,9 @@ package roomescape.member.infrastructure.persistence import org.springframework.data.jpa.repository.JpaRepository -interface UserRepository : JpaRepository +interface UserRepository : JpaRepository { + + fun findByEmail(email: String): UserEntity? +} interface UserStatusHistoryRepository : JpaRepository