using System.Text; using Mercados.Infrastructure; using Mercados.Infrastructure.DataFetchers; using Mercados.Infrastructure.Persistence; using Mercados.Infrastructure.Persistence.Repositories; using Mercados.Worker; using Polly; using Polly.Extensions.Http; using Mercados.Infrastructure.Services; IHost host = Host.CreateDefaultBuilder(args) .ConfigureServices((hostContext, services) => { IConfiguration configuration = hostContext.Configuration; // El resto del código no cambia. IConfiguration recogerá automáticamente // las variables de entorno que cargamos correctamente. services.AddSingleton(); services.AddScoped(); services.AddScoped(); services.AddScoped(); services.AddScoped(); services.AddScoped(); services.AddScoped(); services.AddScoped(); services.AddScoped(); services.AddScoped(); services.AddHttpClient("MercadoAgroFetcher").AddPolicyHandler(GetRetryPolicy()); services.AddHttpClient("BcrDataFetcher").AddPolicyHandler(GetRetryPolicy()); services.AddHttpClient("FinnhubDataFetcher").AddPolicyHandler(GetRetryPolicy()); services.AddHostedService(); }) .Build(); static IAsyncPolicy GetRetryPolicy() { return HttpPolicyExtensions .HandleTransientHttpError() .OrResult(msg => msg.StatusCode == System.Net.HttpStatusCode.RequestTimeout) .WaitAndRetryAsync(3, retryAttempt => TimeSpan.FromSeconds(Math.Pow(2, retryAttempt)), onRetry: (outcome, timespan, retryAttempt, context) => { Console.WriteLine($"[Polly] Reintentando petición... Intento {retryAttempt}. Esperando {timespan.TotalSeconds}s. Causa: {outcome.Exception?.Message ?? outcome.Result.ReasonPhrase}"); }); } await host.RunAsync();