55 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			55 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
| 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<JvnFetchJob>();
 | |
|         services.AddTransient<JvnParseJob>();
 | |
|         services.AddTransient<JvnMapJob>();
 | |
| 
 | |
|         services.PostConfigure<JobSchedulerOptions>(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);
 | |
|     }
 | |
| }
 |