using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
using PARR.Core.Common.Interfaces;
using PARR.Domain.Entities.Base.History;
using PARR.Domain.Enums;
using PARR.NextRun.Services;
using PARR.NextRun.Settings;
namespace PARR.NextRun
{
///
/// Расчет nextRun по интервалу
///
internal class NextRunIntervalService : INextRunIntervalService
{
private readonly WorkerSettings workerSettings;
private readonly ILogger logger;
private readonly IIntervalService intervalService;
private readonly IServiceProvider serviceProvider;
public NextRunIntervalService(
WorkerSettings workerSettings,
ILogger logger,
IIntervalService intervalService,
IServiceProvider serviceProvider
)
{
this.workerSettings = workerSettings;
this.logger = logger;
this.intervalService = intervalService;
this.serviceProvider = serviceProvider;
}
public async Task StartAsync()
{
logger.LogInformation("Запуск сервиса рассчета времени следующего создания наряда (nextRun)");
await intervalService.IntervalInitAsync(async () =>
{
using (var scope = serviceProvider.CreateScope())
{
var nextRunUpdateService = scope.ServiceProvider.GetRequiredService();
await nextRunUpdateService.UpdateNextRunForTemplatesAsync(
// фильтр, только просроченные шаблоны
query => query.Where(t => t.NextRun < DateTimeOffset.UtcNow),
() => new HistoryInitiator
{
InitiatorComment = "Обновлён NextRun (интервал)",
InitiatorParrComponentId = ParrComponentsEnum.NextRun
},
"Интервал"
);
//var templateService = scope.ServiceProvider.GetRequiredService();
//var nextRunService = scope.ServiceProvider.GetRequiredService();
//var robotConfigurationService = scope.ServiceProvider.GetRequiredService();
//await HandlerAsync(templateService, nextRunService, robotConfigurationService);
}
}, workerSettings.RepeatEvery);
}
}
}