diff --git a/csharp/App/Backend/Backend.csproj b/csharp/App/Backend/Backend.csproj
index 6959e506d..bf230bd4e 100644
--- a/csharp/App/Backend/Backend.csproj
+++ b/csharp/App/Backend/Backend.csproj
@@ -27,6 +27,7 @@
+
diff --git a/csharp/App/Backend/Controller.cs b/csharp/App/Backend/Controller.cs
index f3e80527e..74b45cb9a 100644
--- a/csharp/App/Backend/Controller.cs
+++ b/csharp/App/Backend/Controller.cs
@@ -20,7 +20,6 @@ public class Controller : ControllerBase
if (user is null)
{
- Console.WriteLine("I have no user");
throw new Exceptions(400,"Null User Exception", "Must provide a user to log in as.", Request.Path.Value!);
}
diff --git a/csharp/App/Backend/Database/Create.cs b/csharp/App/Backend/Database/Create.cs
index 95849acaa..24944ba2b 100644
--- a/csharp/App/Backend/Database/Create.cs
+++ b/csharp/App/Backend/Database/Create.cs
@@ -7,54 +7,61 @@ namespace InnovEnergy.App.Backend.Database;
public static partial class Db
{
+ private static Boolean Insert(Object obj)
+ {
+ var success = Connection.Insert(obj) > 0;
+ if(success) BackupDatabase();
+ return success;
+ }
+
public static Boolean Create(Installation installation)
{
// SQLite wrapper is smart and *modifies* t's Id to the one generated (autoincrement) by the insertion
- return Connection.Insert(installation) > 0;
+ return Insert(installation);
}
public static Boolean Create(DeletedInstallation installation)
{
- return Connection.Insert(installation) > 0;
+ return Insert(installation);
}
public static Boolean Create(Folder folder)
{
- return Connection.Insert(folder) > 0;
+ return Insert(folder);
}
public static Boolean Create(DeletedFolder folder)
{
- return Connection.Insert(folder) > 0;
+ return Insert(folder);
}
public static Boolean Create(User user)
{
- return Connection.Insert(user) > 0;
+ return Insert(user);
}
public static Boolean Create(DeletedUser user)
{
- return Connection.Insert(user) > 0;
+ return Insert(user);
}
public static Boolean Create(Session session)
{
- return Connection.Insert(session) > 0;
+ return Insert(session);
}
public static Boolean Create(InstallationAccess installationAccess)
{
- return Connection.Insert(installationAccess) > 0;
+ return Insert(installationAccess);
}
public static Boolean Create(FolderAccess folderAccess)
{
- return Connection.Insert(folderAccess) > 0;
+ return Insert(folderAccess);
}
public static Boolean Create(OrderNumber2Installation o2i)
{
- return Connection.Insert(o2i) > 0;
+ return Insert(o2i);
}
}
\ No newline at end of file
diff --git a/csharp/App/Backend/Database/Db.cs b/csharp/App/Backend/Database/Db.cs
index ea82f6788..a3918d2cb 100644
--- a/csharp/App/Backend/Database/Db.cs
+++ b/csharp/App/Backend/Database/Db.cs
@@ -1,12 +1,16 @@
+using System.Data.SQLite;
using System.Reactive.Concurrency;
using System.Reactive.Linq;
+using System.Runtime.InteropServices;
using CliWrap;
using CliWrap.Buffered;
using InnovEnergy.App.Backend.DataTypes;
using InnovEnergy.App.Backend.DataTypes.Methods;
using InnovEnergy.App.Backend.Relations;
using InnovEnergy.Lib.Utils;
+using Microsoft.Identity.Client;
using SQLite;
+using SQLiteConnection = SQLite.SQLiteConnection;
namespace InnovEnergy.App.Backend.Database;
@@ -16,8 +20,79 @@ public static partial class Db
{
internal const String DbPath = "./db.sqlite";
- private static SQLiteConnection Connection { get; } = new SQLiteConnection(DbPath);
+ private static SQLiteConnection Connection { get; } = ((Func)(() =>
+ {
+ var latestDb = new DirectoryInfo(@"DbBackups").GetFiles()
+ .OrderBy(f => f.LastWriteTime)
+ .First().Name;
+ var fileConnection = new SQLiteConnection("DbBackups/"+latestDb);
+
+ var memoryConnection = new SQLiteConnection(":memory:");
+
+ // fileConnection.Backup(memoryConnection.DatabasePath);
+
+ memoryConnection.CreateTable();
+ memoryConnection.CreateTable();
+ memoryConnection.CreateTable();
+ memoryConnection.CreateTable();
+ memoryConnection.CreateTable();
+ memoryConnection.CreateTable();
+ memoryConnection.CreateTable();
+ memoryConnection.CreateTable();
+ memoryConnection.CreateTable();
+ memoryConnection.CreateTable();
+
+ foreach (var obj in fileConnection.Table())
+ {
+ memoryConnection.Insert(obj);
+ }
+ foreach (var obj in fileConnection.Table())
+ {
+ memoryConnection.Insert(obj);
+ }
+ foreach (var obj in fileConnection.Table())
+ {
+ memoryConnection.Insert(obj);
+ }
+ foreach (var obj in fileConnection.Table())
+ {
+ memoryConnection.Insert(obj);
+ }
+ foreach (var obj in fileConnection.Table())
+ {
+ memoryConnection.Insert(obj);
+ }
+ foreach (var obj in fileConnection.Table())
+ {
+ memoryConnection.Insert(obj);
+ }
+ foreach (var obj in fileConnection.Table())
+ {
+ memoryConnection.Insert(obj);
+ }
+ foreach (var obj in fileConnection.Table())
+ {
+ memoryConnection.Insert(obj);
+ }
+ foreach (var obj in fileConnection.Table())
+ {
+ memoryConnection.Insert(obj);
+ }
+ foreach (var obj in fileConnection.Table())
+ {
+ memoryConnection.Insert(obj);
+ }
+
+ return memoryConnection;
+ }))();
+
+ public static void BackupDatabase()
+ {
+ var filename = "db-" + DateTimeOffset.UtcNow.ToUnixTimeSeconds() + ".sqlite";
+ Connection.Backup("DbBackups/"+filename);
+ }
+
public static TableQuery Sessions => Connection.Table();
public static TableQuery Folders => Connection.Table();
public static TableQuery Installations => Connection.Table();
diff --git a/csharp/App/Backend/Database/Delete.cs b/csharp/App/Backend/Database/Delete.cs
index 200b63855..a99229584 100644
--- a/csharp/App/Backend/Database/Delete.cs
+++ b/csharp/App/Backend/Database/Delete.cs
@@ -22,9 +22,10 @@ public static partial class Db
Boolean DeleteDescendantFolderAndItsDependencies(Folder f)
{
FolderAccess .Delete(r => r.FolderId == f.Id);
- Installations.Delete(r => r.ParentId == f.Id);
-
- return Folders.Delete(r => r.Id == f.Id) > 0;
+ Installations.Delete(r => r.ParentId == f.Id);
+ var delete = Folders.Delete(r => r.Id == f.Id);
+ BackupDatabase();
+ return delete > 0;
}
}
@@ -35,7 +36,9 @@ public static partial class Db
Boolean DeleteInstallationAndItsDependencies()
{
InstallationAccess.Delete(i => i.InstallationId == installation.Id);
- return Installations.Delete(i => i.Id == installation.Id) > 0;
+ var delete = Installations.Delete(i => i.Id == installation.Id);
+ BackupDatabase();
+ return delete > 0;
}
}
@@ -48,7 +51,9 @@ public static partial class Db
FolderAccess .Delete(u => u.UserId == user.Id);
InstallationAccess.Delete(u => u.UserId == user.Id);
- return Users.Delete(u => u.Id == user.Id) > 0;
+ var delete = Users.Delete(u => u.Id == user.Id);
+ BackupDatabase();
+ return delete > 0;
}
}
@@ -58,6 +63,8 @@ public static partial class Db
// private!!
private static Boolean Delete(Session session)
{
- return Sessions.Delete(s => s.Id == session.Id) > 0;
+ var delete = Sessions.Delete(s => s.Id == session.Id) > 0;
+ BackupDatabase();
+ return delete;
}
}
\ No newline at end of file
diff --git a/csharp/App/Backend/Database/Update.cs b/csharp/App/Backend/Database/Update.cs
index a90749a45..094487552 100644
--- a/csharp/App/Backend/Database/Update.cs
+++ b/csharp/App/Backend/Database/Update.cs
@@ -5,14 +5,21 @@ namespace InnovEnergy.App.Backend.Database;
public static partial class Db
{
+ private static Boolean Update(Object obj)
+ {
+ var success = Connection.Update(obj) > 0;
+ if(success) BackupDatabase();
+ return success;
+ }
+
public static Boolean Update(Folder folder)
{
- return Connection.Update(folder) > 0;
+ return Update(obj: folder);
}
public static Boolean Update(Installation installation)
{
- return Connection.Update(installation) > 0;
+ return Update(obj: installation);
}
public static Boolean Update(User user)
@@ -24,7 +31,7 @@ public static partial class Db
user.ParentId = originalUser.ParentId;
user.Name = originalUser.Name;
- return Connection.Update(user) > 0;
+ return Update(obj: user);
}
diff --git a/csharp/App/Backend/db.sqlite b/csharp/App/Backend/DbBackups/db.sqlite
similarity index 99%
rename from csharp/App/Backend/db.sqlite
rename to csharp/App/Backend/DbBackups/db.sqlite
index 9a363a376..55d2bbbeb 100644
Binary files a/csharp/App/Backend/db.sqlite and b/csharp/App/Backend/DbBackups/db.sqlite differ