using System; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; using StellaOps.DependencyInjection; using StellaOps.Concelier.Core.Jobs; using StellaOps.Concelier.Connector.Jvn.Configuration; namespace StellaOps.Concelier.Connector.Jvn; public sealed class JvnDependencyInjectionRoutine : IDependencyInjectionRoutine { private const string ConfigurationSection = "concelier:sources:jvn"; public IServiceCollection Register(IServiceCollection services, IConfiguration configuration) { ArgumentNullException.ThrowIfNull(services); ArgumentNullException.ThrowIfNull(configuration); services.AddJvnConnector(options => { configuration.GetSection(ConfigurationSection).Bind(options); options.Validate(); }); services.AddTransient(); services.AddTransient(); services.AddTransient(); services.PostConfigure(options => { EnsureJob(options, JvnJobKinds.Fetch, typeof(JvnFetchJob)); EnsureJob(options, JvnJobKinds.Parse, typeof(JvnParseJob)); EnsureJob(options, JvnJobKinds.Map, typeof(JvnMapJob)); }); return services; } private static void EnsureJob(JobSchedulerOptions options, string kind, Type jobType) { if (options.Definitions.ContainsKey(kind)) { return; } options.Definitions[kind] = new JobDefinition( kind, jobType, options.DefaultTimeout, options.DefaultLeaseDuration, CronExpression: null, Enabled: true); } }