Merge pull request 'feat: add previous and next chapter IDs to MangaChapterImagesDTO and update retrieval logic' (#10) from feature/chapter-navigation into main

Reviewed-on: #10
This commit is contained in:
rov 2025-11-04 15:30:40 -03:00
commit 17039afc52
3 changed files with 28 additions and 5 deletions

View File

@ -10,11 +10,15 @@ import java.util.List;
public record MangaChapterImagesDTO( public record MangaChapterImagesDTO(
@NotNull Long id, @NotNull Long id,
@NotBlank String mangaTitle, @NotBlank String mangaTitle,
Long previousChapterId,
Long nextChapterId,
@NotNull List<@NotBlank String> chapterImageKeys) { @NotNull List<@NotBlank String> chapterImageKeys) {
public static MangaChapterImagesDTO from(MangaChapter mangaChapter) { public static MangaChapterImagesDTO from(MangaChapter mangaChapter, Long prevId, Long nextId) {
return new MangaChapterImagesDTO( return new MangaChapterImagesDTO(
mangaChapter.getId(), mangaChapter.getId(),
mangaChapter.getTitle(), mangaChapter.getTitle(),
prevId,
nextId,
mangaChapter.getMangaChapterImages().stream() mangaChapter.getMangaChapterImages().stream()
.sorted(Comparator.comparing(MangaChapterImage::getPosition)) .sorted(Comparator.comparing(MangaChapterImage::getPosition))
.map(mangaChapterImage -> mangaChapterImage.getImage().getFileKey()) .map(mangaChapterImage -> mangaChapterImage.getImage().getFileKey())

View File

@ -99,7 +99,26 @@ public class MangaChapterService {
public MangaChapterImagesDTO getMangaChapterImages(Long chapterId) { public MangaChapterImagesDTO getMangaChapterImages(Long chapterId) {
var chapter = getMangaChapterThrowIfNotFound(chapterId); var chapter = getMangaChapterThrowIfNotFound(chapterId);
return MangaChapterImagesDTO.from(chapter); var chapters = chapter.getMangaProvider().getMangaChapters();
Long prevId = null;
Long nextId = null;
// TODO: this doesn't perform well for large datasets
for (var i = 0; i < chapters.size(); i++) {
if (chapters.get(i).getId().equals(chapterId)) {
if (i > 0) {
prevId = chapters.get(i - 1).getId();
}
if (i < chapters.size() - 1) {
nextId = chapters.get(i + 1).getId();
}
break;
}
}
return MangaChapterImagesDTO.from(chapter, prevId, nextId);
} }
public void markAsRead(Long chapterId) { public void markAsRead(Long chapterId) {