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) } }