using Microsoft.EntityFrameworkCore; using landing.Data; using landing.Middleware; using landing.Services; var builder = WebApplication.CreateBuilder(args); // Load .env file if present (for local development) var envPath = Path.Combine(builder.Environment.ContentRootPath, ".env"); if (File.Exists(envPath)) { foreach (var line in File.ReadAllLines(envPath)) { var trimmed = line.Trim(); if (string.IsNullOrEmpty(trimmed) || trimmed.StartsWith('#')) continue; var idx = trimmed.IndexOf('='); if (idx <= 0) continue; var key = trimmed[..idx].Trim(); var value = trimmed[(idx + 1)..].Trim(); if (string.IsNullOrEmpty(Environment.GetEnvironmentVariable(key))) Environment.SetEnvironmentVariable(key, value); } } // Add environment variables to configuration builder.Configuration.AddEnvironmentVariables(); // Build connection string from env vars var pgHost = builder.Configuration["PG_HOST"] ?? "localhost"; var pgPort = builder.Configuration["PG_PORT"] ?? "5432"; var pgDatabase = builder.Configuration["PG_DATABASE"] ?? "rideaware"; var pgUser = builder.Configuration["PG_USER"] ?? "postgres"; var pgPassword = builder.Configuration["PG_PASSWORD"] ?? ""; var connectionString = $"Host={pgHost};Port={pgPort};Database={pgDatabase};Username={pgUser};Password={pgPassword}"; // Register services builder.Services.AddDbContext(options => options.UseNpgsql(connectionString)); builder.Services.AddSingleton(); builder.Services.AddSingleton(); builder.Services.AddRazorPages(); var app = builder.Build(); // Ensure database tables exist (gracefully handle missing DB for development) using (var scope = app.Services.CreateScope()) { var db = scope.ServiceProvider.GetRequiredService(); try { await db.Database.EnsureCreatedAsync(); } catch (Exception ex) { Console.WriteLine($"Warning: Could not connect to database: {ex.Message}"); Console.WriteLine("The app will start but database-dependent features will be unavailable."); } } // Middleware pipeline app.UseMiddleware(); if (!app.Environment.IsDevelopment()) { app.UseExceptionHandler("/Error"); } app.UseStaticFiles(); app.UseRouting(); app.MapRazorPages(); // Configure Kestrel to listen on the right port var host = builder.Configuration["HOST"] ?? "0.0.0.0"; var port = builder.Configuration["PORT"] ?? "5000"; app.Run($"http://{host}:{port}");