Y2S2-Syski/syski_api/uk.co.syski.websocket/Services/WebSockets/Actions/Handlers/StaticOperatingSystemHandler.cs
2020-06-09 21:02:14 +01:00

96 lines
3.8 KiB
C#

using Microsoft.Extensions.DependencyInjection;
using Syski.Data;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
namespace Syski.WebSocket.Services.WebSockets.Actions.Handlers
{
public class StaticOperatingSystemHandler : ActionHandler
{
public StaticOperatingSystemHandler(Action action, WebSocketConnection webSocketConnection, IServiceProvider serviceProvider) : base(action, webSocketConnection, serviceProvider)
{
}
public override void HandleAction()
{
using (var serviceScope = serviceProvider.GetRequiredService<IServiceScopeFactory>().CreateScope())
{
var context = serviceScope.ServiceProvider.GetService<SyskiDBContext>();
var systemUUID = serviceProvider.GetService<WebSocketManager>().GetSystemId(webSocketConnection.Id);
string osnameFromJSON = (string) action.properties.SelectToken("name");
string architectureFromJSON = (string) action.properties.SelectToken("architecture");
string versionFromJSON = (string) action.properties.SelectToken("version");
var osName = context.OperatingSystemModels.FirstOrDefault(m => m.Name == osnameFromJSON);
if (osName == null)
{
osName = new Data.OperatingSystemModel()
{
Name = osnameFromJSON
};
context.Add(osName);
context.SaveChanges();
}
var architecture = context.Architectures.Where(m => m.Name == architectureFromJSON).FirstOrDefault();
if (architecture == null && architectureFromJSON != null)
{
architecture = new Architecture
{
Name = architectureFromJSON
};
context.Add(architecture);
context.SaveChanges();
}
Guid? architectureId = (architecture != null ? architecture.Id : (Guid?)null);
var systemOS = context.SystemOSs.FirstOrDefault(m => m.SystemId.Equals(systemUUID));
if (systemOS == null)
{
systemOS = new SystemOS()
{
SystemId = systemUUID,
OperatingSystemId = osName.Id,
ArchitectureId = architectureId,
Version = versionFromJSON,
LastUpdated = DateTime.Now
};
context.Add(systemOS);
context.SaveChanges();
}
else
{
if (!systemOS.OperatingSystemId.Equals(osName.Id))
{
context.Remove(systemOS);
systemOS = new SystemOS()
{
SystemId = systemUUID,
OperatingSystemId = osName.Id,
ArchitectureId = architectureId,
Version = versionFromJSON,
LastUpdated = DateTime.Now
};
context.Add(systemOS);
context.SaveChanges();
}
else
{
systemOS.ArchitectureId = architectureId;
systemOS.Version = versionFromJSON;
systemOS.LastUpdated = DateTime.Now;
context.Update(systemOS);
context.SaveChanges();
}
}
}
}
}
}