First version of querying data from postgres
This commit is contained in:
@@ -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)
|
||||
|
||||
@@ -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)
|
||||
|
||||
|
||||
@@ -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) =>
|
||||
|
||||
Reference in New Issue
Block a user