using JSMR.Application.Circles.Queries.GetCreators; using JSMR.Application.Circles.Queries.GetTags; using JSMR.Application.Circles.Queries.Search; using JSMR.Application.Common; using JSMR.Application.Common.Caching; using JSMR.Application.Creators.Ports; using JSMR.Application.Creators.Queries.Search.Ports; using JSMR.Application.Integrations.Ports; using JSMR.Application.Scanning.Ports; using JSMR.Application.Tags.Ports; using JSMR.Application.Tags.Queries.Search.Ports; using JSMR.Application.VoiceWorks.Ports; using JSMR.Application.VoiceWorks.Queries.Search; using JSMR.Infrastructure.Caching; using JSMR.Infrastructure.Caching.Adapters; using JSMR.Infrastructure.Data.Repositories.Circles; using JSMR.Infrastructure.Data.Repositories.Creators; using JSMR.Infrastructure.Data.Repositories.Tags; using JSMR.Infrastructure.Data.Repositories.VoiceWorks; using JSMR.Infrastructure.Http; using JSMR.Infrastructure.Integrations.DLSite; using JSMR.Infrastructure.Scanning; using Microsoft.Extensions.DependencyInjection; namespace JSMR.Infrastructure.DI; public static class InfrastructureServiceCollectionExtensions { public static IServiceCollection AddInfrastructure(this IServiceCollection services) { services.AddScoped(); services.AddScoped(); services.AddScoped(); services.AddScoped(); services.AddScoped(); services.AddScoped(); services.AddKeyedScoped(Locale.Japanese); services.AddKeyedScoped(Locale.English); services.AddScoped(); services.AddScoped(); services.AddScoped(); services.AddScoped(); services.AddSingleton(); services.AddSingleton(); services.AddHttpClient(client => { client.DefaultRequestHeaders.UserAgent.ParseAdd("JSMR/1.0"); }); services.AddScoped(); services.AddScoped(); return services; } //public static IServiceCollection AddDLSiteClient(this IServiceCollection services) //{ // var retryPolicy = HttpPolicyExtensions // .HandleTransientHttpError() // .OrResult(msg => (int)msg.StatusCode == 429) // Too Many Requests // .WaitAndRetryAsync(new[] // { // TimeSpan.FromMilliseconds(200), // TimeSpan.FromMilliseconds(500), // TimeSpan.FromSeconds(1.5) // }); // services.AddHttpClient(c => // { // c.BaseAddress = new Uri("https://www.dlsite.com/"); // c.DefaultRequestHeaders.UserAgent.ParseAdd("JSMR/1.0 (+contact@example.com)"); // c.Timeout = TimeSpan.FromSeconds(15); // }) // .AddPolicyHandler(retryPolicy); // return services; //} }