54 lines
1.7 KiB
C#
54 lines
1.7 KiB
C#
using Microsoft.Extensions.Hosting;
|
|
|
|
namespace Drab.Logic.Utils;
|
|
|
|
public class DbFetcher : BackgroundService
|
|
{
|
|
private readonly IDrabSettings _drabSettings;
|
|
private readonly IServiceScopeFactory _serviceScopeFactory;
|
|
private readonly IOrderProcessor _orderProcessor;
|
|
private readonly ILogger<DbFetcher> _logger;
|
|
|
|
public DbFetcher(IDrabSettings drabSettings, IServiceScopeFactory serviceScopeFactory, IOrderProcessor orderProcessor, ILogger<DbFetcher> logger)
|
|
{
|
|
_drabSettings = drabSettings;
|
|
_serviceScopeFactory = serviceScopeFactory;
|
|
_orderProcessor = orderProcessor;
|
|
_logger = logger;
|
|
}
|
|
|
|
protected override Task ExecuteAsync(CancellationToken stoppingToken)
|
|
{
|
|
Start();
|
|
return Task.CompletedTask;
|
|
}
|
|
|
|
private async Task Start()
|
|
{
|
|
await Task.Delay(TimeSpan.FromSeconds(2));
|
|
while (true)
|
|
{
|
|
_logger.LogInformation("Fetch database for new orders");
|
|
try
|
|
{
|
|
using var scope = _serviceScopeFactory.CreateScope();
|
|
using var orderStore = scope.ServiceProvider.GetService<IOrdersStore>();
|
|
var result = await orderStore.FetchOrders();
|
|
|
|
if (result.IsNotOk)
|
|
_logger.LogWarning($"Fetch orders result failed: {result.Error}");
|
|
|
|
result.Value.ToList()
|
|
.ForEach(x => _orderProcessor.ProcessOrder(x));
|
|
}
|
|
catch (Exception e)
|
|
{
|
|
_logger.LogError(e, "Error on fetching new orders data:");
|
|
}
|
|
finally
|
|
{
|
|
await Task.Delay(TimeSpan.FromSeconds(_drabSettings.DbPollingFrequencyInSeconds));
|
|
}
|
|
}
|
|
}
|
|
} |