generated from pricelees/issue-pr-template
[#34] 회원 / 인증 도메인 재정의 #43
58
src/main/kotlin/roomescape/admin/business/AdminService.kt
Normal file
58
src/main/kotlin/roomescape/admin/business/AdminService.kt
Normal file
@ -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)
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -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", "관리자를 찾을 수 없어요."),
|
||||
}
|
||||
|
||||
@ -2,4 +2,6 @@ package roomescape.admin.infrastructure.persistence
|
||||
|
||||
import org.springframework.data.jpa.repository.JpaRepository
|
||||
|
||||
interface AdminRepository : JpaRepository<AdminEntity, Long>
|
||||
interface AdminRepository : JpaRepository<AdminEntity, Long> {
|
||||
fun findByAccount(account: String): AdminEntity?
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user