using Microsoft.Extensions.Hosting; using MyNewProjectName.Application; using MyNewProjectName.Infrastructure; using MyNewProjectName.Infrastructure.Extensions; using MyNewProjectName.AdminAPI.Middleware; using Serilog; // Create host builder with Serilog var builder = WebApplication.CreateBuilder(args); // Configure Serilog builder.Host.UseSerilogLogging(builder.Configuration); // Add OpenTelemetry distributed tracing builder.Services.AddOpenTelemetryTracing("MyNewProjectName.AdminAPI"); // Add services to the container. builder.Services.AddControllers(); // Add Application Layer builder.Services.AddApplication(); // Add Infrastructure Layer builder.Services.AddInfrastructure(builder.Configuration); // Learn more about configuring OpenAPI at https://aka.ms/aspnet/openapi builder.Services.AddOpenApi(); // Add Swagger builder.Services.AddEndpointsApiExplorer(); var app = builder.Build(); // Configure the HTTP request pipeline. if (app.Environment.IsDevelopment()) { app.MapOpenApi(); } // Middleware pipeline order is critical: // 1. CorrelationIdMiddleware - Must be first to track all requests app.UseMiddleware(); // 2. RequestResponseLoggingMiddleware - Optional, enable only when needed // WARNING: This can generate large log files. Enable only for specific environments. // For AdminAPI, you might want to enable this more often for audit purposes. // Configure in appsettings.json: "Logging:EnableRequestLogging" and "Logging:EnableResponseLogging" app.UseMiddleware(); app.UseHttpsRedirection(); // 3. Authentication (built-in) app.UseAuthentication(); // 4. Authorization (built-in) app.UseAuthorization(); // 6. ExceptionHandlingMiddleware - Must be last to catch all exceptions app.UseMiddleware(); app.MapControllers(); try { Log.Information("Starting MyNewProjectName.AdminAPI"); app.Run(); } catch (Exception ex) { Log.Fatal(ex, "Application terminated unexpectedly"); throw; } finally { Log.CloseAndFlush(); }