diff --git a/server/src/main/kotlin/suwayomi/tachidesk/graphql/dataLoaders/CategoryDataLoader.kt b/server/src/main/kotlin/suwayomi/tachidesk/graphql/dataLoaders/CategoryDataLoader.kt index 833cb51e..a4c5df83 100644 --- a/server/src/main/kotlin/suwayomi/tachidesk/graphql/dataLoaders/CategoryDataLoader.kt +++ b/server/src/main/kotlin/suwayomi/tachidesk/graphql/dataLoaders/CategoryDataLoader.kt @@ -21,14 +21,16 @@ import suwayomi.tachidesk.manga.model.table.CategoryMangaTable import suwayomi.tachidesk.manga.model.table.CategoryTable import suwayomi.tachidesk.server.JavalinSetup.future -class CategoryDataLoader : KotlinDataLoader { +class CategoryDataLoader : KotlinDataLoader { override val dataLoaderName = "CategoryDataLoader" - override fun getDataLoader(): DataLoader = DataLoaderFactory.newDataLoader { ids -> + override fun getDataLoader(): DataLoader = DataLoaderFactory.newDataLoader { ids -> future { transaction { addLogger(Slf4jSqlDebugLogger) - CategoryTable.select { CategoryTable.id inList ids } + val categories = CategoryTable.select { CategoryTable.id inList ids } .map { CategoryType(it) } + .associateBy { it.id } + ids.map { categories[it] } } } } 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 79a8a784..89a2af0a 100644 --- a/server/src/main/kotlin/suwayomi/tachidesk/graphql/dataLoaders/ChapterDataLoader.kt +++ b/server/src/main/kotlin/suwayomi/tachidesk/graphql/dataLoaders/ChapterDataLoader.kt @@ -20,14 +20,16 @@ import suwayomi.tachidesk.graphql.types.ChapterType import suwayomi.tachidesk.manga.model.table.ChapterTable import suwayomi.tachidesk.server.JavalinSetup.future -class ChapterDataLoader : KotlinDataLoader { +class ChapterDataLoader : KotlinDataLoader { override val dataLoaderName = "ChapterDataLoader" - override fun getDataLoader(): DataLoader = DataLoaderFactory.newDataLoader { ids -> + override fun getDataLoader(): DataLoader = DataLoaderFactory.newDataLoader { ids -> future { transaction { addLogger(Slf4jSqlDebugLogger) - ChapterTable.select { ChapterTable.id inList ids } + val chapters = ChapterTable.select { ChapterTable.id inList ids } .map { ChapterType(it) } + .associateBy { it.id } + ids.map { chapters[it] } } } } diff --git a/server/src/main/kotlin/suwayomi/tachidesk/graphql/dataLoaders/ExtensionDataLoader.kt b/server/src/main/kotlin/suwayomi/tachidesk/graphql/dataLoaders/ExtensionDataLoader.kt index 034ebde9..7e8c0763 100644 --- a/server/src/main/kotlin/suwayomi/tachidesk/graphql/dataLoaders/ExtensionDataLoader.kt +++ b/server/src/main/kotlin/suwayomi/tachidesk/graphql/dataLoaders/ExtensionDataLoader.kt @@ -19,28 +19,44 @@ import suwayomi.tachidesk.manga.model.table.ExtensionTable import suwayomi.tachidesk.manga.model.table.SourceTable import suwayomi.tachidesk.server.JavalinSetup.future -class ExtensionDataLoader : KotlinDataLoader { +class ExtensionDataLoader : KotlinDataLoader { override val dataLoaderName = "ExtensionDataLoader" - override fun getDataLoader(): DataLoader = DataLoaderFactory.newDataLoader { ids -> + override fun getDataLoader(): DataLoader = DataLoaderFactory.newDataLoader { ids -> future { transaction { addLogger(Slf4jSqlDebugLogger) - ExtensionTable.select { ExtensionTable.pkgName inList ids } + val extensions = ExtensionTable.select { ExtensionTable.pkgName inList ids } .map { ExtensionType(it) } + .associateBy { it.pkgName } + ids.map { extensions[it] } } } } } -class ExtensionForSourceDataLoader : KotlinDataLoader { +class ExtensionForSourceDataLoader : KotlinDataLoader { override val dataLoaderName = "ExtensionForSourceDataLoader" - override fun getDataLoader(): DataLoader = DataLoaderFactory.newDataLoader { ids -> + override fun getDataLoader(): DataLoader = DataLoaderFactory.newDataLoader { ids -> future { transaction { addLogger(Slf4jSqlDebugLogger) - ExtensionTable.innerJoin(SourceTable) + val extensions = ExtensionTable.innerJoin(SourceTable) .select { SourceTable.id inList ids } - .map { ExtensionType(it) } + .toList() + .map { Triple(it[SourceTable.id].value, it[ExtensionTable.pkgName], it) } + .let { triples -> + val sources = buildMap { + triples.forEach { + if (!containsKey(it.second)) { + put(it.second, ExtensionType(it.third)) + } + } + } + triples.associate { + it.first to sources[it.second] + } + } + ids.map { extensions[it] } } } } diff --git a/server/src/main/kotlin/suwayomi/tachidesk/graphql/dataLoaders/MangaDataLoader.kt b/server/src/main/kotlin/suwayomi/tachidesk/graphql/dataLoaders/MangaDataLoader.kt index 3bd75c19..8788739d 100644 --- a/server/src/main/kotlin/suwayomi/tachidesk/graphql/dataLoaders/MangaDataLoader.kt +++ b/server/src/main/kotlin/suwayomi/tachidesk/graphql/dataLoaders/MangaDataLoader.kt @@ -21,14 +21,16 @@ import suwayomi.tachidesk.manga.model.table.CategoryMangaTable import suwayomi.tachidesk.manga.model.table.MangaTable import suwayomi.tachidesk.server.JavalinSetup.future -class MangaDataLoader : KotlinDataLoader { +class MangaDataLoader : KotlinDataLoader { override val dataLoaderName = "MangaDataLoader" - override fun getDataLoader(): DataLoader = DataLoaderFactory.newDataLoader { ids -> + override fun getDataLoader(): DataLoader = DataLoaderFactory.newDataLoader { ids -> future { transaction { addLogger(Slf4jSqlDebugLogger) - MangaTable.select { MangaTable.id inList ids } + val manga = MangaTable.select { MangaTable.id inList ids } .map { MangaType(it) } + .associateBy { it.id } + ids.map { manga[it] } } } } diff --git a/server/src/main/kotlin/suwayomi/tachidesk/graphql/dataLoaders/SourceDataLoader.kt b/server/src/main/kotlin/suwayomi/tachidesk/graphql/dataLoaders/SourceDataLoader.kt index 469e55b9..18eacbcf 100644 --- a/server/src/main/kotlin/suwayomi/tachidesk/graphql/dataLoaders/SourceDataLoader.kt +++ b/server/src/main/kotlin/suwayomi/tachidesk/graphql/dataLoaders/SourceDataLoader.kt @@ -28,9 +28,10 @@ class SourceDataLoader : KotlinDataLoader { future { transaction { addLogger(Slf4jSqlDebugLogger) - SourceTable.select { SourceTable.id inList ids }.map { - SourceType(it) - } + val source = SourceTable.select { SourceTable.id inList ids } + .mapNotNull { SourceType(it) } + .associateBy { it.id } + ids.map { source[it] } } } } diff --git a/server/src/main/kotlin/suwayomi/tachidesk/graphql/queries/CategoryQuery.kt b/server/src/main/kotlin/suwayomi/tachidesk/graphql/queries/CategoryQuery.kt index c85f0fa0..7e47dc20 100644 --- a/server/src/main/kotlin/suwayomi/tachidesk/graphql/queries/CategoryQuery.kt +++ b/server/src/main/kotlin/suwayomi/tachidesk/graphql/queries/CategoryQuery.kt @@ -33,8 +33,8 @@ import java.util.concurrent.CompletableFuture * - Delete meta */ class CategoryQuery { - fun category(dataFetchingEnvironment: DataFetchingEnvironment, id: Int): CompletableFuture { - return dataFetchingEnvironment.getValueFromDataLoader("CategoryDataLoader", id) + fun category(dataFetchingEnvironment: DataFetchingEnvironment, id: Int): CompletableFuture { + return dataFetchingEnvironment.getValueFromDataLoader("CategoryDataLoader", id) } enum class CategorySort { diff --git a/server/src/main/kotlin/suwayomi/tachidesk/graphql/queries/ChapterQuery.kt b/server/src/main/kotlin/suwayomi/tachidesk/graphql/queries/ChapterQuery.kt index 8ef60158..1363d99c 100644 --- a/server/src/main/kotlin/suwayomi/tachidesk/graphql/queries/ChapterQuery.kt +++ b/server/src/main/kotlin/suwayomi/tachidesk/graphql/queries/ChapterQuery.kt @@ -33,8 +33,8 @@ import java.util.concurrent.CompletableFuture * - Delete download */ class ChapterQuery { - fun chapter(dataFetchingEnvironment: DataFetchingEnvironment, id: Int): CompletableFuture { - return dataFetchingEnvironment.getValueFromDataLoader("ChapterDataLoader", id) + fun chapter(dataFetchingEnvironment: DataFetchingEnvironment, id: Int): CompletableFuture { + return dataFetchingEnvironment.getValueFromDataLoader("ChapterDataLoader", id) } enum class ChapterSort { diff --git a/server/src/main/kotlin/suwayomi/tachidesk/graphql/queries/ExtensionQuery.kt b/server/src/main/kotlin/suwayomi/tachidesk/graphql/queries/ExtensionQuery.kt index 3dfdd202..ff1b0f8a 100644 --- a/server/src/main/kotlin/suwayomi/tachidesk/graphql/queries/ExtensionQuery.kt +++ b/server/src/main/kotlin/suwayomi/tachidesk/graphql/queries/ExtensionQuery.kt @@ -35,8 +35,8 @@ import java.util.concurrent.CompletableFuture * - Check for updates (global mutation?) */ class ExtensionQuery { - fun extension(dataFetchingEnvironment: DataFetchingEnvironment, pkgName: String): CompletableFuture { - return dataFetchingEnvironment.getValueFromDataLoader("ExtensionDataLoader", pkgName) + fun extension(dataFetchingEnvironment: DataFetchingEnvironment, pkgName: String): CompletableFuture { + return dataFetchingEnvironment.getValueFromDataLoader("ExtensionDataLoader", pkgName) } fun extensions(): ExtensionNodeList { diff --git a/server/src/main/kotlin/suwayomi/tachidesk/graphql/queries/MangaQuery.kt b/server/src/main/kotlin/suwayomi/tachidesk/graphql/queries/MangaQuery.kt index ea691d5d..b9158a74 100644 --- a/server/src/main/kotlin/suwayomi/tachidesk/graphql/queries/MangaQuery.kt +++ b/server/src/main/kotlin/suwayomi/tachidesk/graphql/queries/MangaQuery.kt @@ -39,8 +39,8 @@ import java.util.concurrent.CompletableFuture * - Delete meta */ class MangaQuery { - fun manga(dataFetchingEnvironment: DataFetchingEnvironment, id: Int): CompletableFuture { - return dataFetchingEnvironment.getValueFromDataLoader("MangaDataLoader", id) + fun manga(dataFetchingEnvironment: DataFetchingEnvironment, id: Int): CompletableFuture { + return dataFetchingEnvironment.getValueFromDataLoader("MangaDataLoader", id) } enum class MangaSort {