diff --git a/API/Controllers/MangaController.cs b/API/Controllers/MangaController.cs index 106c0b1..509f5c8 100644 --- a/API/Controllers/MangaController.cs +++ b/API/Controllers/MangaController.cs @@ -245,15 +245,20 @@ public class MangaController(MangaContext context) : Controller [ProducesResponseType(Status404NotFound)] public async Task>, NotFound>> GetChapters(string MangaId) { - if (await context.Mangas.Include(m => m.Chapters).ThenInclude(c => c.MangaConnectorIds).FirstOrDefaultAsync(m => m.Key == MangaId, HttpContext.RequestAborted) is not { } manga) + if(await context.Mangas.Include(m => m.Chapters).ThenInclude(c => c.MangaConnectorIds) + .Where(m => m.Key == MangaId) + .Select(m => m.Chapters) + .FirstOrDefaultAsync(HttpContext.RequestAborted) + is not { } dbChapters) return TypedResults.NotFound(nameof(MangaId)); - - List chapters = manga.Chapters.Select(c => + + List chapters = dbChapters.Order().Select(c => { IEnumerable ids = c.MangaConnectorIds.Select(id => new MangaConnectorId(id.Key, id.MangaConnectorName, id.ObjId, id.WebsiteUrl, id.UseForDownload)); return new Chapter(c.Key, c.ParentMangaId, c.VolumeNumber, c.ChapterNumber, c.Title, ids, c.Downloaded); }).ToList(); + return TypedResults.Ok(chapters); } @@ -270,15 +275,20 @@ public class MangaController(MangaContext context) : Controller [ProducesResponseType(Status404NotFound, "text/plain")] public async Task>, NoContent, NotFound>> GetChaptersDownloaded(string MangaId) { - if (await context.Mangas.Include(m => m.Chapters).FirstOrDefaultAsync(m => m.Key == MangaId, HttpContext.RequestAborted) is not { } manga) + if(await context.Mangas.Include(m => m.Chapters).ThenInclude(c => c.MangaConnectorIds) + .Where(m => m.Key == MangaId) + .Select(m => m.Chapters) + .FirstOrDefaultAsync(HttpContext.RequestAborted) + is not { } dbChapters) return TypedResults.NotFound(nameof(MangaId)); - - List chapters = manga.Chapters.Where(c => c.Downloaded).Select(c => + + List chapters = dbChapters.Where(c => c.Downloaded).Order().Select(c => { IEnumerable ids = c.MangaConnectorIds.Select(id => new MangaConnectorId(id.Key, id.MangaConnectorName, id.ObjId, id.WebsiteUrl, id.UseForDownload)); return new Chapter(c.Key, c.ParentMangaId, c.VolumeNumber, c.ChapterNumber, c.Title, ids, c.Downloaded); }).ToList(); + if (chapters.Count == 0) return TypedResults.NoContent(); @@ -298,15 +308,20 @@ public class MangaController(MangaContext context) : Controller [ProducesResponseType(Status404NotFound, "text/plain")] public async Task>, NoContent, NotFound>> GetChaptersNotDownloaded(string MangaId) { - if (await context.Mangas.Include(m => m.Chapters).FirstOrDefaultAsync(m => m.Key == MangaId, HttpContext.RequestAborted) is not { } manga) + if(await context.Mangas.Include(m => m.Chapters).ThenInclude(c => c.MangaConnectorIds) + .Where(m => m.Key == MangaId) + .Select(m => m.Chapters) + .FirstOrDefaultAsync(HttpContext.RequestAborted) + is not { } dbChapters) return TypedResults.NotFound(nameof(MangaId)); - - List chapters = manga.Chapters.Where(c => c.Downloaded == false).Select(c => + + List chapters = dbChapters.Where(c => !c.Downloaded).Order().Select(c => { IEnumerable ids = c.MangaConnectorIds.Select(id => new MangaConnectorId(id.Key, id.MangaConnectorName, id.ObjId, id.WebsiteUrl, id.UseForDownload)); return new Chapter(c.Key, c.ParentMangaId, c.VolumeNumber, c.ChapterNumber, c.Title, ids, c.Downloaded); }).ToList(); + if (chapters.Count == 0) return TypedResults.NoContent();