diff --git a/CouchLog/Program.cs b/CouchLog/Program.cs index 432b152..41e3491 100644 --- a/CouchLog/Program.cs +++ b/CouchLog/Program.cs @@ -61,118 +61,96 @@ app.MapAdditionalIdentityEndpoints(); using (var scope = app.Services.CreateScope()) { - var services = scope.ServiceProvider; - try + 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 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) + var roleExist = await roleManager.RoleExistsAsync(roleName); + if (!roleExist) { - if (!await roleManager.RoleExistsAsync(roleName)) - { - await roleManager.CreateAsync(new IdentityRole(roleName)); - } + roleResult = await roleManager.CreateAsync(new IdentityRole(roleName)); } + } - // 2. User erstellen - var adminUsername = "Admin"; - var normalUsername = "User"; - var defaultPassword = "EinSehrSicheresPasswort123!"; + var adminUsername = "Admin"; + var normalUsername = "User"; + var adminPassword = "EinSehrSicheresPasswort123!"; - var adminUser = await userManager.FindByNameAsync(adminUsername); + var adminUser = await userManager.FindByNameAsync(adminUsername); + var normalUser = await userManager.FindByNameAsync(normalUsername); - // FIX: Kein 'else if', sondern separater Block - if (adminUser == null) + if (adminUser == null) + { + adminUser = new ApplicationUser { - 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")) + UserName = adminUsername, + EmailConfirmed = true + }; + var createResult = await userManager.CreateAsync(adminUser, adminPassword); + + if (createResult.Succeeded) { - // Falls User existiert, aber Rolle fehlt await userManager.AddToRoleAsync(adminUser, "Admin"); } - - var normalUser = await userManager.FindByNameAsync(normalUsername); - - // FIX: Separater Block für den zweiten User - if (normalUser == null) - { - 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(); } - catch (Exception ex) + else if (normalUser == null) { - Console.WriteLine("------------------------------------------------"); - Console.WriteLine("FEHLER BEIM DB INITIALISIEREN:"); - Console.WriteLine(ex.Message); - Console.WriteLine("------------------------------------------------"); + normalUser = new ApplicationUser + { + UserName = normalUsername, + EmailConfirmed = true + }; + var createResult = await userManager.CreateAsync(normalUser, adminPassword); + + if (createResult.Succeeded) + { + await userManager.AddToRoleAsync(adminUser, "User"); + } } + else if (!await userManager.IsInRoleAsync(normalUser, "User")) + { + await userManager.AddToRoleAsync(normalUser, "User"); + } + 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