Files
WeatherTool/src/main/scala/parse/csv/Main.scala
T
2025-02-14 14:46:31 +02:00

58 lines
2.2 KiB
Scala

package parse.csv
//import db.FileService
import java.time.LocalDateTime
import java.time.format.DateTimeFormatter
import java.time.temporal.ChronoUnit
// TODO remake this as a test with different granularities and especially check avg value calculations
object Main {
def main(args: Array[String]): Unit = {
val formatter = DateTimeFormatter.ofPattern("yyyyMMdd_HHmm")
def groupByGranularity(granularity: ChronoUnit) = {
granularity match {
case ChronoUnit.DAYS => (dateTime: LocalDateTime) => dateTime.toLocalDate
case ChronoUnit.MONTHS => (dateTime: LocalDateTime) => dateTime.toLocalDate.withDayOfMonth(1)
case ChronoUnit.YEARS => (dateTime: LocalDateTime) => dateTime.toLocalDate.withDayOfYear(1)
case _ => (dateTime: LocalDateTime) => dateTime.withMinute(0).withSecond(0).withNano(0)
}
}
val list = List(
(LocalDateTime.parse("20230515_0900", formatter), Some(20d)),
(LocalDateTime.parse("20230515_1000", formatter), None),
(LocalDateTime.parse("20230515_1100", formatter), Some(6d)),
(LocalDateTime.parse("20230516_1100", formatter), Some(10d)),
(LocalDateTime.parse("20230416_1100", formatter), Some(10d)),
)
val grouped = list.groupBy{ case (dateTime, _) => groupByGranularity(ChronoUnit.HOURS)(dateTime) }
// println(grouped)
// grouped.foreach { case (key, value) =>
// println(s"$key -> $value")
// }
// val from = LocalDateTime.parse("20230627_0000", formatter)
// val to = LocalDateTime.parse("20230627_2359", formatter)
// val fileService = FileService.of.unsafeRunSync()
// val lines = fileService.getInRange(from, to).unsafeRunSync()
// val query = UserQuery(NonEmptyList.of("Ainaži"), "tempAvg", AggregateKey.Avg, ChronoUnit.HOURS, from, to)
// val parsed = Parser.queryData(query, lines)
// println(parsed.asJson)
// val query2 = UserQuery(List("Ainaži"), "tempAvg", AggregateKey.Avg, ChronoUnit.DAYS)
// val parsed2 = Parser.queryData(query2, lines)
// println(parsed2.asJson)
// val query3 = UserQuery(List("Ainaži"), "tempAvg", AggregateKey.Avg, ChronoUnit.MONTHS)
// val parsed3 = Parser.queryData(query3, lines)
// println(parsed3.asJson)
}
}