Order Chapters in response

This commit is contained in:
2025-09-21 18:26:25 +02:00
parent 5c29496fa5
commit df0dd26a8c

View File

@@ -245,15 +245,20 @@ public class MangaController(MangaContext context) : Controller
[ProducesResponseType(Status404NotFound)] [ProducesResponseType(Status404NotFound)]
public async Task<Results<Ok<List<Chapter>>, NotFound<string>>> GetChapters(string MangaId) public async Task<Results<Ok<List<Chapter>>, NotFound<string>>> 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)); return TypedResults.NotFound(nameof(MangaId));
List<Chapter> chapters = manga.Chapters.Select(c => List<Chapter> chapters = dbChapters.Order().Select(c =>
{ {
IEnumerable<MangaConnectorId> ids = c.MangaConnectorIds.Select(id => IEnumerable<MangaConnectorId> ids = c.MangaConnectorIds.Select(id =>
new MangaConnectorId(id.Key, id.MangaConnectorName, id.ObjId, id.WebsiteUrl, id.UseForDownload)); 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); return new Chapter(c.Key, c.ParentMangaId, c.VolumeNumber, c.ChapterNumber, c.Title, ids, c.Downloaded);
}).ToList(); }).ToList();
return TypedResults.Ok(chapters); return TypedResults.Ok(chapters);
} }
@@ -270,15 +275,20 @@ public class MangaController(MangaContext context) : Controller
[ProducesResponseType<string>(Status404NotFound, "text/plain")] [ProducesResponseType<string>(Status404NotFound, "text/plain")]
public async Task<Results<Ok<List<Chapter>>, NoContent, NotFound<string>>> GetChaptersDownloaded(string MangaId) public async Task<Results<Ok<List<Chapter>>, NoContent, NotFound<string>>> 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)); return TypedResults.NotFound(nameof(MangaId));
List<Chapter> chapters = manga.Chapters.Where(c => c.Downloaded).Select(c => List<Chapter> chapters = dbChapters.Where(c => c.Downloaded).Order().Select(c =>
{ {
IEnumerable<MangaConnectorId> ids = c.MangaConnectorIds.Select(id => IEnumerable<MangaConnectorId> ids = c.MangaConnectorIds.Select(id =>
new MangaConnectorId(id.Key, id.MangaConnectorName, id.ObjId, id.WebsiteUrl, id.UseForDownload)); 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); return new Chapter(c.Key, c.ParentMangaId, c.VolumeNumber, c.ChapterNumber, c.Title, ids, c.Downloaded);
}).ToList(); }).ToList();
if (chapters.Count == 0) if (chapters.Count == 0)
return TypedResults.NoContent(); return TypedResults.NoContent();
@@ -298,15 +308,20 @@ public class MangaController(MangaContext context) : Controller
[ProducesResponseType<string>(Status404NotFound, "text/plain")] [ProducesResponseType<string>(Status404NotFound, "text/plain")]
public async Task<Results<Ok<List<Chapter>>, NoContent, NotFound<string>>> GetChaptersNotDownloaded(string MangaId) public async Task<Results<Ok<List<Chapter>>, NoContent, NotFound<string>>> 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)); return TypedResults.NotFound(nameof(MangaId));
List<Chapter> chapters = manga.Chapters.Where(c => c.Downloaded == false).Select(c => List<Chapter> chapters = dbChapters.Where(c => !c.Downloaded).Order().Select(c =>
{ {
IEnumerable<MangaConnectorId> ids = c.MangaConnectorIds.Select(id => IEnumerable<MangaConnectorId> ids = c.MangaConnectorIds.Select(id =>
new MangaConnectorId(id.Key, id.MangaConnectorName, id.ObjId, id.WebsiteUrl, id.UseForDownload)); 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); return new Chapter(c.Key, c.ParentMangaId, c.VolumeNumber, c.ChapterNumber, c.Title, ids, c.Downloaded);
}).ToList(); }).ToList();
if (chapters.Count == 0) if (chapters.Count == 0)
return TypedResults.NoContent(); return TypedResults.NoContent();