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()