DateBalanceScheduler.kt
package com.distasilucas.cryptobalancetracker.scheduler
import com.distasilucas.cryptobalancetracker.entity.DateBalance
import com.distasilucas.cryptobalancetracker.repository.DateBalanceRepository
import com.distasilucas.cryptobalancetracker.service.InsightsService
import io.github.oshai.kotlinlogging.KotlinLogging
import org.springframework.scheduling.annotation.Scheduled
import org.springframework.stereotype.Component
import java.time.Clock
import java.time.LocalDate
@Component
class DateBalanceScheduler(
private val dateBalancesRepository: DateBalanceRepository,
private val insightsService: InsightsService,
private val clock: Clock
) {
private val logger = KotlinLogging.logger { }
@Scheduled(cron = "\${day-balance.cron}")
fun saveDateBalance() {
logger.info { "Running cron to save daily balance" }
val today = LocalDate.now(clock).toString()
val totalBalances = insightsService.retrieveHomeInsightsResponse().balances
val optionalDateBalance: DateBalance? = dateBalancesRepository.findDateBalanceByDate(today)
if (optionalDateBalance != null) {
val updatedDateBalance = DateBalance(optionalDateBalance.id, today, totalBalances)
logger.info {"Updating balances for date $today. Old Balance: $optionalDateBalance. New balances $updatedDateBalance" }
dateBalancesRepository.save(updatedDateBalance)
} else {
logger.info { "Saving balances $totalBalances for date $today" }
dateBalancesRepository.save(
DateBalance(
date = today,
usdBalance = totalBalances.fiat.usd,
eurBalance = totalBalances.fiat.eur,
btcBalance = totalBalances.btc
)
)
}
}
}