From a9efca86870cec6d74f58535e2e007eb6c8831c2 Mon Sep 17 00:00:00 2001 From: schroda <50052685+schroda@users.noreply.github.com> Date: Sun, 31 Mar 2024 19:20:19 +0200 Subject: [PATCH] Add chapter bookmark count field to MangaType (#912) --- .../graphql/dataLoaders/ChapterDataLoader.kt | 20 +++++++++++++++++++ .../TachideskDataLoaderRegistryFactory.kt | 2 ++ .../tachidesk/graphql/types/MangaType.kt | 5 +++++ 3 files changed, 27 insertions(+) diff --git a/server/src/main/kotlin/suwayomi/tachidesk/graphql/dataLoaders/ChapterDataLoader.kt b/server/src/main/kotlin/suwayomi/tachidesk/graphql/dataLoaders/ChapterDataLoader.kt index 52a5d852..16482521 100644 --- a/server/src/main/kotlin/suwayomi/tachidesk/graphql/dataLoaders/ChapterDataLoader.kt +++ b/server/src/main/kotlin/suwayomi/tachidesk/graphql/dataLoaders/ChapterDataLoader.kt @@ -99,6 +99,26 @@ class UnreadChapterCountForMangaDataLoader : KotlinDataLoader { } } +class BookmarkedChapterCountForMangaDataLoader : KotlinDataLoader { + override val dataLoaderName = "BookmarkedChapterCountForMangaDataLoader" + + override fun getDataLoader(): DataLoader = + DataLoaderFactory.newDataLoader { ids -> + future { + transaction { + addLogger(Slf4jSqlDebugLogger) + val bookmarkedChapterCountByMangaId = + ChapterTable + .slice(ChapterTable.manga, ChapterTable.isBookmarked.count()) + .select { (ChapterTable.manga inList ids) and (ChapterTable.isBookmarked eq true) } + .groupBy(ChapterTable.manga) + .associate { it[ChapterTable.manga].value to it[ChapterTable.isBookmarked.count()] } + ids.map { bookmarkedChapterCountByMangaId[it]?.toInt() ?: 0 } + } + } + } +} + class LastReadChapterForMangaDataLoader : KotlinDataLoader { override val dataLoaderName = "LastReadChapterForMangaDataLoader" diff --git a/server/src/main/kotlin/suwayomi/tachidesk/graphql/server/TachideskDataLoaderRegistryFactory.kt b/server/src/main/kotlin/suwayomi/tachidesk/graphql/server/TachideskDataLoaderRegistryFactory.kt index 4d4eac3c..46c1aa85 100644 --- a/server/src/main/kotlin/suwayomi/tachidesk/graphql/server/TachideskDataLoaderRegistryFactory.kt +++ b/server/src/main/kotlin/suwayomi/tachidesk/graphql/server/TachideskDataLoaderRegistryFactory.kt @@ -8,6 +8,7 @@ package suwayomi.tachidesk.graphql.server import com.expediagroup.graphql.dataloader.KotlinDataLoaderRegistryFactory +import suwayomi.tachidesk.graphql.dataLoaders.BookmarkedChapterCountForMangaDataLoader import suwayomi.tachidesk.graphql.dataLoaders.CategoriesForMangaDataLoader import suwayomi.tachidesk.graphql.dataLoaders.CategoryDataLoader import suwayomi.tachidesk.graphql.dataLoaders.CategoryForIdsDataLoader @@ -51,6 +52,7 @@ class TachideskDataLoaderRegistryFactory { ChaptersForMangaDataLoader(), DownloadedChapterCountForMangaDataLoader(), UnreadChapterCountForMangaDataLoader(), + BookmarkedChapterCountForMangaDataLoader(), LastReadChapterForMangaDataLoader(), LatestReadChapterForMangaDataLoader(), LatestFetchedChapterForMangaDataLoader(), diff --git a/server/src/main/kotlin/suwayomi/tachidesk/graphql/types/MangaType.kt b/server/src/main/kotlin/suwayomi/tachidesk/graphql/types/MangaType.kt index bc1c149b..16f25815 100644 --- a/server/src/main/kotlin/suwayomi/tachidesk/graphql/types/MangaType.kt +++ b/server/src/main/kotlin/suwayomi/tachidesk/graphql/types/MangaType.kt @@ -67,6 +67,7 @@ class MangaType( dataFetchingEnvironment.getDataLoader("DownloadedChapterCountForMangaDataLoader").clear(mangaId) dataFetchingEnvironment.getDataLoader("UnreadChapterCountForMangaDataLoader").clear(mangaId) + dataFetchingEnvironment.getDataLoader("BookmarkedChapterCountForMangaDataLoader").clear(mangaId) dataFetchingEnvironment.getDataLoader("LastReadChapterForMangaDataLoader").clear(mangaId) dataFetchingEnvironment.getDataLoader("LatestReadChapterForMangaDataLoader").clear(mangaId) dataFetchingEnvironment.getDataLoader("LatestFetchedChapterForMangaDataLoader").clear(mangaId) @@ -130,6 +131,10 @@ class MangaType( return dataFetchingEnvironment.getValueFromDataLoader("UnreadChapterCountForMangaDataLoader", id) } + fun bookmarkCount(dataFetchingEnvironment: DataFetchingEnvironment): CompletableFuture { + return dataFetchingEnvironment.getValueFromDataLoader("BookmarkedChapterCountForMangaDataLoader", id) + } + fun lastReadChapter(dataFetchingEnvironment: DataFetchingEnvironment): CompletableFuture { return dataFetchingEnvironment.getValueFromDataLoader("LastReadChapterForMangaDataLoader", id) }