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

100 lines
4.0 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 StaticBIOSHandler : ActionHandler
{
public StaticBIOSHandler(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 manufacturerFromJSON = (string) action.properties.SelectToken("manufacturer");
string captionFromJSON = (string)action.properties.SelectToken("caption");
string versionFromJSON = (string) action.properties.SelectToken("version");
string dateFromJSON = (string) action.properties.SelectToken("date");
Manufacturer manufacturer = context.Manufacturers.Where(m => m.Name == manufacturerFromJSON).FirstOrDefault();
if (manufacturer == null && manufacturerFromJSON != null)
{
manufacturer = new Manufacturer
{
Name = manufacturerFromJSON
};
context.Add(manufacturer);
context.SaveChanges();
}
Guid? manufacturerId = (manufacturer != null ? manufacturer.Id : (Guid?) null);
var biosModel = context.BIOSModels.FirstOrDefault(m => m.ManufacturerId.Equals(manufacturer));
if (biosModel == null)
{
biosModel = new BIOSModel
{
ManufacturerId = manufacturerId
};
context.Add(biosModel);
context.SaveChanges();
}
var systemBIOS = context.SystemBIOSs.FirstOrDefault(m => m.SystemId.Equals(systemUUID));
if (systemBIOS == null)
{
systemBIOS = new SystemBIOS
{
SystemId = systemUUID,
BIOSModelId = biosModel.Id,
Caption = captionFromJSON,
Version = versionFromJSON,
Date = dateFromJSON,
LastUpdated = DateTime.Now
};
context.Add(systemBIOS);
context.SaveChanges();
}
else
{
if (!systemBIOS.BIOSModelId.Equals(biosModel.Id))
{
context.Remove(systemBIOS);
systemBIOS = new SystemBIOS
{
SystemId = systemUUID,
BIOSModelId = biosModel.Id,
Caption = captionFromJSON,
Version = versionFromJSON,
Date = dateFromJSON,
LastUpdated = DateTime.Now
};
context.Add(systemBIOS);
context.SaveChanges();
}
else
{
systemBIOS.Caption = captionFromJSON;
systemBIOS.Version = versionFromJSON;
systemBIOS.Date = dateFromJSON;
systemBIOS.LastUpdated = DateTime.Now;
context.Update(systemBIOS);
context.SaveChanges();
}
}
}
}
}
}