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 Mangas { get; set; } public DbSet LocalLibraries { get; set; } public DbSet Chapters { get; set; } public DbSet Authors { get; set; } public DbSet Links { 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("Global") .HasValue("AsuraToon") .HasValue("Bato") .HasValue("MangaHere") .HasValue("MangaKatana") .HasValue("Mangaworld") .HasValue("ManhuaPlus") .HasValue("Weebcentral") .HasValue("Manganato") .HasValue("MangaDex"); modelBuilder.Entity() .HasDiscriminator(l => l.LibraryType) .HasValue(LibraryType.Komga) .HasValue(LibraryType.Kavita); modelBuilder.Entity() .HasDiscriminator(j => j.JobType) .HasValue(JobType.MoveFileOrFolderJob) .HasValue(JobType.DownloadAvailableChaptersJob) .HasValue(JobType.DownloadSingleChapterJob) .HasValue(JobType.DownloadMangaCoverJob) .HasValue(JobType.UpdateMetaDataJob) .HasValue(JobType.RetrieveChaptersJob) .HasValue(JobType.UpdateFilesDownloadedJob); modelBuilder.Entity() .HasMany() .WithOne(j => j.ParentJob) .OnDelete(DeleteBehavior.Cascade); modelBuilder.Entity() .HasMany(j => j.DependsOnJobs) .WithMany(); modelBuilder.Entity() .Navigation(umj => umj.Manga) .AutoInclude(); modelBuilder.Entity() .HasOne(m => m.MangaConnector) .WithMany() .HasForeignKey(m => m.MangaConnectorId) .OnDelete(DeleteBehavior.Cascade); modelBuilder.Entity() .Navigation(m => m.MangaConnector) .AutoInclude(); modelBuilder.Entity() .HasOne(m => m.Library) .WithMany() .OnDelete(DeleteBehavior.Restrict); modelBuilder.Entity() .Navigation(m => m.Library) .AutoInclude(); modelBuilder.Entity() .HasMany(m => m.Authors) .WithMany(); modelBuilder.Entity() .Navigation(m => m.Authors) .AutoInclude(); modelBuilder.Entity() .HasMany(m => m.MangaTags) .WithMany(); modelBuilder.Entity() .Navigation(m => m.MangaTags) .AutoInclude(); modelBuilder.Entity() .HasMany(m => m.Links) .WithOne() .OnDelete(DeleteBehavior.Cascade); modelBuilder.Entity() .Navigation(m => m.Links) .AutoInclude(); modelBuilder.Entity() .HasMany(m => m.AltTitles) .WithOne() .OnDelete(DeleteBehavior.Cascade); modelBuilder.Entity() .Navigation(m => m.AltTitles) .AutoInclude(); modelBuilder.Entity() .HasOne(c => c.ParentManga) .WithMany() .HasForeignKey(c => c.ParentMangaId) .OnDelete(DeleteBehavior.Cascade); modelBuilder.Entity() .Navigation(c => c.ParentManga) .AutoInclude(); } }