CacheService.kt
package com.distasilucas.cryptobalancetracker.service
import com.distasilucas.cryptobalancetracker.constants.ALL_PLATFORMS_CACHE
import com.distasilucas.cryptobalancetracker.constants.HOME_INSIGHTS_RESPONSE_CACHE
import com.distasilucas.cryptobalancetracker.constants.CRYPTOS_BALANCES_INSIGHTS_CACHE
import com.distasilucas.cryptobalancetracker.constants.CRYPTOS_CRYPTOS_IDS_CACHE
import com.distasilucas.cryptobalancetracker.constants.CRYPTO_INSIGHTS_CACHE
import com.distasilucas.cryptobalancetracker.constants.DATES_BALANCES_CACHE
import com.distasilucas.cryptobalancetracker.constants.GOAL_RESPONSE_GOAL_ID_CACHE
import com.distasilucas.cryptobalancetracker.constants.PAGE_GOALS_RESPONSE_PAGE_CACHE
import com.distasilucas.cryptobalancetracker.constants.PLATFORMS_BALANCES_INSIGHTS_CACHE
import com.distasilucas.cryptobalancetracker.constants.PLATFORMS_PLATFORMS_IDS_CACHE
import com.distasilucas.cryptobalancetracker.constants.PLATFORM_INSIGHTS_CACHE
import com.distasilucas.cryptobalancetracker.constants.PLATFORM_PLATFORM_ID_CACHE
import com.distasilucas.cryptobalancetracker.constants.PRICE_TARGET_ID_CACHE
import com.distasilucas.cryptobalancetracker.constants.PRICE_TARGET_RESPONSE_ID_CACHE
import com.distasilucas.cryptobalancetracker.constants.PRICE_TARGET_RESPONSE_PAGE_CACHE
import com.distasilucas.cryptobalancetracker.constants.USER_CRYPTOS_CACHE
import com.distasilucas.cryptobalancetracker.constants.USER_CRYPTOS_COINGECKO_CRYPTO_ID_CACHE
import com.distasilucas.cryptobalancetracker.constants.USER_CRYPTOS_PLATFORM_ID_CACHE
import com.distasilucas.cryptobalancetracker.constants.USER_CRYPTO_ID_CACHE
import com.distasilucas.cryptobalancetracker.constants.USER_CRYPTO_RESPONSE_USER_CRYPTO_ID_CACHE
import io.github.oshai.kotlinlogging.KotlinLogging
import org.springframework.cache.CacheManager
import org.springframework.stereotype.Service
@Service
class CacheService(private val cacheManager: CacheManager) {
private val logger = KotlinLogging.logger { }
fun invalidate(firstCache: CacheType, vararg caches: CacheType) {
invalidate(firstCache)
caches.forEach { invalidate(it) }
}
private fun invalidate(cache: CacheType) {
when (cache) {
CacheType.USER_CRYPTOS_CACHES -> invalidateUserCryptosCaches()
CacheType.CRYPTOS_CACHES -> invalidateCryptosCache()
CacheType.PLATFORMS_CACHES -> invalidatePlatformsCaches()
CacheType.GOALS_CACHES -> invalidateGoalsCaches()
CacheType.PRICE_TARGETS_CACHES -> invalidatePriceTargetCaches()
CacheType.INSIGHTS_CACHES -> invalidateInsightsCache()
}
}
private fun invalidateUserCryptosCaches() {
logger.info { "Invalidating user cryptos caches" }
cacheManager.getCache(USER_CRYPTOS_CACHE)!!.invalidate()
cacheManager.getCache(USER_CRYPTOS_PLATFORM_ID_CACHE)!!.invalidate()
cacheManager.getCache(USER_CRYPTOS_COINGECKO_CRYPTO_ID_CACHE)!!.invalidate()
cacheManager.getCache(USER_CRYPTO_ID_CACHE)!!.invalidate()
cacheManager.getCache(USER_CRYPTO_RESPONSE_USER_CRYPTO_ID_CACHE)!!.invalidate()
}
private fun invalidatePlatformsCaches() {
logger.info { "Invalidating platforms caches" }
cacheManager.getCache(PLATFORMS_PLATFORMS_IDS_CACHE)!!.invalidate()
cacheManager.getCache(ALL_PLATFORMS_CACHE)!!.invalidate()
cacheManager.getCache(PLATFORM_PLATFORM_ID_CACHE)!!.invalidate()
}
private fun invalidateCryptosCache() {
logger.info { "Invalidating cryptos cache" }
cacheManager.getCache(CRYPTOS_CRYPTOS_IDS_CACHE)!!.invalidate()
}
private fun invalidateGoalsCaches() {
logger.info { "Invalidating goals caches" }
cacheManager.getCache(GOAL_RESPONSE_GOAL_ID_CACHE)!!.invalidate()
cacheManager.getCache(PAGE_GOALS_RESPONSE_PAGE_CACHE)!!.invalidate()
}
private fun invalidatePriceTargetCaches() {
logger.info { "Invalidating price target caches" }
cacheManager.getCache(PRICE_TARGET_ID_CACHE)!!.invalidate()
cacheManager.getCache(PRICE_TARGET_RESPONSE_ID_CACHE)!!.invalidate()
cacheManager.getCache(PRICE_TARGET_RESPONSE_PAGE_CACHE)!!.invalidate()
}
private fun invalidateInsightsCache() {
logger.info { "Invalidating insights caches" }
cacheManager.getCache(HOME_INSIGHTS_RESPONSE_CACHE)!!.invalidate()
cacheManager.getCache(DATES_BALANCES_CACHE)!!.invalidate()
cacheManager.getCache(PLATFORM_INSIGHTS_CACHE)!!.invalidate()
cacheManager.getCache(CRYPTO_INSIGHTS_CACHE)!!.invalidate()
cacheManager.getCache(PLATFORMS_BALANCES_INSIGHTS_CACHE)!!.invalidate()
cacheManager.getCache(CRYPTOS_BALANCES_INSIGHTS_CACHE)!!.invalidate()
}
}
enum class CacheType {
USER_CRYPTOS_CACHES,
CRYPTOS_CACHES,
PLATFORMS_CACHES,
GOALS_CACHES,
PRICE_TARGETS_CACHES,
INSIGHTS_CACHES
}