From 946f34cb37fd19202df41e375ff5873ae70e8d19 Mon Sep 17 00:00:00 2001 From: Kirill Kamakin Date: Sun, 13 Nov 2022 13:17:55 +0100 Subject: [PATCH] Insert all recipes in one query --- .../mealient/data/recipes/db/RecipeStorageImpl.kt | 14 ++++---------- .../kirmanak/mealient/database/recipe/RecipeDao.kt | 2 +- 2 files changed, 5 insertions(+), 11 deletions(-) diff --git a/app/src/main/java/gq/kirmanak/mealient/data/recipes/db/RecipeStorageImpl.kt b/app/src/main/java/gq/kirmanak/mealient/data/recipes/db/RecipeStorageImpl.kt index 796dd41..2b25783 100644 --- a/app/src/main/java/gq/kirmanak/mealient/data/recipes/db/RecipeStorageImpl.kt +++ b/app/src/main/java/gq/kirmanak/mealient/data/recipes/db/RecipeStorageImpl.kt @@ -23,23 +23,17 @@ class RecipeStorageImpl @Inject constructor( ) : RecipeStorage { private val recipeDao: RecipeDao by lazy { db.recipeDao() } - override suspend fun saveRecipes( - recipes: List - ) = db.withTransaction { + override suspend fun saveRecipes(recipes: List) { logger.v { "saveRecipes() called with $recipes" } - - for (recipe in recipes) { - val recipeSummaryEntity = recipe.toRecipeSummaryEntity() - recipeDao.insertRecipe(recipeSummaryEntity) - } + val entities = recipes.map { it.toRecipeSummaryEntity() } + logger.v { "saveRecipes: entities = $entities" } + db.withTransaction { recipeDao.insertRecipes(entities) } } - override fun queryRecipes(query: String?): PagingSource { logger.v { "queryRecipes() called with: query = $query" } return if (query == null) recipeDao.queryRecipesByPages() else recipeDao.queryRecipesByPages(query) - } override suspend fun refreshAll(recipes: List) { diff --git a/database/src/main/kotlin/gq/kirmanak/mealient/database/recipe/RecipeDao.kt b/database/src/main/kotlin/gq/kirmanak/mealient/database/recipe/RecipeDao.kt index fe44c45..eaea4e9 100644 --- a/database/src/main/kotlin/gq/kirmanak/mealient/database/recipe/RecipeDao.kt +++ b/database/src/main/kotlin/gq/kirmanak/mealient/database/recipe/RecipeDao.kt @@ -13,7 +13,7 @@ interface RecipeDao { fun queryRecipesByPages(query: String): PagingSource @Insert(onConflict = OnConflictStrategy.REPLACE) - suspend fun insertRecipe(recipeSummaryEntity: RecipeSummaryEntity) + suspend fun insertRecipes(recipeSummaryEntity: Iterable) @Query("DELETE FROM recipe_summaries") suspend fun removeAllRecipes()