From 8c7bf2980fabc5c3d8facb4b32816733e62e8b70 Mon Sep 17 00:00:00 2001 From: pricelees Date: Thu, 11 Sep 2025 16:50:55 +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=20admin=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/admin/business/AdminService.kt | 58 +++++++++++++++++++ .../admin/exception/AdminException.kt | 4 +- .../persistence/AdminRepository.kt | 4 +- 3 files changed, 64 insertions(+), 2 deletions(-) create mode 100644 src/main/kotlin/roomescape/admin/business/AdminService.kt diff --git a/src/main/kotlin/roomescape/admin/business/AdminService.kt b/src/main/kotlin/roomescape/admin/business/AdminService.kt new file mode 100644 index 00000000..ac121aee --- /dev/null +++ b/src/main/kotlin/roomescape/admin/business/AdminService.kt @@ -0,0 +1,58 @@ +package roomescape.admin.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.admin.exception.AdminErrorCode +import roomescape.admin.exception.AdminException +import roomescape.admin.infrastructure.persistence.AdminEntity +import roomescape.admin.infrastructure.persistence.AdminRepository +import roomescape.common.dto.AdminLoginCredentials +import roomescape.common.dto.CurrentUserContext +import roomescape.common.dto.PrincipalType + +private val log: KLogger = KotlinLogging.logger {} + +@Service +class AdminService( + private val adminRepository: AdminRepository, +) { + @Transactional(readOnly = true) + fun findContextById(id: Long): CurrentUserContext { + log.info { "[AdminService.findById] 현재 로그인된 관리자 조회 시작: id=${id}" } + + val admin: AdminEntity = findOrThrow(id) + + return CurrentUserContext(admin.id, admin.name, PrincipalType.ADMIN).also { + log.info { "[AdminService.findById] 현재 로그인된 관리자 조회 완료: id=${id}" } + } + } + + @Transactional(readOnly = true) + fun findCredentialsByAccount(account: String): AdminLoginCredentials { + log.info { "[AdminService.findInfoByAccount] 관리자 조회 시작: account=${account}" } + + return adminRepository.findByAccount(account) + ?.let { + log.info { "[AdminService.findByAccount] 관리자 조회 완료: id=${it.id}" } + AdminLoginCredentials(it.id, it.password, it.permissionLevel) + } + ?: run { + log.info { "[AdminService.findInfoByAccount] 관리자 조회 실패" } + throw AdminException(AdminErrorCode.ADMIN_NOT_FOUND) + } + } + + private fun findOrThrow(id: Long): AdminEntity { + log.info { "[AdminService.findOrThrow] 조회 시작: id=${id}" } + + return adminRepository.findByIdOrNull(id) + ?.also { log.info { "[AdminService.findOrThrow] 조회 완료: id=${id}, name=${it.name}" } } + ?: run { + log.info { "[AdminService.findOrThrow] 조회 실패: id=${id}" } + throw AdminException(AdminErrorCode.ADMIN_NOT_FOUND) + } + } +} diff --git a/src/main/kotlin/roomescape/admin/exception/AdminException.kt b/src/main/kotlin/roomescape/admin/exception/AdminException.kt index 3347ab4d..a9bfcc8c 100644 --- a/src/main/kotlin/roomescape/admin/exception/AdminException.kt +++ b/src/main/kotlin/roomescape/admin/exception/AdminException.kt @@ -13,4 +13,6 @@ enum class AdminErrorCode( override val httpStatus: HttpStatus, override val errorCode: String, override val message: String -) : ErrorCode +) : ErrorCode { + ADMIN_NOT_FOUND(HttpStatus.NOT_FOUND, "A001", "관리자를 찾을 수 없어요."), +} diff --git a/src/main/kotlin/roomescape/admin/infrastructure/persistence/AdminRepository.kt b/src/main/kotlin/roomescape/admin/infrastructure/persistence/AdminRepository.kt index fd86eedf..7520c23c 100644 --- a/src/main/kotlin/roomescape/admin/infrastructure/persistence/AdminRepository.kt +++ b/src/main/kotlin/roomescape/admin/infrastructure/persistence/AdminRepository.kt @@ -2,4 +2,6 @@ package roomescape.admin.infrastructure.persistence import org.springframework.data.jpa.repository.JpaRepository -interface AdminRepository : JpaRepository \ No newline at end of file +interface AdminRepository : JpaRepository { + fun findByAccount(account: String): AdminEntity? +}