using API.Schema.ActionsContext.Actions; using API.Schema.ActionsContext.Actions.Generic; using Microsoft.EntityFrameworkCore; namespace API.Schema.ActionsContext; public class ActionsContext(DbContextOptions options) : TrangaBaseContext(options) { public DbSet Actions { get; set; } protected override void OnModelCreating(ModelBuilder modelBuilder) { modelBuilder.Entity() .HasDiscriminator(a => a.Action) .HasValue(ActionsEnum.ChapterDownloaded) .HasValue(ActionsEnum.CoverDownloaded) .HasValue(ActionsEnum.ChaptersRetrieved) .HasValue(ActionsEnum.MetadataUpdated) .HasValue(ActionsEnum.DataMoved) .HasValue(ActionsEnum.LibraryMoved) .HasValue(ActionsEnum.Startup); modelBuilder.Entity().Property(a => a.MangaId).HasColumnName("MangaId"); modelBuilder.Entity().Property(a => a.ChapterId).HasColumnName("ChapterId"); modelBuilder.Entity().Property(a => a.MangaId).HasColumnName("MangaId"); modelBuilder.Entity().Property(a => a.MangaId).HasColumnName("MangaId"); modelBuilder.Entity().Property(a => a.MangaId).HasColumnName("MangaId"); modelBuilder.Entity().Property(a => a.MangaId).HasColumnName("MangaId"); } public IQueryable FilterManga(string MangaId) => this.Actions .FromSqlInterpolated($"""SELECT * FROM public."Actions" WHERE "MangaId" = {MangaId}"""); public IQueryable FilterChapter(string ChapterId) => this.Actions .FromSqlInterpolated($"""SELECT * FROM public."Actions" WHERE "ChapterId" = {ChapterId}"""); public IQueryable FilterMangaAndChapter(string MangaId, string ChapterId) => this.Actions .FromSqlInterpolated($"""SELECT * FROM public."Actions" WHERE "MangaId" = {MangaId} AND "ChapterId" = {ChapterId}"""); public IQueryable Filter(string? MangaId, string? ChapterId) { if (MangaId is { } mangaId && ChapterId is { } chapterId) return FilterMangaAndChapter(mangaId, chapterId); if (MangaId is { } mangaId2) return FilterManga(mangaId2); if (ChapterId is { } chapterId2) return FilterChapter(chapterId2); return this.Actions.AsQueryable(); } }