From 2f6ab006de45047281fbc69e966a51ddb4ed4c95 Mon Sep 17 00:00:00 2001 From: Peter Woolery Date: Fri, 15 May 2026 14:21:51 -0700 Subject: [PATCH] fix: enrich ingredient names in shopping list API Same root cause as meal detail: recipe JSONB stores ingredient_id but not name. Shopping list now looks up names from the Ingredient table before aggregating quantities, so items show "3 cups onion" instead of "Unknown". --- backend/app/api/shopping_list.py | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/backend/app/api/shopping_list.py b/backend/app/api/shopping_list.py index 5856267..d1dc56d 100644 --- a/backend/app/api/shopping_list.py +++ b/backend/app/api/shopping_list.py @@ -71,14 +71,23 @@ def get_shopping_list(db: Session = Depends(get_db)): aggregated = defaultdict(lambda: {"quantity": 0.0, "unit": None, "name": ""}) + # Build ingredient name lookup from IDs + ingredient_names = {} + if all_ingredient_ids: + ingredient_names = {str(i.id): i.name for i in ingredients} + for plan_item in current_plan.items: recipe = db.query(Recipe).filter(Recipe.id == plan_item.recipe_id).first() if recipe and recipe.ingredients: for ing in recipe.ingredients: - name = ing.get('name', 'Unknown') + ing_id = ing.get('ingredient_id') + name = ing.get('name') + if not name and ing_id: + name = ingredient_names.get(str(ing_id)) + if not name: + name = 'Unknown' quantity = ing.get('quantity', 1.0) or 1.0 unit = ing.get('unit') - ing_id = ing.get('ingredient_id') key = name.lower() aggregated[key]["quantity"] += quantity