Return API responses as JSON

This commit is contained in:
b0txec
2026-08-22 14:22:15 +03:00
parent df911f14eb
commit f3197bf340
+6 -12
View File
@@ -10,7 +10,6 @@ import fetch.csv.FileNameService
import fetch.lvgmc.FetchService
import fs2.io.file.{Files, Path}
import server.ValidateRoutes.{AggFieldList, AggKey, CityList, DateTimeRange, Granularity, ValidateDate, ValidateDateTime, ValidateInt, ValidateMonths, ValidateZonedDateTime}
import io.circe.{Encoder, Json, Printer}
import org.http4s._
import org.http4s.dsl.io._
import org.http4s.implicits._
@@ -20,7 +19,6 @@ import org.http4s.server.middleware.CORSConfig
import org.http4s.server.staticcontent.FileService
import org.http4s.ember.server.EmberServerBuilder
import io.circe.generic.auto._
import io.circe.generic.semiauto.deriveEncoder
import io.circe.syntax._
import parse.csv.Aggregate.AggregateValueImplicits.aggregateValueEncoder
import parse.csv.Aggregate.userQueryEncoder
@@ -44,10 +42,6 @@ object Server {
}
class Server(postgresService: PostgresService, dataService: DataService, fetch: FetchService, log: Logger[IO]) {
implicit class JsonPrettyPrinter(json: Json) {
def pretty: String = Printer.spaces2.copy(dropNullValues = true).print(json)
}
private case class ResponseWrapper(result: Map[String, Option[Aggregate.AggregateValue]], query: UserQuery)
private case class LatestTemperature(city: String, observedAt: String, value: Option[Double])
@@ -82,7 +76,7 @@ class Server(postgresService: PostgresService, dataService: DataService, fetch:
// http://0.0.0.0:8080/api/show/grib-name/harmonie_2025-02-01T1500Z_2025-02-01T180000Z.grib
case GET -> Root / "show" / "grib" / fileName =>
dataService.getGribStucture(fileName).flatMap(response => Ok(response.asJson.pretty))
dataService.getGribStucture(fileName).flatMap(response => Ok(response.asJson))
case GET -> Root / "grib" / "binary-chunk" / ValidateInt(binaryOffset) / ValidateInt(binaryLength) / fileName =>
dataService.getBinaryChunk(binaryOffset, binaryLength, fileName).flatMap(buffer => Ok(buffer))
@@ -126,13 +120,13 @@ class Server(postgresService: PostgresService, dataService: DataService, fetch:
postgresService.query(userQuery)
.map(result => ResponseWrapper(result, userQuery))
.flatMap(responseWrapper => Ok(responseWrapper.asJson.pretty))
.flatMap(responseWrapper => Ok(responseWrapper.asJson))
// Latest observation-time temperatures for a fixed production station set.
case GET -> Root / "query" / "latest-temperatures" / CityList(cities) =>
postgresService.queryLatestTemperatures(cities)
.map(_.map { case (city, observedAt, value) => LatestTemperature(city, observedAt.toString, value) })
.flatMap(result => Ok(result.asJson.pretty))
.flatMap(result => Ok(result.asJson))
// http://0.0.0.0:8080/api/query/city/Kolka/20230414_2200-20230501_1230/allFields
case GET -> Root / "query" / "city" / (city: String) / DateTimeRange(from, to) / "allFields" =>
@@ -141,7 +135,7 @@ class Server(postgresService: PostgresService, dataService: DataService, fetch:
// http://0.0.0.0:8080/api/query/country/20230414_2200-20230501_1230/tempMax,tempMin,tempAvg,precipitation
case GET -> Root / "query" / "country" / DateTimeRange(from, to) / AggFieldList(fieldList) =>
postgresService.queryCountry(from, to, fieldList)
.flatMap(result => Ok(result.asJson.pretty))
.flatMap(result => Ok(result.asJson))
// // http://0.0.0.0:8080/api/fetch/date/20230514
// case GET -> Root / "fetch" / "date" / ValidateDate(date) =>
@@ -170,13 +164,13 @@ class Server(postgresService: PostgresService, dataService: DataService, fetch:
// http://0.0.0.0:8080/api/show/months/202304,202305,202306
case GET -> Root / "show" / "months" / ValidateMonths(monthList) =>
postgresService.getDatesByMonths(monthList).flatMap(dates =>
Ok(dates.asJson.pretty)
Ok(dates.asJson)
)
// http://0.0.0.0:8080/api/show/date/20230423
case GET -> Root / "show" / "date" / ValidateDate(date) =>
postgresService.getDateFileNames(date).flatMap(fileNames =>
Ok(fileNames.asJson.pretty)
Ok(fileNames.asJson)
)
// http://0.0.0.0:8080/api/show/datetime/20230423_1300