From ad62c5f31f9b8a6dc3bbb8d35cf5c530dbef9fa1 Mon Sep 17 00:00:00 2001 From: Jeremy Wall Date: Wed, 18 Jan 2023 07:47:25 -0500 Subject: [PATCH] api for meal plan deletion --- kitchen/src/web/mod.rs | 16 +++++++++++++ kitchen/src/web/storage/mod.rs | 44 ++++++++++++++++++++++++++++++++++ 2 files changed, 60 insertions(+) diff --git a/kitchen/src/web/mod.rs b/kitchen/src/web/mod.rs index b4ad46a..7c3b626 100644 --- a/kitchen/src/web/mod.rs +++ b/kitchen/src/web/mod.rs @@ -258,6 +258,22 @@ async fn api_all_plans( } } +async fn api_delete_plan_for_date( + Extension(app_store): Extension>, + session: storage::UserIdFromSession, + Path(date): Path, +) -> api::EmptyResponse { + use storage::{UserId, UserIdFromSession::FoundUserId}; + if let FoundUserId(UserId(id)) = session { + app_store + .delete_meal_plan_for_date(id.as_str(), date) + .await + .into() + } else { + api::EmptyResponse::Unauthorized + } +} + async fn api_save_plan_for_date( Extension(app_store): Extension>, session: storage::UserIdFromSession, diff --git a/kitchen/src/web/storage/mod.rs b/kitchen/src/web/storage/mod.rs index 423c84a..9e35014 100644 --- a/kitchen/src/web/storage/mod.rs +++ b/kitchen/src/web/storage/mod.rs @@ -138,6 +138,12 @@ pub trait APIStore { user_id: S, ) -> Result>>; + async fn delete_meal_plan_for_date + Send>( + &self, + user_id: S, + date: NaiveDate, + ) -> Result<()>; + async fn save_meal_plan + Send>( &self, user_id: S, @@ -615,6 +621,44 @@ impl APIStore for SqliteStore { Ok(Some(result)) } + async fn delete_meal_plan_for_date + Send>( + &self, + user_id: S, + date: NaiveDate, + ) -> Result<()> { + let user_id = user_id.as_ref(); + let mut transaction = self.pool.as_ref().begin().await?; + sqlx::query!( + "delete from plan_recipes where user_id = ? and plan_date = ?", + user_id, + date + ) + .execute(&mut transaction) + .await?; + sqlx::query!( + "delete from filtered_ingredients where user_id = ? and plan_date = ?", + user_id, + date + ) + .execute(&mut transaction) + .await?; + sqlx::query!( + "delete from modified_amts where user_id = ? and plan_date = ?", + user_id, + date + ) + .execute(&mut transaction) + .await?; + sqlx::query!( + "delete from extra_items where user_id = ? and plan_date = ?", + user_id, + date + ) + .execute(&mut transaction) + .await?; + Ok(()) + } + async fn fetch_meal_plan_for_date + Send>( &self, user_id: S,