prevent duplicate ingredients in cache

This commit is contained in:
lenka369
2025-11-18 23:34:12 +01:00
parent 883332c5bd
commit 27c80ed550

View File

@@ -306,19 +306,31 @@ class NutritionPlansProvider with ChangeNotifier {
Future<void> cacheIngredient(Ingredient ingredient, {IngredientDatabase? database}) async { Future<void> cacheIngredient(Ingredient ingredient, {IngredientDatabase? database}) async {
database ??= this.database; database ??= this.database;
ingredients.add(ingredient); if (!ingredients.any((e) => e.id == ingredient.id)) {
ingredients.add(ingredient);
}
final data = ingredient.toJson(); final ingredientDb = await (database.select(
await database database.ingredients,
.into(database.ingredients) )..where((e) => e.id.equals(ingredient.id))).getSingleOrNull();
.insert(
IngredientsCompanion.insert( if (ingredientDb == null) {
id: ingredient.id, final data = ingredient.toJson();
data: jsonEncode(data), try {
lastFetched: DateTime.now(), await database
), .into(database.ingredients)
); .insert(
_logger.finer("Saved ingredient '${ingredient.name}' to db cache"); IngredientsCompanion.insert(
id: ingredient.id,
data: jsonEncode(data),
lastFetched: DateTime.now(),
),
);
_logger.finer("Saved ingredient '${ingredient.name}' to db cache");
} catch (e) {
_logger.finer("Error caching ingredient '${ingredient.name}': $e");
}
}
} }
/// Fetch and return an ingredient /// Fetch and return an ingredient