using AutobusApi.Domain.Enums; using AutobusApi.Infrastructure.Identity; using AutoubsApi.Infrastructure.Data; using Microsoft.AspNetCore.Identity; using Microsoft.EntityFrameworkCore; using Npgsql; namespace AutobusApi.Infrastructure; public static class DbInitializer { public static void Initialize(ApplicationDbContext dbContext, ApplicationIdentityDbContext identityDbContext) { if (dbContext.Database.IsRelational()) { var domainAppliedMigrations = dbContext.Database.GetAppliedMigrations(); var identityAppliedMigrations = identityDbContext.Database.GetAppliedMigrations(); if (domainAppliedMigrations.Count() == 0) { dbContext.Database.Migrate(); // https://github.com/npgsql/efcore.pg/issues/292 dbContext.Database.OpenConnection(); ((NpgsqlConnection)dbContext.Database.GetDbConnection()).ReloadTypes(); InitializeDomain(dbContext); } if (identityAppliedMigrations.Count() == 0) { identityDbContext.Database.Migrate(); InitializeIdentity(identityDbContext); } return; } dbContext.Database.EnsureCreated(); InitializeDomain(dbContext); identityDbContext.Database.EnsureCreated(); InitializeIdentity(identityDbContext); } private static void InitializeDomain(ApplicationDbContext dbContext) { } private static void InitializeIdentity(ApplicationIdentityDbContext identityDbContext) { foreach (var role in Enum.GetValues(typeof(IdentityRoles)).Cast()) { identityDbContext.Roles.Add(new IdentityRole { Name = role.ToString(), NormalizedName = role.ToString().ToUpper(), ConcurrencyStamp = Guid.NewGuid().ToString() }); } identityDbContext.SaveChanges(); } }