34 lines
1.2 KiB
Scala
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
|
|
}
|
|
} |