42 lines
1.2 KiB
Python
42 lines
1.2 KiB
Python
"""Staple library endpoints."""
|
|
from __future__ import annotations
|
|
|
|
from fastapi import APIRouter, HTTPException
|
|
|
|
from app.services.recipe.staple_library import StapleLibrary
|
|
|
|
router = APIRouter()
|
|
_lib = StapleLibrary()
|
|
|
|
|
|
@router.get("/")
|
|
async def list_staples(dietary: str | None = None) -> list[dict]:
|
|
staples = _lib.filter_by_dietary(dietary) if dietary else _lib.list_all()
|
|
return [
|
|
{
|
|
"slug": s.slug,
|
|
"name": s.name,
|
|
"description": s.description,
|
|
"dietary_labels": s.dietary_labels,
|
|
"yield_formats": list(s.yield_formats.keys()),
|
|
}
|
|
for s in staples
|
|
]
|
|
|
|
|
|
@router.get("/{slug}")
|
|
async def get_staple(slug: str) -> dict:
|
|
staple = _lib.get(slug)
|
|
if not staple:
|
|
raise HTTPException(status_code=404, detail=f"Staple '{slug}' not found.")
|
|
return {
|
|
"slug": staple.slug,
|
|
"name": staple.name,
|
|
"description": staple.description,
|
|
"dietary_labels": staple.dietary_labels,
|
|
"base_ingredients": staple.base_ingredients,
|
|
"base_method": staple.base_method,
|
|
"base_time_minutes": staple.base_time_minutes,
|
|
"yield_formats": staple.yield_formats,
|
|
"compatible_styles": staple.compatible_styles,
|
|
}
|