diff options
Diffstat (limited to 'routers/recipes.py')
| -rw-r--r-- | routers/recipes.py | 50 |
1 files changed, 50 insertions, 0 deletions
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() |
