summaryrefslogtreecommitdiff
path: root/routers/recipes.py
diff options
context:
space:
mode:
authorTyler Hoang <tyler@tylerhoang.xyz>2026-05-12 03:44:40 -0700
committerTyler Hoang <tyler@tylerhoang.xyz>2026-05-12 03:44:40 -0700
commit9c8332d4442ddd569aacc37f2000fb0afe36111e (patch)
tree1d1f03340249bab2729ce123e302e91e88e7c249 /routers/recipes.py
parent360eadf78fb001e947f3850603152adc413bb3a8 (diff)
Pantry-first AI prompts, recipe editing, and grocery copyHEADmaster
- Rewrite menu generation to build recipes around existing pantry ingredients (max 4-5 extras per recipe); add in_pantry flag per ingredient for downstream accuracy - Flip grocery list logic to ONLY include items not in the pantry, with explicit cross-check rule instead of include-everything default - Strengthen no-menu grocery prompt to handle empty vs. stocked pantry - Rewrite Commis chat system prompt to treat kitchen context as source of truth with explicit response rules per query type - Align replacement/single-recipe prompts to prefer pantry coverage - Update system_prompt default to reflect pantry-first identity - Add PUT /api/recipes/:id endpoint for recipe editing - Add inline edit mode to recipe detail page (name, type, ingredients, instructions, time, servings) - Add Copy button to grocery list (exports markdown checklist) Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Diffstat (limited to 'routers/recipes.py')
-rw-r--r--routers/recipes.py13
1 files changed, 13 insertions, 0 deletions
diff --git a/routers/recipes.py b/routers/recipes.py
index 000f945..d06c335 100644
--- a/routers/recipes.py
+++ b/routers/recipes.py
@@ -49,6 +49,19 @@ def get_recipe(id: int, db: Session = Depends(get_db)):
return recipe
+@router.put("/{id}", response_model=RecipeRead)
+def update_recipe(id: int, update: RecipeUpdate, db: Session = Depends(get_db)):
+ """Update a recipe."""
+ recipe = db.query(Recipe).filter(Recipe.id == id).first()
+ if not recipe:
+ raise HTTPException(status_code=status.HTTP_404_NOT_FOUND, detail="Recipe not found")
+ for field, value in update.model_dump(exclude_unset=True).items():
+ setattr(recipe, field, value)
+ db.commit()
+ db.refresh(recipe)
+ return recipe
+
+
@router.delete("/{id}", status_code=status.HTTP_204_NO_CONTENT)
def delete_recipe(id: int, db: Session = Depends(get_db)):
"""Delete a recipe."""