using Microsoft.AspNetCore.Authentication.Cookies; using MudBlazor.Services; using TaxBaik.Application; using TaxBaik.Infrastructure; var builder = WebApplication.CreateBuilder(args); builder.Services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme) .AddCookie(opts => { opts.LoginPath = "/login"; opts.ExpireTimeSpan = TimeSpan.FromHours(8); opts.Cookie.SameSite = SameSiteMode.Lax; }); builder.Services.AddAuthorizationCore(); builder.Services.AddRazorComponents() .AddInteractiveServerComponents(); builder.Services.AddMudServices(); builder.Services.AddMemoryCache(); builder.Services.AddInfrastructure(); builder.Services.AddApplication(); var app = builder.Build(); // Run migrations on startup using (var scope = app.Services.CreateScope()) { var connectionFactory = scope.ServiceProvider.GetRequiredService(); var cs = builder.Configuration.GetConnectionString("Default") ?? throw new InvalidOperationException("Missing connection string"); var migrationRunner = new TaxBaik.Infrastructure.Data.MigrationRunner(cs, connectionFactory); await migrationRunner.RunAsync(); } if (!app.Environment.IsDevelopment()) { app.UseExceptionHandler("/Error", createScopeForErrors: true); app.UseHsts(); } app.UsePathBase("/taxbaik/admin"); app.UseHttpsRedirection(); app.UseStaticFiles(); app.UseRouting(); app.UseAuthentication(); app.UseAuthorization(); app.MapRazorComponents() .AddInteractiveServerRenderMode(); app.Run();