feat(Assets): update asset services and background workers
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
using FinlyticAssets.Database;
|
||||
using FinlyticAssets.Database;
|
||||
using FinlyticAssets.Entities;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
|
||||
@@ -28,6 +28,11 @@ public interface ISettingsDbService
|
||||
/// and tracked <see cref="Settings"/> instance.
|
||||
/// </returns>
|
||||
public Task<Settings> SaveSettings(Settings settings);
|
||||
|
||||
/// <summary>
|
||||
/// Updates settings from a key-value dictionary received via Admin Panel MQTT events.
|
||||
/// </summary>
|
||||
public Task UpdateSettingsFromDictionary(Dictionary<string, string> dictionary);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@@ -47,25 +52,23 @@ public class SettingsDbService : ISettingsDbService
|
||||
_context = context;
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
/// <summary>Inherits documentation from interface.</summary>
|
||||
public async Task<Settings> GetSettings()
|
||||
{
|
||||
var settings = await _context.Settings.AsNoTracking().FirstOrDefaultAsync();
|
||||
|
||||
if (settings == null)
|
||||
{
|
||||
settings = new Settings
|
||||
{
|
||||
Id = Guid.NewGuid()
|
||||
};
|
||||
|
||||
await SaveSettings(settings);
|
||||
settings = new Settings { Id = Guid.NewGuid() };
|
||||
_context.Settings.Add(settings);
|
||||
await _context.SaveChangesAsync();
|
||||
_context.ChangeTracker.Clear();
|
||||
}
|
||||
|
||||
return settings;
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
/// <summary>Inherits documentation from interface.</summary>
|
||||
public async Task<Settings> SaveSettings(Settings settings)
|
||||
{
|
||||
var existing = await _context.Settings.FirstOrDefaultAsync();
|
||||
@@ -76,16 +79,47 @@ public class SettingsDbService : ISettingsDbService
|
||||
{
|
||||
settings.Id = Guid.NewGuid();
|
||||
}
|
||||
await _context.Settings.AddAsync(settings);
|
||||
_context.Settings.Add(settings);
|
||||
await _context.SaveChangesAsync();
|
||||
return settings;
|
||||
}
|
||||
else
|
||||
{
|
||||
_context.Entry(existing).CurrentValues.SetValues(settings);
|
||||
|
||||
existing.FinishedInitialScan = settings.FinishedInitialScan;
|
||||
existing.TradeRepublicMaxRequestPageSize = settings.TradeRepublicMaxRequestPageSize;
|
||||
existing.AssetUpdateTypeDelay = settings.AssetUpdateTypeDelay;
|
||||
existing.InitAssetUpdateTypeDelay = settings.InitAssetUpdateTypeDelay;
|
||||
existing.InitBatchAssetUpdateDelay = settings.InitBatchAssetUpdateDelay;
|
||||
existing.BatchAssetUpdateDelay = settings.BatchAssetUpdateDelay;
|
||||
existing.CurrentScanningType = settings.CurrentScanningType;
|
||||
existing.CurrentScanningPage = settings.CurrentScanningPage;
|
||||
_context.Settings.Update(existing);
|
||||
await _context.SaveChangesAsync();
|
||||
return existing;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>Inherits documentation from interface.</summary>
|
||||
public async Task UpdateSettingsFromDictionary(Dictionary<string, string> dictionary)
|
||||
{
|
||||
var settings = await GetSettings();
|
||||
|
||||
foreach (var (key, value) in dictionary)
|
||||
{
|
||||
if (string.Equals(key, "TradeRepublicMaxRequestPageSize", StringComparison.OrdinalIgnoreCase) && int.TryParse(value, out var ps))
|
||||
settings.TradeRepublicMaxRequestPageSize = ps;
|
||||
else if (string.Equals(key, "AssetUpdateTypeDelay", StringComparison.OrdinalIgnoreCase) && int.TryParse(value, out var autd))
|
||||
settings.AssetUpdateTypeDelay = autd;
|
||||
else if (string.Equals(key, "InitAssetUpdateTypeDelay", StringComparison.OrdinalIgnoreCase) && int.TryParse(value, out var iautd))
|
||||
settings.InitAssetUpdateTypeDelay = iautd;
|
||||
else if (string.Equals(key, "BatchAssetUpdateDelay", StringComparison.OrdinalIgnoreCase) && int.TryParse(value, out var baud))
|
||||
settings.BatchAssetUpdateDelay = baud;
|
||||
else if (string.Equals(key, "InitBatchAssetUpdateDelay", StringComparison.OrdinalIgnoreCase) && int.TryParse(value, out var ibaud))
|
||||
settings.InitBatchAssetUpdateDelay = ibaud;
|
||||
else if (string.Equals(key, "FinishedInitialScan", StringComparison.OrdinalIgnoreCase) && bool.TryParse(value, out var fis))
|
||||
settings.FinishedInitialScan = fis;
|
||||
}
|
||||
|
||||
await SaveSettings(settings);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user