First version of querying data from postgres

This commit is contained in:
Guntis Smaukstelis
2023-12-15 13:46:45 +02:00
parent e89b526a88
commit 3a1f0ac726
9 changed files with 85 additions and 49 deletions
+8 -5
View File
@@ -1,5 +1,6 @@
package parse
import cats.data.NonEmptyList
import cats.implicits.{catsSyntaxOptionId, toFoldableOps}
import io.circe.generic.semiauto.deriveEncoder
import io.circe.syntax.EncoderOps
@@ -12,15 +13,17 @@ import java.time.temporal.ChronoUnit
object Aggregate {
final case class UserQuery(
cities: List[String],
field: String,
key: AggregateKey,
granularity: ChronoUnit,
cities: NonEmptyList[String],
field: String,
key: AggregateKey,
granularity: ChronoUnit,
from: LocalDateTime,
to: LocalDateTime,
)
implicit val userQueryEncoder: Encoder[UserQuery] = new Encoder[UserQuery] {
override def apply(userQuery: UserQuery): Json = Json.obj(
"cities" -> Json.fromValues(userQuery.cities.map(Json.fromString)),
"cities" -> Json.fromValues(userQuery.cities.toList.map(Json.fromString)),
"field" -> Json.fromString(userQuery.field),
"key" -> Json.fromString(userQuery.key.toString),
"granularity" -> Json.fromString(userQuery.granularity.toString)
+2 -1
View File
@@ -1,5 +1,6 @@
package parse
import cats.data.NonEmptyList
import cats.effect.unsafe.implicits.global
import db.FileService
import io.circe.syntax.EncoderOps
@@ -45,7 +46,7 @@ object Main {
val fileService = FileService.of.unsafeRunSync()
val lines = fileService.getInRange(from, to).unsafeRunSync()
val query = UserQuery(List("Ainaži"), "tempAvg", AggregateKey.Avg, ChronoUnit.HOURS)
val query = UserQuery(NonEmptyList.of("Ainaži"), "tempAvg", AggregateKey.Avg, ChronoUnit.HOURS, from, to)
val parsed = Parser.queryData(query, lines)
println(parsed.asJson)
+1 -1
View File
@@ -39,7 +39,7 @@ object Parser {
def queryData(userQuery: UserQuery, lines: List[String]): Map[String, Option[AggregateValue]] = {
val weatherByCity = lines
.flatMap(parseLine)
.filter(line => userQuery.cities.contains(line.city))
.filter(line => userQuery.cities.toList.contains(line.city))
.groupBy(_.city)
weatherByCity.map { case (city, weatherStationData) =>