From 0ac5208409f1b9ec154479b64bc59e7a35d512b0 Mon Sep 17 00:00:00 2001 From: Chris Kaczor Date: Tue, 1 Oct 2019 18:45:28 -0400 Subject: [PATCH] Add endpoint to get several bucketed values --- .../Service/Controllers/ReadingsController.cs | 6 ++++++ Weather/Service/Data/Database.cs | 10 +++++++++ .../Resources/GetReadingHistoryGrouped.sql | 20 ++++++++++++++++++ .../Service/Models/WeatherReadingGrouped.cs | 21 +++++++++++++++++++ Weather/Service/Service.csproj | 2 ++ 5 files changed, 59 insertions(+) create mode 100644 Weather/Service/Data/Resources/GetReadingHistoryGrouped.sql create mode 100644 Weather/Service/Models/WeatherReadingGrouped.cs diff --git a/Weather/Service/Controllers/ReadingsController.cs b/Weather/Service/Controllers/ReadingsController.cs index 64d2c2c..b7f5e8e 100644 --- a/Weather/Service/Controllers/ReadingsController.cs +++ b/Weather/Service/Controllers/ReadingsController.cs @@ -37,5 +37,11 @@ namespace ChrisKaczor.HomeMonitor.Weather.Service.Controllers { return (await _database.GetReadingValueHistory(weatherValueType, start, end, bucketMinutes)).ToList(); } + + [HttpGet("history-grouped")] + public async Task>> GetHistoryGrouped(DateTimeOffset start, DateTimeOffset end, int bucketMinutes = 2) + { + return (await _database.GetReadingHistoryGrouped(start, end, bucketMinutes)).ToList(); + } } } \ No newline at end of file diff --git a/Weather/Service/Data/Database.cs b/Weather/Service/Data/Database.cs index 4475914..0ca12a2 100644 --- a/Weather/Service/Data/Database.cs +++ b/Weather/Service/Data/Database.cs @@ -108,5 +108,15 @@ namespace ChrisKaczor.HomeMonitor.Weather.Service.Data return await connection.QueryAsync(query, new { Start = start, End = end, BucketMinutes = bucketMinutes }); } + + public async Task> GetReadingHistoryGrouped(DateTimeOffset start, DateTimeOffset end, int bucketMinutes) + { + await using var connection = CreateConnection(); + + var query = ResourceReader.GetString("ChrisKaczor.HomeMonitor.Weather.Service.Data.Resources.GetReadingHistoryGrouped.sql"); + + return await connection.QueryAsync(query, new { Start = start, End = end, BucketMinutes = bucketMinutes }); + } + } } \ No newline at end of file diff --git a/Weather/Service/Data/Resources/GetReadingHistoryGrouped.sql b/Weather/Service/Data/Resources/GetReadingHistoryGrouped.sql new file mode 100644 index 0000000..3610cf8 --- /dev/null +++ b/Weather/Service/Data/Resources/GetReadingHistoryGrouped.sql @@ -0,0 +1,20 @@ +SELECT bucket, + AVG(HumidityTemperature) AS AverageHumidityTemperature, + AVG(Humidity) AS AverageHumidity, + AVG(PressureTemperature) AS AveragePressureTemperature, + AVG(Pressure) / 100 AS AveragePressure, + AVG(LightLevel) AS AverageLightLevel +FROM ( + SELECT CAST(FORMAT(Timestamp, 'yyyy-MM-ddTHH:') + + RIGHT('00' + CAST(DATEPART(MINUTE, Timestamp) / @BucketMinutes * @BucketMinutes AS VARCHAR), 2) + + ':00+00:00' AS DATETIMEOFFSET) AS Bucket, + HumidityTemperature, + Humidity, + PressureTemperature, + Pressure, + LightLevel + FROM Reading + WHERE Timestamp BETWEEN @Start AND @End + ) AS Data +GROUP BY Bucket +ORDER BY Bucket \ No newline at end of file diff --git a/Weather/Service/Models/WeatherReadingGrouped.cs b/Weather/Service/Models/WeatherReadingGrouped.cs new file mode 100644 index 0000000..e83921a --- /dev/null +++ b/Weather/Service/Models/WeatherReadingGrouped.cs @@ -0,0 +1,21 @@ +using JetBrains.Annotations; +using System; + +namespace ChrisKaczor.HomeMonitor.Weather.Service.Models +{ + [PublicAPI] + public class WeatherReadingGrouped + { + public DateTimeOffset Bucket { get; set; } + + public decimal AverageHumidityTemperature { get; set; } + + public decimal AverageHumidity { get; set; } + + public decimal AveragePressureTemperature { get; set; } + + public decimal AveragePressure { get; set; } + + public decimal AverageLightLevel { get; set; } + } +} \ No newline at end of file diff --git a/Weather/Service/Service.csproj b/Weather/Service/Service.csproj index 1b1b412..3fc8add 100644 --- a/Weather/Service/Service.csproj +++ b/Weather/Service/Service.csproj @@ -11,6 +11,7 @@ + @@ -18,6 +19,7 @@ +