From d7fc5302011209ee761b0f6fa9291d5c1ce24802 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kha=C3=AFs=20COLIN?= Date: Tue, 28 Oct 2025 20:26:30 +0100 Subject: [PATCH] implement basic multi-day support --- foods.db | Bin 12288 -> 16384 bytes src/decrease.sql | 31 +++++++++++++++++-------------- src/get_food.sql | 9 +++++++-- src/get_foods.sql | 20 +++++++++++++------- src/get_sum.sql | 11 ++++++++--- src/increase.sql | 26 +++++++++++++++++--------- src/main.rs | 9 ++++++--- src/migrations/5.sql | 23 +++++++++++++++++++++++ src/set.sql | 9 +++++---- templates/food.html | 4 ++-- 10 files changed, 98 insertions(+), 44 deletions(-) create mode 100644 src/migrations/5.sql diff --git a/foods.db b/foods.db index 0e4ba02ee96532f764c64771505e71fd1cf1ff2e..322ae5cb8ebe8df2e4ccd74a68360a25493c7785 100644 GIT binary patch delta 1499 zcmZojXlP)ZAg#KJfq{XA0Re>2_>2q;46G9i<%L%<=yeJ4@-j0pbFX9Iwc=jKb7o^< zJ?G|+oO>A~o1|IU#g&yAn`=uFlX6m15-a12Q;W(n^U{%+OwK{Bjv=lJA&yQyt_nyJ z3L0Dr3JMCkx(c4b{<;=s28LjMN@AtLWIjGId*{%gAXmSTco)YIR~@iaT7G^?d}fM* zr(cMxyK9hwpMQvgU#O1{L>6jwaeQiGNotleu~IxmulB*u_Of8M`tki}D`c zEW&-4aq<&>85Lgs84P@UuNnE@@!#R!&A*E8HGeyQDSrxo5Wge80lz#yAK%~2h5{ly z69afRyUI*qsu$p8QDkH^GB7gLH8jvQvfyPFU_%vQW98>(QDo#msA1ygLlxlT2bsc& zP{GU3gQ|jupBq(xTYw8>O+7*n7aKn(iy|W@LWEO*1EdBaz`@4Pj;e&6|15(bvK}^0 zepXZ^tO6{krm!$EFfj0g!jgf(7fcB-qpD!$5MX3c;Ec&0Nb zO%Bvi;N)fym1ks>W@MaPts|+$z{*;|dyqj&)RvKhLz}%$eT+rbBhBPH-l&}+{_Rkx73mn z1r4Xtl9JRSoyj(`;*tz7^$ZNmFC00!8KfOS>e(45%jv63Uau=)!oaM+m(0K+ZOh20 z$j8kfDF~8hWMnc_2rkLibItUIJCU7%#mAMAn?c%k@;-U>$?tWgICNOJ8DvEn87B+N ztFbZdVPIegn4GTX!xqHB%^)5*IZMxE@_aohHa~Vy;7-oc)1K@g$1?f7o-|to8#jY^ z>f{)GtI6}_q}aWgxEZ8fnI;#?Ycn!Vo+~eb^Zfhx*YeNd z@8+-K&*YEbcjq_bSLGK0=Z%dGcbMu0P*VgSADRF!FPZ=k51IfsH<|z!7n%SkCz=2U n2TULrnjP8MVIoigHa0W?R#r3t78W!CW@a=2aQ@{)WHfUCzTPcQ delta 771 zcmZo@U~EX3Agwxyfq{XUfq{XEfq{XMfq_AQfq{XA0Rcc_EE5~$1t&4+bqVo;RPk~% z@N#p0+-xY&$hr9==U&Fm3;CQGrP_E{*v0kr8N1y}5|eULiwkp-;!9F<3*t*AbMxv? z&g7jp`6<`Q%?tVB8C78B^Ka+Rrmg`v4=3af|$4-bR5C`|64jIb%o23>9*25EIBP7Y~CMh+%JeIo_u(gL@f)Xd`K z41G5c$#6nB%`7z~IVDAexrL9DL1Ch!sEEBC7Y~DIusxV$fpd}s&iVuE$ zMRPr9?7-r~SwFZWThBkKxFmp?Njc3RIn5$9#s0D}7%(yI3E|*j5RYV>%&V_G`Hd{c z Response { + let error = &self.0; + error!(?error, "error returned to client"); ( StatusCode::INTERNAL_SERVER_ERROR, format!("Something went wrong: {}", self.0), @@ -152,12 +154,13 @@ fn get_version(tx: &Transaction) -> anyhow::Result { Ok(tx.query_one(include_str!("get_version.sql"), (), |row| row.get(0))?) } -fn get_migrations() -> [&'static str; 4] { +fn get_migrations() -> [&'static str; 5] { [ include_str!("migrations/1.sql"), include_str!("migrations/2.sql"), include_str!("migrations/3.sql"), include_str!("migrations/4.sql"), + include_str!("migrations/5.sql"), ] } diff --git a/src/migrations/5.sql b/src/migrations/5.sql new file mode 100644 index 0000000..8125898 --- /dev/null +++ b/src/migrations/5.sql @@ -0,0 +1,23 @@ +CREATE TABLE day_serving ( + -- ISO-8601 + day TEXT NOT NULL DEFAULT CURRENT_DATE, + food_id INTEGER NOT NULL, + servings_eaten INTEGER NOT NULL DEFAULT 0, + PRIMARY KEY(day, food_id), + FOREIGN KEY(food_id) REFERENCES food(id) +) STRICT; + +INSERT INTO + day_serving (food_id, servings_eaten) +SELECT + id, + actual_servings +FROM + food; + +ALTER TABLE + food +DROP COLUMN + actual_servings; + +PRAGMA user_version = 5; diff --git a/src/set.sql b/src/set.sql index 6830998..75a98d2 100644 --- a/src/set.sql +++ b/src/set.sql @@ -1,8 +1,9 @@ UPDATE - food + day_serving SET - actual_servings = MAX(?2, 0) + servings_eaten = MAX(?2, 0) WHERE - id = ?1 + food_id = ?1 + AND day = CURRENT_DATE RETURNING - actual_servings + servings_eaten diff --git a/templates/food.html b/templates/food.html index 0b2e1cf..f3656fb 100644 --- a/templates/food.html +++ b/templates/food.html @@ -20,7 +20,7 @@ {% for counter in self::range(10) %} {% if loop.index as i32 <= food.target_servings %} {% else %}