using API.Schema.Jobs; using API.Schema.LibraryConnectors; using API.Schema.MangaConnectors; using API.Schema.NotificationConnectors; using Microsoft.EntityFrameworkCore; namespace API.Schema; public class PgsqlContext(DbContextOptions options) : DbContext(options) { public DbSet Jobs { get; set; } public DbSet MangaConnectors { get; set; } public DbSet Manga { get; set; } public DbSet Chapters { get; set; } public DbSet Authors { get; set; } public DbSet Link { get; set; } public DbSet Tags { get; set; } public DbSet AltTitles { get; set; } public DbSet LibraryConnectors { get; set; } public DbSet NotificationConnectors { get; set; } public DbSet Notifications { get; set; } protected override void OnModelCreating(ModelBuilder modelBuilder) { modelBuilder.Entity() .HasDiscriminator(c => c.Name) .HasValue("AsuraToon") .HasValue("Bato") .HasValue("MangaHere") .HasValue("MangaKatana") .HasValue("Manga4Life") .HasValue("Manganato") .HasValue("Mangasee") .HasValue("Mangaworld") .HasValue("ManhuaPlus") .HasValue("Weebcentral") .HasValue("MangaDex"); modelBuilder.Entity() .HasDiscriminator(l => l.LibraryType) .HasValue(LibraryType.Komga) .HasValue(LibraryType.Kavita); modelBuilder.Entity() .HasDiscriminator(n => n.NotificationConnectorType) .HasValue(NotificationConnectorType.Gotify) .HasValue(NotificationConnectorType.Ntfy) .HasValue(NotificationConnectorType.LunaSea); modelBuilder.Entity() .HasDiscriminator(j => j.JobType) .HasValue(JobType.MoveFileOrFolderJob) .HasValue(JobType.DownloadNewChaptersJob) .HasValue(JobType.DownloadSingleChapterJob) .HasValue(JobType.UpdateMetaDataJob); modelBuilder.Entity() .HasOne(m => m.MangaConnector); modelBuilder.Entity() .Navigation(m => m.MangaConnector) .AutoInclude(); modelBuilder.Entity() .HasMany(m => m.Authors) .WithMany(); modelBuilder.Entity() .Navigation(m => m.Authors) .AutoInclude(); modelBuilder.Entity() .HasMany(m => m.Tags) .WithMany(); modelBuilder.Entity() .Navigation(m => m.Tags) .AutoInclude(); modelBuilder.Entity() .HasMany(m => m.Links) .WithOne(); modelBuilder.Entity() .Navigation(m => m.Links) .AutoInclude(); modelBuilder.Entity() .HasMany(m => m.AltTitles) .WithOne(); modelBuilder.Entity() .Navigation(m => m.AltTitles) .AutoInclude(); modelBuilder.Entity() .HasOne(c => c.ParentManga) .WithMany(); modelBuilder.Entity() .Navigation(c => c.ParentManga) .AutoInclude(); } }