From 8d5d044e9a842f19bbeb4e9af41063996fd90218 Mon Sep 17 00:00:00 2001 From: Jeremy Wall Date: Tue, 17 Jan 2023 06:39:43 -0500 Subject: [PATCH] Add fetch_all_meal_plans APIStore implmentation --- kitchen/sqlx-data.json | 18 ++++++++++++++ kitchen/src/web/storage/fetch_all_plans.sql | 2 ++ kitchen/src/web/storage/mod.rs | 27 +++++++++++++++++++++ 3 files changed, 47 insertions(+) create mode 100644 kitchen/src/web/storage/fetch_all_plans.sql diff --git a/kitchen/sqlx-data.json b/kitchen/sqlx-data.json index fb5d4bb..e6cecb4 100644 --- a/kitchen/sqlx-data.json +++ b/kitchen/sqlx-data.json @@ -264,6 +264,24 @@ }, "query": "delete from sessions where id = ?" }, + "7f4abc448b16e8b6b2bb74f8e810e245e81b38e1407085a20d28bfddfc06891f": { + "describe": { + "columns": [ + { + "name": "plan_date: NaiveDate", + "ordinal": 0, + "type_info": "Date" + } + ], + "nullable": [ + false + ], + "parameters": { + "Right": 1 + } + }, + "query": "select distinct plan_date as \"plan_date: NaiveDate\" from plan_recipes\nwhere user_id = ?" + }, "83824ea638cb64c524f5c8984ef6ef28dfe781f0abf168abc4ae9a51e6e0ae88": { "describe": { "columns": [], diff --git a/kitchen/src/web/storage/fetch_all_plans.sql b/kitchen/src/web/storage/fetch_all_plans.sql new file mode 100644 index 0000000..f988cb8 --- /dev/null +++ b/kitchen/src/web/storage/fetch_all_plans.sql @@ -0,0 +1,2 @@ +select distinct plan_date as "plan_date: NaiveDate" from plan_recipes +where user_id = ? \ No newline at end of file diff --git a/kitchen/src/web/storage/mod.rs b/kitchen/src/web/storage/mod.rs index 13545ef..7a2218b 100644 --- a/kitchen/src/web/storage/mod.rs +++ b/kitchen/src/web/storage/mod.rs @@ -127,6 +127,11 @@ pub trait APIStore { date: NaiveDate, ) -> Result>>>; + async fn fetch_all_meal_plans + Send>( + &self, + user_id: S, + ) -> Result>>; + async fn save_meal_plan + Send>( &self, user_id: S, @@ -519,6 +524,28 @@ impl APIStore for SqliteStore { Ok(()) } + async fn fetch_all_meal_plans + Send>( + &self, + user_id: S, + ) -> Result>> { + let user_id = user_id.as_ref(); + struct Row { + pub plan_date: NaiveDate, + } + let rows = sqlx::query_file_as!(Row, r#"src/web/storage/fetch_all_plans.sql"#, user_id,) + .fetch_all(self.pool.as_ref()) + .await?; + if rows.is_empty() { + return Ok(None); + } + let mut result = Vec::new(); + for row in rows { + let date: NaiveDate = row.plan_date; + result.push(date); + } + Ok(Some(result)) + } + async fn fetch_meal_plans_since + Send>( &self, user_id: S,