Refactor FileFetchScheduler

This commit is contained in:
Guntis Smaukstelis
2023-05-23 19:16:57 +03:00
parent 6f005c56d7
commit bd302618d3
+17 -16
View File
@@ -9,29 +9,30 @@ import org.typelevel.log4cats.slf4j.Slf4jLogger
object FileFetchScheduler { object FileFetchScheduler {
def of(dbService: DBService, fetch: FetchService): IO[FileFetchScheduler] = { def of(dbService: DBService, fetch: FetchService): IO[FileFetchScheduler] = {
Slf4jLogger.create[IO].map { Scheduler.of.flatMap { scheduler =>
new FileFetchScheduler(dbService, fetch, _) Slf4jLogger.create[IO].map {
new FileFetchScheduler(dbService, fetch, scheduler, _)
}
} }
} }
} }
class FileFetchScheduler(dbService: DBService, fetch: FetchService, log: Logger[IO]) {
class FileFetchScheduler(dbService: DBService, fetch: FetchService, scheduler: Scheduler, log: Logger[IO]) {
def run: Stream[IO, Unit] = { def run: Stream[IO, Unit] = {
val fetchTask = FileNameService.generateCurrentHour.flatMap(fetch.fetchSingleFile) val fetchTask = FileNameService.generateCurrentHour.flatMap(fetch.fetchSingleFile)
Stream.eval(Scheduler.of).flatMap { scheduler => scheduler.scheduleTask(fetchTask)
scheduler.scheduleTask(fetchTask) .evalMap {
.evalMap { case Left(fetchErr) =>
case Left(fetchErr) => log.error(s"Fetch error: $fetchErr")
log.error(s"Fetch error: $fetchErr") case Right((name, content)) =>
case Right((name, content)) => dbService.save(name, content).attempt.flatMap {
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 Left(err) => log.error(s"error: $err")
case Right(saveResult) => saveResult match { case Right(savedName) => log.info(s"saved: $savedName")
case Left(err) => log.error(s"error: $err")
case Right(savedName) => log.info(s"saved: $savedName")
}
} }
} }
} }
} }
} }