diff --git a/api/src/lib.rs b/api/src/lib.rs index 4220fb3..48f86b8 100644 --- a/api/src/lib.rs +++ b/api/src/lib.rs @@ -96,3 +96,8 @@ pub struct CreateRecipeRequest { pub struct CreateRecipeResponse { pub id: i64, } + +#[derive(Serialize, Deserialize, Clone, Debug)] +pub struct ListRecipesResponse { + pub recipes: Vec<(i64, String)>, +} diff --git a/src/routes/mod.rs b/src/routes/mod.rs index 2870971..b0c3780 100644 --- a/src/routes/mod.rs +++ b/src/routes/mod.rs @@ -218,6 +218,8 @@ pub(crate) fn router(api_allowed: Option) -> Router { ) .route( "/household/:house_id/recipe", - post(recipe::create_recipe).layer(mk_service(vec![Method::POST])), + post(recipe::create_recipe) + .get(recipe::list_recipes) + .layer(mk_service(vec![Method::POST, Method::GET])), ) } diff --git a/src/routes/recipe.rs b/src/routes/recipe.rs index f5af673..186ccda 100644 --- a/src/routes/recipe.rs +++ b/src/routes/recipe.rs @@ -1,4 +1,4 @@ -use api::{CreateRecipeRequest, CreateRecipeResponse}; +use api::{CreateRecipeRequest, CreateRecipeResponse, ListRecipesResponse}; use axum::{extract::State, Json}; use sea_orm::{prelude::*, ActiveValue, TransactionTrait}; @@ -61,3 +61,19 @@ pub(super) async fn create_recipe( Ok(CreateRecipeResponse { id }.into()) } + +pub(super) async fn list_recipes( + AuthorizedHousehold(household): AuthorizedHousehold, + State(state): State, +) -> JsonResult { + Ok(ListRecipesResponse { + recipes: household + .find_related(Recipe) + .all(&state.db) + .await? + .into_iter() + .map(|r| (r.id, r.name)) + .collect(), + } + .into()) +}