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.AuditConstant import roomescape.common.dto.OperatorInfo import roomescape.common.dto.toCredentials private val log: KLogger = KotlinLogging.logger {} @Service class AdminService( private val adminRepository: AdminRepository, ) { @Transactional(readOnly = true) fun findCredentialsByAccount(account: String): AdminLoginCredentials { log.info { "[AdminService.findCredentialsByAccount] 관리자 조회 시작: account=${account}" } return adminRepository.findByAccount(account) ?.let { log.info { "[AdminService.findCredentialsByAccount] 관리자 조회 완료: account=${account}, id=${it.id}" } it.toCredentials() } ?: run { log.info { "[AdminService.findCredentialsByAccount] 관리자 조회 실패: account=${account}" } throw AdminException(AdminErrorCode.ADMIN_NOT_FOUND) } } @Transactional(readOnly = true) fun findOperatorOrUnknown(id: Long): OperatorInfo { log.info { "[AdminService.findOperatorById] 작업자 정보 조회 시작: id=${id}" } return adminRepository.findByIdOrNull(id)?.let { admin -> OperatorInfo(admin.id, admin.name).also { log.info { "[AdminService.findOperatorById] 작업자 정보 조회 완료: id=${admin.id}, name=${admin.name}" } } } ?: run { log.warn { "[AdminService.findOperatorById] 작업자 정보 조회 실패. id=${id}" } AuditConstant.UNKNOWN_OPERATOR } } }