using System; using FinlyticAnalyzer.Database; using FinlyticAnalyzer.Services; using FinlyticAnalyzer.Util; using FinlyticCore.Services.Yahoo; using Microsoft.EntityFrameworkCore; var builder = Host.CreateApplicationBuilder(args); // Register DB Context builder.Services.AddDbContext(options => options.UseNpgsql(builder.Configuration.GetConnectionString("DefaultConnection"))); // Register HTTP Clients for external webhooks (HttpClientFactory manages pool) builder.Services.AddHttpClient(); // Register Domain Services builder.Services.AddSingleton(); builder.Services.AddSingleton(); builder.Services.AddSingleton(); builder.Services.AddScoped(); builder.Services.AddSingleton(); // Unified MQTT Client (Handles both Events and RPC) builder.Services.AddSingleton(); builder.Services.AddHostedService(provider => provider.GetRequiredService()); // Register Active Trade Monitor builder.Services.AddHostedService(); var host = builder.Build(); // Run DB Migrations using (var scope = host.Services.CreateScope()) { try { var context = scope.ServiceProvider.GetRequiredService(); await context.Database.MigrateAsync(); Console.WriteLine("Database migrations successfully executed for FinlyticAnalyzer."); var settingsService = scope.ServiceProvider.GetRequiredService(); await settingsService.GetSettingsAsync(); } catch (Exception ex) { var logger = scope.ServiceProvider.GetRequiredService>(); logger.LogError(ex, "An error occurred during database migration for FinlyticAnalyzer on startup."); } } // Initial VIX Poll using (var scope = host.Services.CreateScope()) { var vixService = scope.ServiceProvider.GetRequiredService(); await vixService.PollVixAsync(); } await host.RunAsync();