Add API to get most recent reading

This commit is contained in:
2019-08-07 18:39:59 -04:00
parent ef073a500b
commit f4da45f4bb
6 changed files with 89 additions and 48 deletions

View File

@@ -2,6 +2,7 @@
using Dapper;
using Microsoft.Extensions.Configuration;
using System.Data.SqlClient;
using System.Threading.Tasks;
namespace ChrisKaczor.HomeMonitor.Weather.Service.Data
{
@@ -24,32 +25,31 @@ namespace ChrisKaczor.HomeMonitor.Weather.Service.Data
InitialCatalog = "master"
};
using (var connection = new SqlConnection(connectionStringBuilder.ConnectionString))
using var connection = new SqlConnection(connectionStringBuilder.ConnectionString);
var command = new SqlCommand { Connection = connection };
connection.Open();
// Check to see if the database exists
command.CommandText = $"SELECT CAST(1 as bit) from sys.databases WHERE name='{_configuration["Weather:Database:Name"]}'";
var databaseExists = (bool?)command.ExecuteScalar();
// Create database if needed
if (!databaseExists.GetValueOrDefault(false))
{
var command = new SqlCommand { Connection = connection };
connection.Open();
// Check to see if the database exists
command.CommandText = $"SELECT CAST(1 as bit) from sys.databases WHERE name='{_configuration["Weather:Database:Name"]}'";
var databaseExists = (bool?)command.ExecuteScalar();
// Create database if needed
if (!databaseExists.GetValueOrDefault(false))
{
command.CommandText = $"CREATE DATABASE {_configuration["Weather:Database:Name"]}";
command.ExecuteNonQuery();
}
// Switch to the database now that we're sure it exists
connection.ChangeDatabase(_configuration["Weather:Database:Name"]);
var schema = ResourceReader.GetString("ChrisKaczor.HomeMonitor.Weather.Service.Data.Resources.Schema.sql");
// Make sure the database is up to date
command.CommandText = schema;
command.CommandText = $"CREATE DATABASE {_configuration["Weather:Database:Name"]}";
command.ExecuteNonQuery();
}
// Switch to the database now that we're sure it exists
connection.ChangeDatabase(_configuration["Weather:Database:Name"]);
var schema = ResourceReader.GetString("ChrisKaczor.HomeMonitor.Weather.Service.Data.Resources.Schema.sql");
// Make sure the database is up to date
command.CommandText = schema;
command.ExecuteNonQuery();
}
private SqlConnection CreateConnection()
@@ -70,12 +70,20 @@ namespace ChrisKaczor.HomeMonitor.Weather.Service.Data
public void StoreWeatherData(WeatherMessage weatherMessage)
{
using (var connection = CreateConnection())
{
var query = ResourceReader.GetString("ChrisKaczor.HomeMonitor.Weather.Service.Data.Resources.CreateReading.sql");
using var connection = CreateConnection();
connection.Query(query, weatherMessage);
}
var query = ResourceReader.GetString("ChrisKaczor.HomeMonitor.Weather.Service.Data.Resources.CreateReading.sql");
connection.Query(query, weatherMessage);
}
public async Task<WeatherReading> GetRecentReading()
{
await using var connection = CreateConnection();
var query = ResourceReader.GetString("ChrisKaczor.HomeMonitor.Weather.Service.Data.Resources.GetRecentReading.sql");
return await connection.QueryFirstOrDefaultAsync<WeatherReading>(query);
}
}
}

View File

@@ -0,0 +1,17 @@
SELECT TOP 1 Timestamp,
WindDirection,
WindSpeed,
Humidity,
HumidityTemperature,
Rain,
Pressure,
PressureTemperature,
BatteryLevel,
LightLevel,
Latitude,
Longitude,
Altitude,
SatelliteCount,
GpsTimestamp
FROM Reading
ORDER BY Timestamp DESC