using API.Database; using API.Models.Internal.User; using API.Repository.AgeGroupRepo; using API.Services; using Microsoft.AspNetCore.Identity; using Microsoft.AspNetCore.Identity.UI.Services; using Microsoft.EntityFrameworkCore; var webRoot = Path.GetFullPath(Path.Combine(Directory.GetCurrentDirectory(), "..", "wwwroot")); var builder = WebApplication.CreateBuilder(new WebApplicationOptions { Args = args, WebRootPath = webRoot }); builder.Services.AddControllers(); builder.Services.AddEndpointsApiExplorer(); builder.Services.AddSwaggerGen(); // Authentication builder.Services.AddAuthorization(); builder.Services.AddAuthentication() .AddCookie(IdentityConstants.ApplicationScheme); builder.Services.AddIdentityCore(options => { options.SignIn.RequireConfirmedAccount = true; options.User.RequireUniqueEmail = true; }).AddEntityFrameworkStores().AddRoles().AddDefaultTokenProviders(); // Database var postgresConnection = builder.Configuration.GetConnectionString("PostgresConnection"); if (!string.IsNullOrEmpty(postgresConnection)) { // Nutze PostgresSQL builder.Services.AddDbContext(options => options.UseNpgsql(postgresConnection)); } else { builder.Services.AddDbContext(options => options.UseSqlite("Data Source=app.db")); } // Adding Email Service (Plunk) builder.Services.AddHttpClient(); // Adding Database Services builder.Services.AddScoped(); // Adding S3 Services // Adding (latler) Redis Services // Add Database Services var app = builder.Build(); // Configure the HTTP request pipeline. if (app.Environment.IsDevelopment()) { app.UseSwagger(); app.UseSwaggerUI(); } using(var scope = app.Services.CreateScope()) { var dbContext = scope.ServiceProvider.GetRequiredService(); dbContext.Database.Migrate(); } // Deliver frontend app.UseDefaultFiles(); app.UseStaticFiles(); app.UseHttpsRedirection(); app.UseAuthentication(); app.UseAuthorization(); app.MapControllers(); // Frontend Fallback app.MapFallbackToFile("index.html"); app.Run();