using Quadarax.Application.QLiberace.Base.Services; using Quadarax.Application.QLiberace.Processor.Repositories; using Quadarax.Application.QLiberace.Processor.Settings; using Quadarax.Application.QLiberace.Processor.Workers; using Quadarax.Foundation.Core.Business; using Quadarax.Foundation.Core.Data.Interface.Domain; using Quadarax.Foundation.Core.Logging; namespace Quadarax.Application.QLiberace.Processor.Services { public class ProcessorWorkerService : AbstractWorkerService { #region *** Properties *** #endregion #region *** Private fields *** private SettingsService _srvSettings; #endregion #region *** Constructor *** public ProcessorWorkerService(SettingsService srvSettings, RepoFailedQueue repository3, RepoDoneQueue repository2, RepoProcessingQueue repository1, RepoPendingQueue repository, IContext currentContext, IQLogger logger) : base(repository3, repository2, repository1, repository, currentContext, logger) { _srvSettings = srvSettings ?? throw new ArgumentNullException(nameof(srvSettings)); } #endregion #region *** Public operations *** #endregion #region *** Private operations *** protected override void OnBuildWorkers() { var exists = _srvSettings.ExistsSettings(Base.Constants.Modules.Processor.Code); if (!exists.IsSuccess) throw exists.ToAggregateException(); if (!exists.Value) { var newSettings = new ProcessorSetting(); newSettings.SetDefaults(); Log.Log(LogSeverityEnum.Warn, $"Settings for module '{Base.Constants.Modules.Processor.Code}' was set to default!"); _srvSettings.CreateSettings(newSettings); } var settings = _srvSettings.GetSettings(Base.Constants.Modules.Processor.Code); if (!settings.IsSuccess) throw settings.ToAggregateException(); RegisterWorker(settings.Value.GetProcessingWorkerSettings()); // TODO: Uncomment when ready //RegisterWorker(settings.Value.GetRetentionWorkerSettings()); //RegisterWorker(settings.Value.GetGarbageWorkerSettings()); } #endregion } }