using CodeLiturgy.Data.Application; using CodeLiturgy.Data.Application.Users; using Microsoft.EntityFrameworkCore; namespace CodeLiturgy.Domain.Model { /// /// Database model configuration extensions /// public static class ModelBuilderExtensions { #region Initialization static ModelBuilderExtensions() { } /// /// Setup the database model /// /// public static void ConfigureCurrentDbModel(this ModelBuilder modelBuilder) { modelBuilder .ConfigureDatabaseKeys() .EnvironmentModel() .SiteModel() .ConfigureUserModel() .ConfigureAppContextModel(); //.ConfigureIdentityModel(); } #endregion #region Application Users /// /// Configure App context model /// /// private static void ConfigureAppContextModel(this ModelBuilder builder) { builder.Entity().ToTable("UserRoles"); builder.Entity(b => { b.HasMany() .WithOne(b => b.User) .HasForeignKey(ur => ur.UserId).IsRequired(); }); builder.Entity().ToTable("ApplicationUser") .HasKey(x => x.Id); builder.Entity(b => { b.HasKey(r => r.Id); b.HasIndex(r => r.NormalizedName).HasDatabaseName("RoleNameIndex").IsUnique(); b.ToTable("Roles"); b.Property(r => r.ConcurrencyStamp).IsConcurrencyToken(); b.Property(u => u.Name).HasMaxLength(256); b.Property(u => u.NormalizedName).HasMaxLength(256); b.HasMany().WithOne().HasForeignKey(ur => ur.RoleId).IsRequired(); b.HasMany().WithOne().HasForeignKey(rc => rc.RoleId).IsRequired(); }); builder.Entity().HasOne(x => x.ApplicationRole); builder.Entity().HasOne(x => x.ApplicationRole); builder.Entity().HasOne(x => x.ApplicationUser); builder.Entity(b => { b.HasKey(rc => rc.Id); b.ToTable("RoleClaims"); }); builder.Entity(b => { b.HasKey(r => new {r.UserId, r.RoleId}); b.ToTable("UserRoles"); }); builder.Entity().ToTable("RoleClaims"); builder.Entity().ToTable("UserRole"); //.ConfigureIdentityModel(); } #endregion #region DatabasePK private static ModelBuilder ConfigureDatabaseKeys(this ModelBuilder modelBuilder) { // FinanceOp return modelBuilder; } #endregion #region Database Models private static ModelBuilder EnvironmentModel(this ModelBuilder modelBuilder) { modelBuilder .Entity() .HasMany(b => b.Sites) .WithOne(x => x.Environment) .HasForeignKey(x => x.EnvironmentId); return modelBuilder; } private static ModelBuilder SiteModel(this ModelBuilder modelBuilder) { modelBuilder.Entity() .HasOne(x => x.Environment) .WithMany(x => x.Sites) .HasForeignKey(x => x.EnvironmentId); return modelBuilder; } private static ModelBuilder ConfigureUserModel(this ModelBuilder modelBuilder) { modelBuilder .Entity() .HasMany(x => x.Sites) .WithOne(x => x.User); modelBuilder .Entity() .HasMany(x => x.Environments) .WithOne(x => x.User); return modelBuilder; } #endregion } }