From 53fb85b42bd112f316ef5d741beb2ec78e87d2ad Mon Sep 17 00:00:00 2001 From: dadaloop82 Date: Thu, 12 Mar 2026 18:20:47 +0000 Subject: [PATCH] Weekly recipe variety + soften fridge priority (suggestion, not mandatory) --- api/index.php | 34 ++++++++++++++++++++++++++-------- data/dispensa.db | Bin 114688 -> 114688 bytes 2 files changed, 26 insertions(+), 8 deletions(-) diff --git a/api/index.php b/api/index.php index 5767db8..67f1638 100644 --- a/api/index.php +++ b/api/index.php @@ -1226,29 +1226,47 @@ function generateRecipe(PDO $db): void { // Today's previous recipes from DB - avoid repetition $todayText = ''; $today = date('Y-m-d'); - $todayStmt = $db->prepare("SELECT recipe_json FROM recipes WHERE date = ?"); - $todayStmt->execute([$today]); - $todayDbRecipes = $todayStmt->fetchAll(); + $weekAgo = date('Y-m-d', strtotime('-7 days')); + + // Get this week's recipes for variety + $weekStmt = $db->prepare("SELECT date, meal, recipe_json FROM recipes WHERE date >= ? ORDER BY date DESC"); + $weekStmt->execute([$weekAgo]); + $weekDbRecipes = $weekStmt->fetchAll(); + $todayTitles = []; - foreach ($todayDbRecipes as $tr) { + $weekTitles = []; + foreach ($weekDbRecipes as $tr) { $rj = json_decode($tr['recipe_json'], true); - if (!empty($rj['title'])) $todayTitles[] = $rj['title']; + if (!empty($rj['title'])) { + $weekTitles[] = $rj['title']; + if ($tr['date'] === $today) { + $todayTitles[] = $rj['title']; + } + } } if (!empty($todayRecipes)) { $todayTitles = array_unique(array_merge($todayTitles, $todayRecipes)); } + + $varietyText = ''; if (!empty($todayTitles)) { $todayList = implode(', ', array_map(function($t) { return '"' . $t . '"'; }, $todayTitles)); - $todayText = "\n\nRICETTE GIÀ PREPARATE OGGI:\n{$todayList}\nNON proporre una ricetta simile o con lo stesso concetto di quelle già fatte oggi. Varia il tipo di piatto, gli ingredienti principali e lo stile di cucina. Ad esempio se a pranzo c'era una piadina, a cena proponi pasta, riso, zuppa o altro — MAI un'altra piadina o wrap o piatto concettualmente simile."; + $varietyText .= "\n\nRICETTE GIÀ PREPARATE OGGI:\n{$todayList}\nNON proporre una ricetta simile o con lo stesso concetto di quelle già fatte oggi. Varia il tipo di piatto, gli ingredienti principali e lo stile di cucina. Ad esempio se a pranzo c'era una piadina, a cena proponi pasta, riso, zuppa o altro — MAI un'altra piadina o wrap o piatto concettualmente simile."; + } + // Weekly variety: list all recent recipes so AI avoids repetition + $weekOnly = array_diff($weekTitles, $todayTitles); + if (!empty($weekOnly)) { + $weekList = implode(', ', array_map(function($t) { return '"' . $t . '"'; }, array_values($weekOnly))); + $varietyText .= "\n\nRICETTE DEGLI ULTIMI 7 GIORNI:\n{$weekList}\nCerca di variare rispetto a queste ricette recenti: evita piatti troppo simili o con gli stessi ingredienti principali. Alterna pasta, riso, zuppe, carne, pesce, verdure, piatti freddi, ecc."; } $prompt = <<w2P-b2Q7 zCUbF;4bdbIJS2@!qHS3T^#M_d2SlY-+YlsP5JgCRtkee{;01wrX(a+kydl1S#`bzQ zA!(IpBim=r`7hu9o&W#l#*Kj+HwNB$e^%SE_WRkKc4yXf8;lN zelYU8wKwm+&^Pkl+OO^&>Kl1`<4<=#*!89UwAS}Z>JEL(rCy_t>C|odm`UB*_~6ZB z>GYkxk2VH=x=$NSexF&V{*Ci*{kp29-x$=6YX7}IpPVt zrHV0CDV4iR$#%-o-SmcE5IDcj*-s2E+0B z$GHF6&0Xt1n$=!7-btWXI(&1Ojt(8%U7E(xPM+HiPgacb*v%o@*@vAo>o<;RpC8^t z>cMwrv|k(=N)M(|nLiHyWDsHfYasgJf%ML!x0)q?MY*nY8q2OHP2peDUGA772)JIk zru%|>=8CZNO5lYetGk}ELNlO8?XRcttYAz|l}lOO;Z31e^!d4SCr&Od&apXmV(BG( zJI&@!omx73`o!GgoSxNd9(Sw=8(%tkf%ai3_N`Y+`I(vakC#zXn_u0sw$#)s#bUlN zmDMi`*;omd9En);iw!ct&5OJtUKYOTVXb&&#$dEwLk7yCxTXzbYI4$;o+=iKr3jB? z69<+&8_!mP!1XKD@#^^H%a`+3=-Sf6-^IKPs^jj83RHC*uuoLSjcI%<;NhR>5U9QhyCq&B8({g?W`@F@a&1*J5FBt8A z*O9p^Ok~a(WgH>pEGv|ahJO9}Rze#ym5GVl$NF}TzCK$Dec^$cq7G(SqRvA*SayZy zE60a*B8#Xmw}h=sc&l^Uk6DT}SDCyX6S8;JH@PL8Re}6_msbS0gB7r?chOYMy7EA< z-o;hnsmt6CHoaL=1l+?}ovP~!pD%NXkX6$qaxMtTLWgnRmpJ7Ff+2inN1VlbnR0CD zh&)@AtR;mbn8gFdq|F@F#E#o0RXFs7LOb&@wxyA4_8CO5YsV$7BvtV=iafKFcyTZ>RGs{$s}r3 z)yJ|4ypKR59n%g0OAG|1?eQR>b*^7fBm=c%h zISfsVnA}XrGW+vW4?!&QqZA^$S5z5LY5>Q!pb}|2dcpx`Yqd`>EFxh z;)*N1tILj}cCRl5(w3{M#A~+`oOEzu;*rAh@!^Iip2I|N0&;V$BZ<}y{Pn9;@k;^C z2~53Mn&8*61MxtG##&adV`wa6pa(QgwkWP;37u7j@WG%%$5T}GjvS2rw&-Rd)-aJo zq%@?{S&ZFAB?B%xGZZ}ouv0kka$7xhj^lK9h%YBWV_Tx9NWH=Px44~LFzjvPgvmuX zq3BaNqnI-a`t@uVg88V88TPkfVD4)2V-tm^VlY|Wfti#U$285=~xy%Dssu6y~;l_&nM)^(uU}IE#*4z|XT7)nm^FL3wfu1W%$t zFA5RZ5d;6sD8vFDh3@2obRGd_2CsySp)JlXF-GJ0%)?r12=;ClG zU!&fEm^PE&mU*l|doI%gM;q4GUq|kd&pl+{6m6x#j*$8vV`!nILrjU6EIaO^iRog6ok0_dl`Yyf zBnrNg1nu|0~hs$NOmPR5kYJ+iVHSb zVP{EA#mU#`eM3O8cr7@|)5vqez>_p!I#ch}5ZZyGO6`f=mCDS;YmfrK@g#+r_$Z-} zCE=fB3&9fzkUq=mk*pyRfw!Chl9OI}&h(atL83Yk|0IYZmupH|(9DpWc)zisr>MGh zGLa<`BsJ?;$D;;b2e1c29IusIdD3=RAm=pnP%&xIm;83cgg4LP#4w4P%*UzB#~b^O m|0VO~{X0gV*R~3obh77RD)SI~{+`K@M%vtx{`ouF-v0p~!eg@l delta 398 zcmZo@U~gz(-*DKTk!kV~dtJtk&7bUr0+>5^PEKZ@Fqw(3X7YjwQj_;gP}}@u!b$Fl z3sg3roMX+*+`(+InSFsEKPMp;HhV`Gby%;JL7yy8Tr=^xk_)wm2442`TzOs$N} zw=1$Urm(697#SFu=^7a88Um$^tqjbqj7>3wObxcL;bG)pWZ}19u$(y2bo*OgMlMD{ zdwZZY;vj1r(~2_F^O>ge@iS^pUbC2km4ShcfnmEHKjSe4W=+nh>FfrK!HX3IIJZYx zGOki%W8}ZVz<*=2pu;)-={NEjb$|k282G;c1zz!saWl(umZTP!#Al~g@-hH{00RU6 t!p({Tv-la~Cr*s!;(`gj1!{Q4FC`4(BLTSlC!qXmer`U5+_DXf0s!r%WXu2n