using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Hosting; using Microsoft.Extensions.Logging; using OpenCand.Config; using OpenCand.ETL.Repository; using OpenCand.Parser; using OpenCand.Parser.Services; using OpenCand.Repository; using OpenCand.Services; namespace OpenCand { public class Program { static async Task Main(string[] args) { var host = CreateHostBuilder(args).Build(); using (var scope = host.Services.CreateScope()) { var services = scope.ServiceProvider; var logger = services.GetRequiredService>(); try { logger.LogInformation("Initializing database"); // make a test connection to the database logger.LogInformation("Starting data parsing"); var parserManager = services.GetRequiredService(); await parserManager.ParseFullDataAsync(); logger.LogInformation("Data parsing completed successfully!"); } catch (Exception ex) { logger.LogError(ex, "An error occurred during application startup"); } } } public static IHostBuilder CreateHostBuilder(string[] args) => Host.CreateDefaultBuilder(args) .ConfigureAppConfiguration((hostingContext, config) => { config.AddJsonFile("appsettings.json", optional: false, reloadOnChange: true); config.AddJsonFile($"appsettings.{hostingContext.HostingEnvironment.EnvironmentName}.json", optional: true); config.AddEnvironmentVariables(); config.AddCommandLine(args); System.Text.Encoding.RegisterProvider(System.Text.CodePagesEncodingProvider.Instance); }) .ConfigureServices((hostContext, services) => { // Configuration services.Configure(hostContext.Configuration.GetSection("CsvSettings")); // Services services.AddTransient(); services.AddTransient(); services.AddTransient(); services.AddTransient(); services.AddTransient(); services.AddTransient(); services.AddTransient(); services.AddTransient(); services.AddTransient(); services.AddTransient(); }); } }