Files
WeatherTool/src/main/scala/app/Main.scala
T
2025-02-12 23:32:30 +02:00

34 lines
1.2 KiB
Scala

package app
import cats.effect._
import cats.implicits.catsSyntaxTuple4Parallel
import data.DataService
import db.{DBConnection, PostgresService}
import fetch.{FetchService, FileFetchScheduler}
import server.Server
object Main extends IOApp {
def run(args: List[String]): IO[ExitCode] = {
for {
transactor <- DBConnection.transactor[IO]
postgresService <- PostgresService.of(transactor)
_ <- postgresService.createWeatherTable // create table if it does not exists
fetch <- FetchService.of
fileFetchScheduler <- FileFetchScheduler.of(postgresService, fetch)
fetchCsvTask = fileFetchScheduler.run.compile.drain
scheduler <- fetchDMI.Scheduler.of("Cleanup", List(1))
cleanupTask = scheduler.scheduleTask(DataService.deleteOldForecasts()).compile.drain
scheduler <- fetchDMI.Scheduler.of("Fetch Grib", List(2))
fetchGrib <- fetchDMI.FetchService.of
fetchGribTask = scheduler.scheduleTask(fetchGrib.fetchRecentForecasts()).compile.drain
server <- Server.of(postgresService, fetch)
serverTask = server.run
exitCode <- (serverTask, fetchCsvTask, cleanupTask, fetchGribTask).parMapN((_, _, _, _) => ExitCode.Success)
} yield exitCode
}
}