Fixed a bug with favourites
This commit is contained in:
@@ -9,22 +9,21 @@ internal interface RecipeDao {
|
||||
@Query("SELECT * FROM recipe_summaries ORDER BY recipe_summaries_date_added DESC")
|
||||
fun queryRecipesByPages(): PagingSource<Int, RecipeSummaryEntity>
|
||||
|
||||
@Query("SELECT * FROM recipe_summaries WHERE recipe_summaries_name LIKE '%' || :query || '%' ORDER BY recipe_summaries_date_added DESC")
|
||||
@Query(
|
||||
"SELECT * FROM recipe_summaries WHERE recipe_summaries_name LIKE '%' || :query || '%' ORDER BY recipe_summaries_date_added DESC"
|
||||
)
|
||||
fun queryRecipesByPages(query: String): PagingSource<Int, RecipeSummaryEntity>
|
||||
|
||||
@Transaction
|
||||
@Insert(onConflict = OnConflictStrategy.REPLACE)
|
||||
suspend fun insertRecipeSummaries(recipeSummaryEntity: Iterable<RecipeSummaryEntity>)
|
||||
|
||||
@Transaction
|
||||
@Query("DELETE FROM recipe_summaries")
|
||||
suspend fun removeAllRecipes()
|
||||
@Transaction @Query("DELETE FROM recipe_summaries") suspend fun removeAllRecipes()
|
||||
|
||||
@Query("SELECT * FROM recipe_summaries ORDER BY recipe_summaries_date_added DESC")
|
||||
suspend fun queryAllRecipes(): List<RecipeSummaryEntity>
|
||||
|
||||
@Insert(onConflict = OnConflictStrategy.REPLACE)
|
||||
suspend fun insertRecipe(recipe: RecipeEntity)
|
||||
@Insert(onConflict = OnConflictStrategy.REPLACE) suspend fun insertRecipe(recipe: RecipeEntity)
|
||||
|
||||
@Insert(onConflict = OnConflictStrategy.REPLACE)
|
||||
suspend fun insertRecipes(recipe: List<RecipeEntity>)
|
||||
@@ -36,19 +35,25 @@ internal interface RecipeDao {
|
||||
suspend fun insertRecipeIngredients(ingredients: List<RecipeIngredientEntity>)
|
||||
|
||||
@Insert(onConflict = OnConflictStrategy.REPLACE)
|
||||
suspend fun insertIngredientToInstructionEntities(entities: List<RecipeIngredientToInstructionEntity>)
|
||||
suspend fun insertIngredientToInstructionEntities(
|
||||
entities: List<RecipeIngredientToInstructionEntity>
|
||||
)
|
||||
|
||||
@Transaction
|
||||
@SuppressWarnings(RoomWarnings.CURSOR_MISMATCH) // The lint is wrong, the columns are actually used
|
||||
@SuppressWarnings(
|
||||
RoomWarnings.CURSOR_MISMATCH
|
||||
) // The lint is wrong, the columns are actually used
|
||||
@Query(
|
||||
"SELECT * FROM recipe " +
|
||||
"JOIN recipe_summaries USING(recipe_id) " +
|
||||
"LEFT JOIN recipe_ingredient USING(recipe_id) " +
|
||||
"LEFT JOIN recipe_instruction USING(recipe_id) " +
|
||||
"LEFT JOIN recipe_ingredient_to_instruction USING(recipe_id) " +
|
||||
"WHERE recipe.recipe_id = :recipeId"
|
||||
"SELECT * FROM recipe " +
|
||||
"JOIN recipe_summaries USING(recipe_id) " +
|
||||
"LEFT JOIN recipe_ingredient USING(recipe_id) " +
|
||||
"LEFT JOIN recipe_instruction USING(recipe_id) " +
|
||||
"LEFT JOIN recipe_ingredient_to_instruction USING(recipe_id) " +
|
||||
"WHERE recipe.recipe_id = :recipeId"
|
||||
)
|
||||
suspend fun queryFullRecipeInfo(recipeId: String): RecipeWithSummaryAndIngredientsAndInstructions?
|
||||
suspend fun queryFullRecipeInfo(
|
||||
recipeId: String
|
||||
): RecipeWithSummaryAndIngredientsAndInstructions?
|
||||
|
||||
@Query("DELETE FROM recipe_ingredient WHERE recipe_id IN (:recipeIds)")
|
||||
suspend fun deleteRecipeIngredients(vararg recipeIds: String)
|
||||
@@ -59,12 +64,18 @@ internal interface RecipeDao {
|
||||
@Query("DELETE FROM recipe_ingredient_to_instruction WHERE recipe_id IN (:recipeIds)")
|
||||
suspend fun deleteRecipeIngredientToInstructions(vararg recipeIds: String)
|
||||
|
||||
@Query("UPDATE recipe_summaries SET recipe_summaries_is_favorite = 1 WHERE recipe_summaries_slug IN (:favorites)")
|
||||
@Query(
|
||||
"UPDATE recipe_summaries SET recipe_summaries_is_favorite = 1 WHERE recipe_summaries_slug IN (:favorites)"
|
||||
)
|
||||
suspend fun setFavorite(favorites: List<String>)
|
||||
|
||||
@Query("UPDATE recipe_summaries SET recipe_summaries_is_favorite = 0 WHERE recipe_summaries_slug NOT IN (:favorites)")
|
||||
@Query("UPDATE recipe_summaries SET recipe_summaries_is_favorite = 0")
|
||||
suspend fun setAllNonFavorite()
|
||||
|
||||
@Query(
|
||||
"UPDATE recipe_summaries SET recipe_summaries_is_favorite = 0 WHERE recipe_summaries_slug NOT IN (:favorites)"
|
||||
)
|
||||
suspend fun setNonFavorite(favorites: List<String>)
|
||||
|
||||
@Delete
|
||||
suspend fun deleteRecipe(entity: RecipeSummaryEntity)
|
||||
}
|
||||
@Delete suspend fun deleteRecipe(entity: RecipeSummaryEntity)
|
||||
}
|
||||
|
||||
@@ -12,10 +12,12 @@ import com.atridad.mealient.database.recipe.entity.RecipeWithSummaryAndIngredien
|
||||
import com.atridad.mealient.logging.Logger
|
||||
import javax.inject.Inject
|
||||
|
||||
internal class RecipeStorageImpl @Inject constructor(
|
||||
private val db: AppDb,
|
||||
private val logger: Logger,
|
||||
private val recipeDao: RecipeDao,
|
||||
internal class RecipeStorageImpl
|
||||
@Inject
|
||||
constructor(
|
||||
private val db: AppDb,
|
||||
private val logger: Logger,
|
||||
private val recipeDao: RecipeDao,
|
||||
) : RecipeStorage {
|
||||
|
||||
override suspend fun saveRecipes(recipes: List<RecipeSummaryEntity>) {
|
||||
@@ -43,12 +45,14 @@ internal class RecipeStorageImpl @Inject constructor(
|
||||
}
|
||||
|
||||
override suspend fun saveRecipeInfo(
|
||||
recipe: RecipeEntity,
|
||||
ingredients: List<RecipeIngredientEntity>,
|
||||
instructions: List<RecipeInstructionEntity>,
|
||||
ingredientToInstruction: List<RecipeIngredientToInstructionEntity>,
|
||||
recipe: RecipeEntity,
|
||||
ingredients: List<RecipeIngredientEntity>,
|
||||
instructions: List<RecipeInstructionEntity>,
|
||||
ingredientToInstruction: List<RecipeIngredientToInstructionEntity>,
|
||||
) {
|
||||
logger.v { "saveRecipeInfo() called with: recipe = $recipe, ingredients = $ingredients, instructions = $instructions, ingredientToInstructions = $ingredientToInstruction" }
|
||||
logger.v {
|
||||
"saveRecipeInfo() called with: recipe = $recipe, ingredients = $ingredients, instructions = $instructions, ingredientToInstructions = $ingredientToInstruction"
|
||||
}
|
||||
db.withTransaction {
|
||||
recipeDao.insertRecipe(recipe)
|
||||
|
||||
@@ -63,7 +67,9 @@ internal class RecipeStorageImpl @Inject constructor(
|
||||
}
|
||||
}
|
||||
|
||||
override suspend fun queryRecipeInfo(recipeId: String): RecipeWithSummaryAndIngredientsAndInstructions? {
|
||||
override suspend fun queryRecipeInfo(
|
||||
recipeId: String
|
||||
): RecipeWithSummaryAndIngredientsAndInstructions? {
|
||||
logger.v { "queryRecipeInfo() called with: recipeId = $recipeId" }
|
||||
val fullRecipeInfo = recipeDao.queryFullRecipeInfo(recipeId)
|
||||
logger.v { "queryRecipeInfo() returned: $fullRecipeInfo" }
|
||||
@@ -73,8 +79,12 @@ internal class RecipeStorageImpl @Inject constructor(
|
||||
override suspend fun updateFavoriteRecipes(favorites: List<String>) {
|
||||
logger.v { "updateFavoriteRecipes() called with: favorites = $favorites" }
|
||||
db.withTransaction {
|
||||
recipeDao.setFavorite(favorites)
|
||||
recipeDao.setNonFavorite(favorites)
|
||||
if (favorites.isNotEmpty()) {
|
||||
recipeDao.setFavorite(favorites)
|
||||
recipeDao.setNonFavorite(favorites)
|
||||
} else {
|
||||
recipeDao.setAllNonFavorite()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -82,4 +92,4 @@ internal class RecipeStorageImpl @Inject constructor(
|
||||
logger.v { "deleteRecipeBySlug() called with: entity = $entity" }
|
||||
recipeDao.deleteRecipe(entity)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user