using Elecciones.Database; using Microsoft.EntityFrameworkCore; using Serilog; // Esta es la estructura estándar y recomendada. var builder = WebApplication.CreateBuilder(args); // 1. Configurar Serilog. Esta es la forma correcta de integrarlo. builder.Host.UseSerilog((context, services, configuration) => configuration .ReadFrom.Configuration(context.Configuration) .ReadFrom.Services(services) .Enrich.FromLogContext() .WriteTo.Console() .WriteTo.File("logs/api-.log", rollingInterval: RollingInterval.Day)); // 2. Añadir servicios al contenedor. var connectionString = builder.Configuration.GetConnectionString("DefaultConnection"); builder.Services.AddDbContext(options => options.UseSqlServer(connectionString)); builder.Services.AddControllers(); var allowedOrigins = builder.Configuration["AllowedOrigins"]?.Split(',') ?? Array.Empty(); builder.Services.AddCors(options => { options.AddDefaultPolicy(policy => { if (allowedOrigins.Any()) { policy.WithOrigins(allowedOrigins) .AllowAnyHeader() .AllowAnyMethod(); } }); }); builder.Services.AddEndpointsApiExplorer(); builder.Services.AddSwaggerGen(); // 3. Construir la aplicación. var app = builder.Build(); // 4. Configurar el pipeline de peticiones HTTP. // Añadimos el logging de peticiones de Serilog aquí. app.UseSerilogRequestLogging(); if (app.Environment.IsDevelopment()) { app.UseSwagger(); app.UseSwaggerUI(); } app.UseHttpsRedirection(); app.UseCors(); app.UseAuthorization(); app.MapControllers(); // 5. Ejecutar la aplicación. // El try/catch/finally se puede omitir; el logging de Serilog ya se encarga de los errores fatales. app.Run();