From 43fdd940b0f38f74838391f4d2921f77517532e3 Mon Sep 17 00:00:00 2001 From: Henry Date: Mon, 8 Dec 2025 21:46:47 +0100 Subject: [PATCH] Hopefully now --- CouchLog/Program.cs | 170 +++++++++++++++++++++++++------------------- 1 file changed, 96 insertions(+), 74 deletions(-) diff --git a/CouchLog/Program.cs b/CouchLog/Program.cs index 41e3491..432b152 100644 --- a/CouchLog/Program.cs +++ b/CouchLog/Program.cs @@ -61,96 +61,118 @@ app.MapAdditionalIdentityEndpoints(); using (var scope = app.Services.CreateScope()) { - var roleManager = scope.ServiceProvider.GetRequiredService>(); - var userManager = scope.ServiceProvider.GetRequiredService>(); - - var CouchLogDB = scope.ServiceProvider.GetRequiredService(); - - CouchLogDB.Database.Migrate(); - CouchLogDB.Database.EnsureCreated(); - - string[] roleNames = { "Admin", "User" }; - IdentityResult roleResult; - - foreach (var roleName in roleNames) + var services = scope.ServiceProvider; + try { - var roleExist = await roleManager.RoleExistsAsync(roleName); - if (!roleExist) + var context = services.GetRequiredService(); + var roleManager = services.GetRequiredService>(); + var userManager = services.GetRequiredService>(); + + // WICHTIG: Nur EINES von beiden benutzen. + // Da du Probleme mit Migrationen hattest, nehmen wir EnsureCreated. + // Das erstellt die DB sofort komplett neu, ignoriert aber Migrations-Dateien. + context.Database.EnsureCreated(); + + // 1. Rollen erstellen + string[] roleNames = { "Admin", "User" }; + foreach (var roleName in roleNames) { - roleResult = await roleManager.CreateAsync(new IdentityRole(roleName)); + if (!await roleManager.RoleExistsAsync(roleName)) + { + await roleManager.CreateAsync(new IdentityRole(roleName)); + } } - } - var adminUsername = "Admin"; - var normalUsername = "User"; - var adminPassword = "EinSehrSicheresPasswort123!"; + // 2. User erstellen + var adminUsername = "Admin"; + var normalUsername = "User"; + var defaultPassword = "EinSehrSicheresPasswort123!"; - var adminUser = await userManager.FindByNameAsync(adminUsername); - var normalUser = await userManager.FindByNameAsync(normalUsername); + var adminUser = await userManager.FindByNameAsync(adminUsername); - if (adminUser == null) - { - adminUser = new ApplicationUser + // FIX: Kein 'else if', sondern separater Block + if (adminUser == null) { - UserName = adminUsername, - EmailConfirmed = true - }; - var createResult = await userManager.CreateAsync(adminUser, adminPassword); - - if (createResult.Succeeded) + adminUser = new ApplicationUser + { + UserName = adminUsername, + EmailConfirmed = true + }; + var createResult = await userManager.CreateAsync(adminUser, defaultPassword); + if (createResult.Succeeded) + { + await userManager.AddToRoleAsync(adminUser, "Admin"); + } + } + else if (!await userManager.IsInRoleAsync(adminUser, "Admin")) { + // Falls User existiert, aber Rolle fehlt await userManager.AddToRoleAsync(adminUser, "Admin"); } - } - else if (normalUser == null) - { - normalUser = new ApplicationUser - { - UserName = normalUsername, - EmailConfirmed = true - }; - var createResult = await userManager.CreateAsync(normalUser, adminPassword); - if (createResult.Succeeded) + var normalUser = await userManager.FindByNameAsync(normalUsername); + + // FIX: Separater Block für den zweiten User + if (normalUser == null) { - await userManager.AddToRoleAsync(adminUser, "User"); + normalUser = new ApplicationUser + { + UserName = normalUsername, + EmailConfirmed = true + }; + var createResult = await userManager.CreateAsync(normalUser, defaultPassword); + if (createResult.Succeeded) + { + // FIX: Hier stand vorher 'adminUser', muss 'normalUser' sein + await userManager.AddToRoleAsync(normalUser, "User"); + } } + else if (!await userManager.IsInRoleAsync(normalUser, "User")) + { + await userManager.AddToRoleAsync(normalUser, "User"); + } + + + // 3. Daten Seeden + // Erst speichern, damit die User IDs sicher in der DB sind + await context.SaveChangesAsync(); + + // Admin User neu laden um sicherzugehen, dass die ID da ist + var currentAdmin = await userManager.FindByNameAsync("Admin"); + + if (!context.MediaType.Any()) + { + MediaType mediaType = new() { Name = "Movie" }; + context.MediaType.Add(mediaType); + await context.SaveChangesAsync(); // Speichern, damit ID generiert wird + + // GlobalEntity braucht die ID vom MediaType und vom User + if (!context.GlobalEntities.Any() && currentAdmin != null) + { + GlobalEntity globalEntity = new() + { + Title = "Inception", + CreationTime = DateTime.Now, + CreatorId = currentAdmin.Id, + TypeId = mediaType.Id, // Nimm die echte ID aus der DB + PicturePath = "Pictures/Inception.jpg" + }; + context.GlobalEntities.Add(globalEntity); + await context.SaveChangesAsync(); + } + } + + // Deine eigene Startup Logik + OnStartUp onStartUp = new(context); + onStartUp.AddBasicDatabaseEntries(); } - else if (!await userManager.IsInRoleAsync(normalUser, "User")) + catch (Exception ex) { - await userManager.AddToRoleAsync(normalUser, "User"); + Console.WriteLine("------------------------------------------------"); + Console.WriteLine("FEHLER BEIM DB INITIALISIEREN:"); + Console.WriteLine(ex.Message); + Console.WriteLine("------------------------------------------------"); } - else if (!await userManager.IsInRoleAsync(adminUser, "Admin")) - { - await userManager.AddToRoleAsync(adminUser, "Admin"); - } - - MediaType mediaType = new() - { - Name = "Movie" - }; - - if (!CouchLogDB.MediaType.Any()) - CouchLogDB.MediaType.Add(mediaType); - - await CouchLogDB.SaveChangesAsync(); - - GlobalEntity globalEntity = new() - { - Title = "Inception", - CreationTime = DateTime.Now, - CreatorId = (await userManager.FindByNameAsync("Admin"))!.Id, - TypeId = 1, - PicturePath = "Pictures/Inception.jpg" - }; - - if (!CouchLogDB.GlobalEntities.Any()) - CouchLogDB.GlobalEntities.Add(globalEntity); - - await CouchLogDB.SaveChangesAsync(); - - OnStartUp onStartUp = new(CouchLogDB); - onStartUp.AddBasicDatabaseEntries(); } app.Run(); \ No newline at end of file