From 5cf4a12eae657c5b0fbf57c5fdc42b0a47cc6bb2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kha=C3=AFs=20COLIN?= Date: Sun, 19 Oct 2025 14:25:11 +0200 Subject: [PATCH] put sql queries in separate functions --- foods.db | Bin 8192 -> 8192 bytes src/main.rs | 64 +++++++++++++++++++++++++++++----------------------- 2 files changed, 36 insertions(+), 28 deletions(-) diff --git a/foods.db b/foods.db index 356d2310e22c54756a50fda74d1748ff3beb6725..5a4e2b624231fb261b20378072a690f9d19a5e16 100644 GIT binary patch delta 128 zcmZp0XmFSy&A4=;j5FiXjS0*6#Wr*EZRdT*FU-4{?;-yIz7jrr{tSMz%`yTlyfT7( z>}KGRc4gw^G}JdS;9_SG4Q6EI fnA|C=$*IN3&LHgw;yKAHPo5%g!pJfCq`Wx*AebDx delta 120 zcmZp0XmFSy&DcLt#+k8yW5P0iu?B9w?Y!^!g?TsgJ>);YSHfq{Z^_%RSw^6RcXF7# z5EqjW3p<0jC?g~1<~_3cjN)kw{L-#WoScUGCJN4_+MMhR(vFObjFSuHmARPscQfdL WWhY0;sxS&po+59;$T|6>yg2|$jvL1S diff --git a/src/main.rs b/src/main.rs index 8ae9c21..420b75a 100644 --- a/src/main.rs +++ b/src/main.rs @@ -51,7 +51,7 @@ async fn main() { axum::serve(listener, app).await.unwrap(); } -async fn root(State(conn): State>>) -> Html { +fn get_foods(conn: &Arc>) -> Vec { let conn = conn.lock().unwrap(); let mut stmt = conn .prepare( @@ -72,18 +72,33 @@ async fn root(State(conn): State>>) -> Html { .unwrap() .collect::>() .unwrap(); + foods +} + +fn get_sum(conn: &Arc>) -> i32 { + let conn = conn.lock().unwrap(); let mut stmt = conn .prepare("SELECT SUM(kc_per_serving * actual_servings) as kc FROM food") .unwrap(); let sum = stmt.query_one((), |row| row.get(0)).unwrap(); + sum +} + +async fn root(State(conn): State>>) -> Html { + let foods = get_foods(&conn); + let sum = get_sum(&conn); let index = IndexTemplate { foods, sum }; Html(index.render().unwrap()) } -async fn increase(State(conn): State>>, Path(id): Path) -> Html { +fn do_increase(conn: &Arc>, id: i32) { let conn = conn.lock().unwrap(); let mut stmt = conn.prepare("UPDATE food SET actual_servings = (SELECT actual_servings FROM food WHERE id = ?1) + 1 WHERE id = ?1").unwrap(); stmt.execute((id,)).unwrap(); +} + +fn get_food(conn: &Arc>, id: i32) -> Food { + let conn = conn.lock().unwrap(); let mut stmt = conn.prepare("SELECT id, portion, name, kc_per_serving, target_servings, actual_servings FROM food WHERE id = ?1").unwrap(); let food = stmt .query_one((id,), |row| { @@ -97,34 +112,27 @@ async fn increase(State(conn): State>>, Path(id): Path>>, Path(id): Path) -> Html { + +async fn increase(State(conn): State>>, Path(id): Path) -> Html { + do_increase(&conn, id); + let food = get_food(&conn, id); + let sum = get_sum(&conn); + let update = FoodUpdateTemplate { food, sum }; + Html(update.render().unwrap()) +} + +fn do_decrease(conn: &Arc>, id: i32) { let conn = conn.lock().unwrap(); let mut stmt = conn.prepare("UPDATE food SET actual_servings = MAX((SELECT actual_servings FROM food WHERE id = ?1) - 1, 0) WHERE id = ?1").unwrap(); stmt.execute((id,)).unwrap(); - let mut stmt = conn.prepare("SELECT id, portion, name, kc_per_serving, target_servings, actual_servings FROM food WHERE id = ?1").unwrap(); - let food = stmt - .query_one((id,), |row| { - Ok(Food { - id: row.get(0).unwrap(), - portion: row.get(1).unwrap(), - name: row.get(2).unwrap(), - kc_per_serving: row.get(3).unwrap(), - target_servings: row.get(4).unwrap(), - actual_servings: row.get(5).unwrap(), - }) - }) - .unwrap(); - let mut stmt = conn - .prepare("SELECT SUM(kc_per_serving * actual_servings) as kc FROM food") - .unwrap(); - let sum = stmt.query_one((), |row| row.get(0)).unwrap(); - let food = FoodUpdateTemplate { food, sum }; - Html(food.render().unwrap()) +} + +async fn decrease(State(conn): State>>, Path(id): Path) -> Html { + do_decrease(&conn, id); + let food = get_food(&conn, id); + let sum = get_sum(&conn); + let update = FoodUpdateTemplate { food, sum }; + Html(update.render().unwrap()) }