using Microsoft.EntityFrameworkCore; using Npgsql; using Npgsql.NameTranslation; using KernelRecordsMVC.Domain.Enums; using KernelRecordsMVC.Infrastructure.Data; var builder = WebApplication.CreateBuilder(args); // ========================================== // AUTHENTICATION // ========================================== builder.Services .AddAuthentication("Cookies") .AddCookie("Cookies", options => { options.LoginPath = "/Account/Login"; options.AccessDeniedPath = "/Account/Login"; options.ExpireTimeSpan = TimeSpan.FromHours(8); options.SlidingExpiration = true; }); builder.Services.AddAuthorization(); builder.Services.AddControllersWithViews(); // ========================================== // DATABASE // ========================================== var dataSourceBuilder = new NpgsqlDataSourceBuilder( builder.Configuration.GetConnectionString("KernelRecords")); var nameTranslator = new NpgsqlNullNameTranslator(); dataSourceBuilder.MapEnum( "project.admin_type", nameTranslator); dataSourceBuilder.MapEnum( "project.product_format", nameTranslator); dataSourceBuilder.MapEnum( "project.payment_method_type", nameTranslator); dataSourceBuilder.MapEnum( "project.order_status_type", nameTranslator); dataSourceBuilder.MapEnum( "project.modification_type", nameTranslator); dataSourceBuilder.MapEnum( "project.artist_release_type", nameTranslator); var dataSource = dataSourceBuilder.Build(); builder.Services.AddDbContext(options => options.UseNpgsql(dataSource)); // ========================================== // SESSION // ========================================== builder.Services.AddSession(options => { options.IdleTimeout = TimeSpan.FromHours(2); options.Cookie.HttpOnly = true; options.Cookie.IsEssential = true; }); var app = builder.Build(); // ========================================== // MIDDLEWARE // ========================================== if (!app.Environment.IsDevelopment()) { app.UseExceptionHandler("/Home/Error"); app.UseHsts(); } app.UseHttpsRedirection(); app.UseStaticFiles(); app.UseRouting(); app.UseSession(); app.UseAuthentication(); app.UseAuthorization(); app.MapControllerRoute( name: "default", pattern: "{controller=Home}/{action=Index}/{id?}"); app.Run();