Files
WeatherTool/src/main/scala/fetch/FileFetchScheduler.scala
T
2023-05-21 22:37:33 +03:00

37 lines
1.1 KiB
Scala

package fetch
import cats.effect.IO
import db.DBService
import fs2.Stream
import org.typelevel.log4cats.Logger
import org.typelevel.log4cats.slf4j.Slf4jLogger
object FileFetchScheduler {
def of(dbService: DBService, fetch: FetchService): IO[FileFetchScheduler] = {
Slf4jLogger.create[IO].map {
new FileFetchScheduler(dbService, fetch, _)
}
}
}
class FileFetchScheduler(dbService: DBService, fetch: FetchService, log: Logger[IO]) {
def run: Stream[IO, Unit] = {
val fetchTask = FileNameService.generateCurrentHour.flatMap(fetch.fetchSingleFile)
Stream.eval(Scheduler.of).flatMap { scheduler =>
scheduler.scheduleTask(fetchTask)
.evalMap {
case Left(fetchErr) =>
log.error(s"Fetch error: $fetchErr")
case Right((name, content)) =>
dbService.save(name, content).attempt.flatMap {
case Left(err) => log.error(s"error: $err")
case Right(saveResult) => saveResult match {
case Left(err) => log.error(s"error: $err")
case Right(savedName) => log.info(s"saved: $savedName")
}
}
}
}
}
}