using System.Linq.Expressions; using IdentityShroud.Core.Model; using IdentityShroud.Core.Security; using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.Logging; using Microsoft.Extensions.Options; namespace IdentityShroud.Core; public class DbConfiguration { public string ConnectionString { get; set; } = ""; public bool LogSensitiveData { get; set; } = false; } public class Db( IOptions configuration, ILoggerFactory? loggerFactory) : DbContext { public virtual DbSet Clients { get; set; } public virtual DbSet Realms { get; set; } public virtual DbSet Keys { get; set; } public virtual DbSet Deks { get; set; } protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { optionsBuilder.UseNpgsql(""); optionsBuilder.UseNpgsql( configuration.Value.ConnectionString, o => o.MigrationsAssembly("IdentityShroud.Migrations")); // , o => o.UseNodaTime().UseVector().MigrationsAssembly("Migrations.KnowledgeBaseDB")); optionsBuilder.UseSnakeCaseNamingConvention(); if (configuration.Value.LogSensitiveData) optionsBuilder.EnableSensitiveDataLogging(); if (loggerFactory is { } ) { optionsBuilder.UseLoggerFactory(loggerFactory); } } protected override void OnModelCreating(ModelBuilder modelBuilder) { modelBuilder.ApplyConfigurationsFromAssembly(typeof(Db).Assembly); } protected override void ConfigureConventions(ModelConfigurationBuilder b) { base.ConfigureConventions(b); b.Properties().HaveConversion(); b.Properties().HaveConversion(); } }