feat: add application preloader, identity roles, and resilient database initialization with automated seeding

This commit is contained in:
2026-05-01 09:07:26 +02:00
parent 0210611edf
commit 47bffd629f
11 changed files with 262 additions and 21 deletions
@@ -0,0 +1,72 @@
using Microsoft.AspNetCore.Identity;
using Microsoft.Extensions.DependencyInjection;
using NexusReader.Domain.Entities;
using System;
using System.Linq;
using System.Threading.Tasks;
namespace NexusReader.Infrastructure.Persistence;
public static class DbInitializer
{
public static async Task SeedAsync(IServiceProvider serviceProvider)
{
using var scope = serviceProvider.CreateScope();
var userManager = scope.ServiceProvider.GetRequiredService<UserManager<NexusUser>>();
var roleManager = scope.ServiceProvider.GetRequiredService<RoleManager<IdentityRole>>();
try
{
Console.WriteLine("[Seeder] Starting database seeding...");
// Seed Roles
string[] roleNames = { "Admin", "User" };
foreach (var roleName in roleNames)
{
var roleExist = await roleManager.RoleExistsAsync(roleName);
if (!roleExist)
{
await roleManager.CreateAsync(new IdentityRole(roleName));
Console.WriteLine($"[Seeder] Created role: {roleName}");
}
}
// Seed Admin User
var adminEmail = "admin@nexus.com";
var adminUser = await userManager.FindByEmailAsync(adminEmail);
if (adminUser == null)
{
adminUser = new NexusUser
{
UserName = adminEmail,
Email = adminEmail,
EmailConfirmed = true,
CurrentPlan = "Enterprise",
AITokenLimit = 1000000,
TenantId = Guid.NewGuid()
};
var createPowerUser = await userManager.CreateAsync(adminUser, "Admin123!");
if (createPowerUser.Succeeded)
{
await userManager.AddToRoleAsync(adminUser, "Admin");
Console.WriteLine($"[Seeder] Admin user created successfully: {adminEmail}");
}
else
{
var errors = string.Join(", ", createPowerUser.Errors.Select(e => e.Description));
Console.WriteLine($"[Seeder] Failed to create admin user: {errors}");
}
}
else
{
Console.WriteLine("[Seeder] Admin user already exists.");
}
}
catch (Exception ex)
{
Console.WriteLine($"[Seeder] Critical error during seeding: {ex.Message}");
}
}
}