using Common.Configuration; using Common.Configuration.Arr; using Common.Configuration.DownloadCleaner; using Common.Configuration.General; using Common.Configuration.Notification; using Common.Configuration.QueueCleaner; using Common.Helpers; using Microsoft.EntityFrameworkCore; namespace Data; /// /// Database context for configuration data /// public class DataContext : DbContext { public DbSet GeneralConfigs { get; set; } public DbSet DownloadClients { get; set; } public DbSet QueueCleanerConfigs { get; set; } public DbSet DownloadCleanerConfigs { get; set; } public DbSet SonarrConfigs { get; set; } public DbSet RadarrConfigs { get; set; } public DbSet LidarrConfigs { get; set; } public DbSet AppriseConfigs { get; set; } public DbSet NotifiarrConfigs { get; set; } protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { if (optionsBuilder.IsConfigured) { return; } var dbPath = Path.Combine(ConfigurationPathProvider.GetConfigPath(), "cleanuparr.db"); optionsBuilder .UseSqlite($"Data Source={dbPath}") .UseLowerCaseNamingConvention() .UseSnakeCaseNamingConvention(); } protected override void OnModelCreating(ModelBuilder modelBuilder) { modelBuilder.Entity(entity => { entity.ComplexProperty(e => e.FailedImport); entity.ComplexProperty(e => e.Stalled); entity.ComplexProperty(e => e.Slow); entity.ComplexProperty(e => e.ContentBlocker); }); foreach (var entityType in modelBuilder.Model.GetEntityTypes()) { var enumProperties = entityType.ClrType.GetProperties() .Where(p => p.PropertyType.IsEnum || (p.PropertyType.IsGenericType && p.PropertyType.GetGenericTypeDefinition() == typeof(Nullable<>) && p.PropertyType.GetGenericArguments()[0].IsEnum)); foreach (var property in enumProperties) { modelBuilder.Entity(entityType.ClrType) .Property(property.Name) .HasConversion(); } } modelBuilder.Entity().HasData(new QueueCleanerConfig()); modelBuilder.Entity().HasData(new DownloadCleanerConfig()); modelBuilder.Entity().HasData(new GeneralConfig()); modelBuilder.Entity().HasData(new SonarrConfig()); modelBuilder.Entity().HasData(new RadarrConfig()); modelBuilder.Entity().HasData(new LidarrConfig()); modelBuilder.Entity().HasData(new AppriseConfig()); modelBuilder.Entity().HasData(new NotifiarrConfig()); } }