diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/Models/Device.cs b/src/Elektrifikatsiya/Elektrifikatsiya/Models/Device.cs
index 0bcca1a..4d15c15 100644
--- a/src/Elektrifikatsiya/Elektrifikatsiya/Models/Device.cs
+++ b/src/Elektrifikatsiya/Elektrifikatsiya/Models/Device.cs
@@ -34,4 +34,6 @@ public class Device
User = user;
Room = room;
}
+
+ private Device(){}
}
\ No newline at end of file
diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/Pages/AddPlug.razor b/src/Elektrifikatsiya/Elektrifikatsiya/Pages/AddPlug.razor
index 91ba629..efabc58 100644
--- a/src/Elektrifikatsiya/Elektrifikatsiya/Pages/AddPlug.razor
+++ b/src/Elektrifikatsiya/Elektrifikatsiya/Pages/AddPlug.razor
@@ -1,6 +1,7 @@
@page "/addplug"
@using Blazorise.Components;
@using Elektrifikatsiya.Models;
+@using System.Net
@inject IVersionProvider VersionProvider
@@ -22,7 +23,7 @@
- IP: @context.Item.Address
+ IP: @context.Item.IpAddress
@@ -39,5 +40,5 @@
@code {
- List plugs = new List() { new Device("Placeholder", "Plug", System.Net.IPAddress.Broadcast, 60, "Oldin", "4AHINF"), new Device("Placeholder", "Plug", System.Net.IPAddress.Broadcast, 60, "Oldin", "4AHINF"), new Device("Placeholder", "Plug", System.Net.IPAddress.Broadcast, 60, "Oldin", "4AHINF") };
+ List plugs = new List() { new Device("ffff:ffff:ffff:ffff", "Huso", IPAddress.Broadcast, new User("Joe", "qiowruioewjfopa", Role.Admin), "Raum"), new Device("ffff:ffff:ffff:ffff", "Huso", IPAddress.Broadcast, new User("Joe", "qiowruioewjfopa", Role.Admin), "Raum"), new Device("ffff:ffff:ffff:ffff", "Huso", IPAddress.Broadcast, new User("Joe", "qiowruioewjfopa", Role.Admin), "Raum"), };
}
diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/Pages/Dashboard.razor b/src/Elektrifikatsiya/Elektrifikatsiya/Pages/Dashboard.razor
index de1ed5c..b905ed3 100644
--- a/src/Elektrifikatsiya/Elektrifikatsiya/Pages/Dashboard.razor
+++ b/src/Elektrifikatsiya/Elektrifikatsiya/Pages/Dashboard.razor
@@ -1,6 +1,7 @@
@page "/"
@using Blazorise.Components;
@using Elektrifikatsiya.Models;
+@using System.Net
@inject IVersionProvider VersionProvider
@@ -69,8 +70,7 @@
//TODO: insert new event here if plug produces one
List events = new List() { new Event("Placeholder", "Placeholder", DateTime.Now), new Event("Placeholder", "Placeholder", DateTime.Now), new Event("Placeholder", "Placeholder", DateTime.Now) };
//TODO: insert new Device here if user adds one
- List plugs = new List() { new Device("Placeholder", "Plug", System.Net.IPAddress.Broadcast, 60, "Oldin", "4AHINF"), new Device("Placeholder", "Plug", System.Net.IPAddress.Broadcast, 60, "Oldin", "4AHINF"), new Device("Placeholder", "Plug", System.Net.IPAddress.Broadcast, 60, "Oldin", "4AHINF") };
-
+ List plugs = new List() { new Device("ffff:ffff:ffff:ffff", "Huso", IPAddress.Broadcast, new User("Joe", "qiowruioewjfopa", Role.Admin), "Raum"), new Device("ffff:ffff:ffff:ffff", "Huso", IPAddress.Broadcast, new User("Joe", "qiowruioewjfopa", Role.Admin), "Raum"), new Device("ffff:ffff:ffff:ffff", "Huso", IPAddress.Broadcast, new User("Joe", "qiowruioewjfopa", Role.Admin), "Raum"), };
//code for graph
LineChart lineChart;
diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/Program.cs b/src/Elektrifikatsiya/Elektrifikatsiya/Program.cs
index dfa27db..4f9d13e 100644
--- a/src/Elektrifikatsiya/Elektrifikatsiya/Program.cs
+++ b/src/Elektrifikatsiya/Elektrifikatsiya/Program.cs
@@ -4,6 +4,7 @@ using Blazorise.Icons.Material;
using Blazorise.Material;
using Elektrifikatsiya.Database;
+using Elektrifikatsiya.Models;
using Elektrifikatsiya.Services;
using Elektrifikatsiya.Services.Implementations;
@@ -20,6 +21,7 @@ builder.Services.AddTransient()
builder.Services.AddDbContext(options => options.UseSqlite("Data Source=./UserDatabase.sqlite"));
builder.Services.AddDbContext((options) => options.UseSqlite("Data Source=./DeviceManagement.sqlite"));
builder.Services.AddBootstrapProviders();
+builder.Services.AddHttpClient();
builder.Services.AddBlazorise(options =>
{
options.Immediate = true;
diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/Services/Implementations/DeviceManagmentService.cs b/src/Elektrifikatsiya/Elektrifikatsiya/Services/Implementations/DeviceManagmentService.cs
index b659cf1..7cb9954 100644
--- a/src/Elektrifikatsiya/Elektrifikatsiya/Services/Implementations/DeviceManagmentService.cs
+++ b/src/Elektrifikatsiya/Elektrifikatsiya/Services/Implementations/DeviceManagmentService.cs
@@ -10,116 +10,123 @@ namespace Elektrifikatsiya.Services.Implementations;
public class DeviceManagmentService : IDeviceManagmentService
{
- private readonly DeviceManagmentDatabaseContext deviceManagmentDatabaseContext;
- private readonly IDeviceStatusService deviceStatusService;
- private readonly HttpClient httpClient;
+ private readonly DeviceManagmentDatabaseContext deviceManagmentDatabaseContext;
+ private readonly IDeviceStatusService deviceStatusService;
+ private readonly IServiceScopeFactory serviceScopeFactory;
+ private readonly HttpClient httpClient;
- public DeviceManagmentService(DeviceManagmentDatabaseContext deviceManagmentDatabaseContext, IDeviceStatusService deviceStatusService, HttpClient httpClient)
- {
- this.deviceManagmentDatabaseContext = deviceManagmentDatabaseContext;
- this.deviceStatusService = deviceStatusService;
- this.httpClient = httpClient;
- }
+ public DeviceManagmentService(IServiceScopeFactory serviceScopeFactory, IDeviceStatusService deviceStatusService, HttpClient httpClient)
+ {
+ this.deviceManagmentDatabaseContext = deviceManagmentDatabaseContext;
+ this.deviceStatusService = deviceStatusService;
+ this.httpClient = httpClient;
+ }
- public Result GetDevice(string macAdress)
- {
- Result> getDevicesResult = deviceStatusService.GetDevices();
+ public Result GetDevice(string macAdress)
+ {
+ Result> getDevicesResult = deviceStatusService.GetDevices();
- if (getDevicesResult.IsFailed)
- {
- return getDevicesResult.ToResult();
- }
+ if (getDevicesResult.IsFailed)
+ {
+ return getDevicesResult.ToResult();
+ }
- Device? device = getDevicesResult.Value.FirstOrDefault(d => d.MacAddress == macAdress);
+ Device? device = getDevicesResult.Value.FirstOrDefault(d => d.MacAddress == macAdress);
- if (device is null)
- {
- return Result.Fail("Device does not exist!");
- }
+ if (device is null)
+ {
+ return Result.Fail("Device does not exist!");
+ }
- return device;
- }
+ return device;
+ }
- public Result> GetDevices()
- {
- Result> getDevicesResult = deviceStatusService.GetDevices();
+ public Result> GetDevices()
+ {
+ Result> getDevicesResult = deviceStatusService.GetDevices();
- if (getDevicesResult.IsFailed)
- {
- return getDevicesResult.ToResult();
- }
+ if (getDevicesResult.IsFailed)
+ {
+ return getDevicesResult.ToResult();
+ }
- return getDevicesResult.Value.ToList();
- }
+ return getDevicesResult.Value.ToList();
+ }
- public Result> GetDevicesInRoom(string room)
- {
- Result> getDevicesResult = deviceStatusService.GetDevices();
+ public Result> GetDevicesInRoom(string room)
+ {
+ Result> getDevicesResult = deviceStatusService.GetDevices();
- if (getDevicesResult.IsFailed)
- {
- return getDevicesResult.ToResult();
- }
+ if (getDevicesResult.IsFailed)
+ {
+ return getDevicesResult.ToResult();
+ }
- return getDevicesResult.Value.Where(d => d.Room == room).ToList();
- }
+ return getDevicesResult.Value.Where(d => d.Room == room).ToList();
+ }
- public Result> GetDevicesOfUser(int userId)
- {
- Result> getDevicesResult = deviceStatusService.GetDevices();
+ public Result> GetDevicesOfUser(int userId)
+ {
+ Result> getDevicesResult = deviceStatusService.GetDevices();
- if (getDevicesResult.IsFailed)
- {
- return getDevicesResult.ToResult();
- }
+ if (getDevicesResult.IsFailed)
+ {
+ return getDevicesResult.ToResult();
+ }
- return getDevicesResult.Value.Where(d => d.User.Id == userId).ToList();
- }
+ return getDevicesResult.Value.Where(d => d.User.Id == userId).ToList();
+ }
- public async Task> Register(IPAddress ip, User user, string? name = null, string room = "default")
- {
- ShellyResponse? shellyResponse = await httpClient.GetFromJsonAsync($"{ip}/shelly");
+ public async Task> Register(IPAddress ip, User user, string? name = null, string room = "default")
+ {
+ using IServiceScope scope = serviceScopeFactory.CreateScope();
+ DeviceManagmentDatabaseContext deviceManagmentDatabaseContext = scope.ServiceProvider.GetRequiredService();
- if(shellyResponse is null || shellyResponse.Type != "SHPLG-S")
- {
- return Result.Fail("Device is not a \"SHPLG-S\" or not reachable!");
- }
+ ShellyResponse? shellyResponse = await httpClient.GetFromJsonAsync($"{ip}/shelly");
- string mac = shellyResponse.Mac;
+ if (shellyResponse is null || shellyResponse.Type != "SHPLG-S")
+ {
+ return Result.Fail("Device is not a \"SHPLG-S\" or not reachable!");
+ }
- if(PhysicalAddress.TryParse(mac, out _))
- {
- return Result.Fail("Invalid mac address!");
- }
+ string mac = shellyResponse.Mac;
- Device device = new Device(mac, name ?? mac, ip, user, room);
+ if (PhysicalAddress.TryParse(mac, out _))
+ {
+ return Result.Fail("Invalid mac address!");
+ }
- deviceManagmentDatabaseContext.Add(device);
- Result saveDatabaseChangesResult = await Result.Try(async Task () => await deviceManagmentDatabaseContext.SaveChangesAsync());
+ Device device = new Device(mac, name ?? mac, ip, user, room);
- Result trackDeviceResult = deviceStatusService.TrackDevice(device);
+ deviceManagmentDatabaseContext.Add(device);
+ Result saveDatabaseChangesResult = await Result.Try(async Task () => await deviceManagmentDatabaseContext.SaveChangesAsync());
- return Result.Merge(saveDatabaseChangesResult, trackDeviceResult).ToResult(device);
- }
+ Result trackDeviceResult = deviceStatusService.TrackDevice(device);
- public async Task Unregister(string macAdress)
- {
- Result getDeviceResult = GetDevice(macAdress);
+ return Result.Merge(saveDatabaseChangesResult, trackDeviceResult).ToResult(device);
+ }
- if (getDeviceResult.IsFailed)
- {
- return getDeviceResult.ToResult();
- }
+ public async Task Unregister(string macAdress)
+ {
+ using IServiceScope scope = serviceScopeFactory.CreateScope();
+ DeviceManagmentDatabaseContext deviceManagmentDatabaseContext = scope.ServiceProvider.GetRequiredService();
- Result untrackDeviceResult = deviceStatusService.UntrackDevice(macAdress);
+ Result getDeviceResult = GetDevice(macAdress);
- if (untrackDeviceResult.IsFailed)
- {
- return untrackDeviceResult;
- }
+ if (getDeviceResult.IsFailed)
+ {
+ return getDeviceResult.ToResult();
+ }
- deviceManagmentDatabaseContext.Remove(getDeviceResult.Value);
+ Result untrackDeviceResult = deviceStatusService.UntrackDevice(macAdress);
- return await Result.Try(async Task () => await deviceManagmentDatabaseContext.SaveChangesAsync());
- }
+ if (untrackDeviceResult.IsFailed)
+ {
+ return untrackDeviceResult;
+ }
+
+ deviceManagmentDatabaseContext.Remove(getDeviceResult.Value);
+
+ return await Result.Try(async Task () => await deviceManagmentDatabaseContext.SaveChangesAsync());
+ }
}
\ No newline at end of file
diff --git a/src/Elektrifikatsiya/Elektrifikatsiya/Services/Implementations/UpdateService.cs b/src/Elektrifikatsiya/Elektrifikatsiya/Services/Implementations/UpdateService.cs
index 980826d..da74f9f 100644
--- a/src/Elektrifikatsiya/Elektrifikatsiya/Services/Implementations/UpdateService.cs
+++ b/src/Elektrifikatsiya/Elektrifikatsiya/Services/Implementations/UpdateService.cs
@@ -10,19 +10,22 @@ public class UpdateService : IHostedService, IDisposable
{
private readonly ILogger logger;
private readonly IDeviceStatusService deviceStatusService;
- private readonly DeviceManagmentDatabaseContext deviceManagmentDatabaseContext;
+ private readonly IServiceScopeFactory serviceScopeFactory;
private Timer? timer = null;
- public UpdateService(ILogger logger, IDeviceStatusService deviceStatusService, DeviceManagmentDatabaseContext deviceManagmentDatabaseContext)
+ public UpdateService(ILogger logger, IDeviceStatusService deviceStatusService, IServiceScopeFactory serviceScopeFactory)
{
this.logger = logger;
this.deviceStatusService = deviceStatusService;
- this.deviceManagmentDatabaseContext = deviceManagmentDatabaseContext;
+ this.serviceScopeFactory = serviceScopeFactory;
}
public async Task StartAsync(CancellationToken cancellationToken)
{
- logger.LogInformation("Starting update service...");
+ IServiceScope serviceScope = serviceScopeFactory.CreateScope();
+ DeviceManagmentDatabaseContext deviceManagmentDatabaseContext = serviceScope.ServiceProvider.GetRequiredService();
+
+ logger.LogInformation("Starting update service...");
foreach (Device device in await deviceManagmentDatabaseContext.Devices.AsNoTracking().ToListAsync(cancellationToken))
{