AquaCare/AquaCare.Persistence/Datenbank.cs

116 lines
4.0 KiB
C#

using Microsoft.Data.Sqlite;
using System;
using System.IO;
using System.Collections.Generic;
using AquaCare.Model;
namespace AquaCare.Persistence
{
public class Datenbank
{
private static readonly string PersistencePath = Path.GetDirectoryName(
typeof(Datenbank).Assembly.Location) ?? throw new InvalidOperationException("Assembly location not found");
private static readonly string DbPath = Path.Combine(
PersistencePath,
"..", "..", "..", "..",
"AquaCare.Persistence",
"AquaCareDatenbank.db");
private string ConnectionString => $"Data Source={DbPath}";
public Datenbank()
{
EnsureDatabaseExists();
}
private void EnsureDatabaseExists()
{
var directory = Path.GetDirectoryName(DbPath);
if (directory != null && !Directory.Exists(directory))
{
Directory.CreateDirectory(directory);
}
if (!File.Exists(DbPath))
{
InitializeNewDatabase();
}
}
private void InitializeNewDatabase()
{
using var connection = new SqliteConnection(ConnectionString);
connection.Open();
var command = connection.CreateCommand();
command.CommandText = @"
CREATE TABLE IF NOT EXISTS Werte (
Datum DATETIME PRIMARY KEY,
Gefuettert BOOLEAN,
FilterReinigen BOOLEAN,
WasserWechseln BOOLEAN,
Temperatur REAL,
PhWert REAL,
Nitrat REAL,
Ammoniak REAL
)";
command.ExecuteNonQuery();
}
public void AddValue(Werte wert)
{
using var connection = new SqliteConnection(ConnectionString);
connection.Open();
var command = connection.CreateCommand();
command.CommandText = @"
INSERT INTO Werte (
Datum, Gefuettert, FilterReinigen, WasserWechseln,
Temperatur, PhWert, Nitrat, Ammoniak
) VALUES (
@Datum, @Gefuettert, @FilterReinigen, @WasserWechseln,
@Temperatur, @PhWert, @Nitrat, @Ammoniak
)";
command.Parameters.AddWithValue("@Datum", wert.Datum);
command.Parameters.AddWithValue("@Gefuettert", wert.Gefuettert);
command.Parameters.AddWithValue("@FilterReinigen", wert.FilterReinigen);
command.Parameters.AddWithValue("@WasserWechseln", wert.WasserWechseln);
command.Parameters.AddWithValue("@Temperatur", wert.Temperatur);
command.Parameters.AddWithValue("@PhWert", wert.PhWert);
command.Parameters.AddWithValue("@Nitrat", wert.Nitrat);
command.Parameters.AddWithValue("@Ammoniak", wert.Ammoniak);
command.ExecuteNonQuery();
}
public List<Werte> GetValuesAsObjects()
{
var werte = new List<Werte>();
using var connection = new SqliteConnection(ConnectionString);
connection.Open();
var command = connection.CreateCommand();
command.CommandText = "SELECT * FROM Werte ORDER BY Datum DESC";
using var reader = command.ExecuteReader();
while (reader.Read())
{
werte.Add(new Werte
{
Datum = reader.GetDateTime(0),
Gefuettert = reader.GetBoolean(1),
FilterReinigen = reader.GetBoolean(2),
WasserWechseln = reader.GetBoolean(3),
Temperatur = reader.GetDouble(4),
PhWert = reader.GetDouble(5),
Nitrat = reader.GetDouble(6),
Ammoniak = reader.GetDouble(7)
});
}
return werte;
}
}
}