using Seasoned.Backend.Services; using Microsoft.AspNetCore.HttpOverrides; using System.Text.Json; using Microsoft.EntityFrameworkCore; using Seasoned.Backend.Data; using Microsoft.AspNetCore.Identity; using Microsoft.AspNetCore.Identity.EntityFrameworkCore; using DotNetEnv; Env.Load("../.env"); var builder = WebApplication.CreateBuilder(args); builder.Services.AddScoped(); builder.Services.AddIdentityApiEndpoints( options => { options.Password.RequireDigit = false; options.Password.RequiredLength = 6; options.Password.RequireNonAlphanumeric = false; options.Password.RequireUppercase = false; options.Password.RequireLowercase = false; options.User.RequireUniqueEmail = true; }) .AddEntityFrameworkStores(); builder.Services.AddAuthorization(); builder.Services.AddControllers() .AddJsonOptions(options => { options.JsonSerializerOptions.PropertyNamingPolicy = JsonNamingPolicy.CamelCase; }); builder.Services.AddOpenApi(); builder.Services.AddCors(options => { options.AddPolicy("SeasonedOriginPolicy", policy => { policy.WithOrigins("https://seasoned.ddns.net") .AllowAnyMethod() .AllowAnyHeader() .AllowCredentials(); }); }); builder.Services.AddDbContext(options => options.UseNpgsql(builder.Configuration.GetConnectionString("DefaultConnection"), o => o.UseVector())); var app = builder.Build(); using (var scope = app.Services.CreateScope()) { try { var db = scope.ServiceProvider.GetRequiredService(); if (db.Database.GetPendingMigrations().Any()) { db.Database.Migrate(); } } catch (Exception ex) { Console.WriteLine($"Database Migration skipped or failed: {ex.Message}"); } } app.UseDefaultFiles(); app.UseStaticFiles(); app.UseCors("SeasonedOriginPolicy"); app.UseAuthentication(); app.UseAuthorization(); if (app.Environment.IsDevelopment()) { app.MapOpenApi(); } app.MapGroup("/api/auth").MapIdentityApi(); app.MapControllers(); app.MapFallbackToFile("index.html"); app.Run();