StatefulFetchService to save last 24h of data

This commit is contained in:
Guntis Smaukstelis
2023-05-25 00:06:20 +03:00
parent 77026a9cb0
commit d40aa9ec9b
8 changed files with 159 additions and 33 deletions
+4 -3
View File
@@ -2,16 +2,17 @@ package server
import cats.effect._
import cats.implicits.catsSyntaxTuple2Parallel
import db.DBService
import fetch.{FetchService, FileFetchScheduler}
import fetch.{FetchService, FileFetchScheduler, StatefulFetchService}
object Main extends IOApp {
def run(args: List[String]): IO[ExitCode] = {
for {
dbService <- DBService.of
fetch <- FetchService.of
fileFetchScheduler <- FileFetchScheduler.of(dbService, fetch)
statefulFetch <- StatefulFetchService.of(fetch)
fileFetchScheduler <- FileFetchScheduler.of(dbService, statefulFetch)
schedulerTask = fileFetchScheduler.run.compile.drain
server <- Server.of(dbService, fetch)
server <- Server.of(dbService, statefulFetch)
serverTask = server.run
exitCode <- (serverTask, schedulerTask).parMapN((_, _) => ExitCode.Success)
} yield exitCode
+3 -3
View File
@@ -4,7 +4,7 @@ import cats.effect._
import cats.implicits.toTraverseOps
import com.comcast.ip4s.IpLiteralSyntax
import db.DBService
import fetch.FetchService
import fetch.FetchServiceTrait
import parse.{Parser, WeatherData}
import server.ValidateRoutes.{AggKey, CityList, DateTimeRange, ValidDate}
import io.circe.{Json, Printer}
@@ -26,14 +26,14 @@ import scala.concurrent.duration.DurationInt
object Server {
def of(dbService: DBService, fetch: FetchService): IO[Server] = {
def of(dbService: DBService, fetch: FetchServiceTrait): IO[Server] = {
Slf4jLogger.create[IO].map {
new Server(dbService, fetch, _)
}
}
}
class Server(dbService: DBService, fetch: FetchService, log: Logger[IO]) {
class Server(dbService: DBService, fetch: FetchServiceTrait, log: Logger[IO]) {
// Define the extension method `pretty` for Json
implicit class JsonPrettyPrinter(json: Json) {