package roomescape.theme.implement import io.github.oshai.kotlinlogging.KLogger import io.github.oshai.kotlinlogging.KotlinLogging import org.springframework.data.repository.findByIdOrNull import org.springframework.stereotype.Component import roomescape.theme.exception.ThemeErrorCode import roomescape.theme.exception.ThemeException import roomescape.theme.infrastructure.persistence.ThemeEntity import roomescape.theme.infrastructure.persistence.ThemeRepository import java.time.LocalDate private val log: KLogger = KotlinLogging.logger {} @Component class ThemeFinder( private val themeRepository: ThemeRepository ) { fun findAll(): List { log.debug { "[ThemeFinder.findAll] 시작" } return themeRepository.findAll() .also { log.debug { "[TimeFinder.findAll] ${it.size}개 테마 조회 완료" } } } fun findById(id: Long): ThemeEntity { log.debug { "[ThemeFinder.findById] 조회 시작: memberId=$id" } return themeRepository.findByIdOrNull(id) ?.also { log.debug { "[ThemeFinder.findById] 조회 완료: id=$id, name=${it.name}" } } ?: run { log.warn { "[ThemeFinder.findById] 조회 실패: id=$id" } throw ThemeException(ThemeErrorCode.THEME_NOT_FOUND) } } fun findMostReservedThemes( count: Int, startFrom: LocalDate, endAt: LocalDate ): List { log.debug { "[ThemeFinder.findMostReservedThemes] 시작. count=$count, startFrom=$startFrom, endAt=$endAt" } return themeRepository.findPopularThemes(startFrom, endAt, count) .also { log.debug { "[ThemeFinder.findMostReservedThemes] ${it.size} / ${count}개 테마 조회 완료" } } } }