From 2e0a94e88c847a5ed8dc6ad5fa49715cd631bdfe Mon Sep 17 00:00:00 2001 From: Tyler Hoang Date: Fri, 8 May 2026 01:58:48 -0700 Subject: Initial commit — Commis personal chef app MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit AI-powered local chef tool: pantry tracking, meal logging, rotating weekly menu generation, and grocery list optimization via Ollama (llama3). FastAPI backend, SQLite, vanilla JS frontend. Co-Authored-By: Claude Sonnet 4.6 --- routers/recipes.py | 50 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 50 insertions(+) create mode 100644 routers/recipes.py (limited to 'routers/recipes.py') diff --git a/routers/recipes.py b/routers/recipes.py new file mode 100644 index 0000000..f215062 --- /dev/null +++ b/routers/recipes.py @@ -0,0 +1,50 @@ +from fastapi import APIRouter, Depends, HTTPException, Query, status +from sqlalchemy.orm import Session +from typing import List + +from database import get_db +from models import Recipe +from schemas import RecipeCreate, RecipeRead, RecipeUpdate + +router = APIRouter(prefix="/api/recipes", tags=["recipes"]) + + +@router.get("", response_model=List[RecipeRead]) +def list_recipes(meal_type: str = Query(None), db: Session = Depends(get_db)): + """List all recipes. Optional ?meal_type=dinner.""" + query = db.query(Recipe) + + if meal_type: + query = query.filter(Recipe.meal_type == meal_type) + + return query.all() + + +@router.post("", response_model=RecipeRead, status_code=status.HTTP_201_CREATED) +def create_recipe(recipe: RecipeCreate, db: Session = Depends(get_db)): + """Create a new recipe.""" + db_recipe = Recipe(**recipe.model_dump()) + db.add(db_recipe) + db.commit() + db.refresh(db_recipe) + return db_recipe + + +@router.get("/{id}", response_model=RecipeRead) +def get_recipe(id: int, db: Session = Depends(get_db)): + """Get a single 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") + 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.""" + 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") + + db.delete(recipe) + db.commit() -- cgit v1.3-2-g0d8e