Widget Boissons : jauge d'hydratation + ouverture sur /hydratation

Le widget affichait un total sans jauge, et c'était une décision documentée
et juste : « aucun objectif de boisson n'est fixé, et en inventer un
donnerait un pourcentage qui n'a pas de sens ». Une cible existe maintenant
côté serveur (`/api/drinks` renvoie `water_target_ml`), donc la jauge peut
apparaître — sans cible, on retombe exactement sur l'ancien comportement.

⚠️ Cette cible n'a **aucune source** : c'est un objectif personnel, pas une
recommandation médicale. D'où le libellé « objectif » et non « besoin » ou
« recommandé ».

⚠️ Les deux côtés du pont bougent ensemble : `widget-bridge.js` pose
`waterGoalMl`, `CoachWidgetBridge` la lit sous le même nom. Le widget
« JOUR OFF » a menti pendant des jours parce que le pont lisait une clé
absente de la réponse serveur.

Ajoute aussi un `widgetURL` vers /hydratation : un tap hors bouton ouvrait
l'app sur sa dernière page consultée, au hasard.

⚠️ **NON COMPILÉ** — pas de Mac ici. À vérifier au prochain build Xcode,
avec les zones cardiaques Watch et `getSnapshot` déjà en attente.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
Sylvain Bettinelli
2026-08-13 08:33:40 +00:00
parent fb4033130f
commit 5bf3e91ad2
3 changed files with 41 additions and 10 deletions

View File

@@ -53,6 +53,16 @@ struct CoachWidgetSnapshot: Codable {
var waterMlToday: Double? = nil
var coffeeCountToday: Int? = nil
/// Objectif d'hydratation du jour, servi par `/api/drinks` depuis la refonte
/// de la page /hydratation (2026-08-13).
///
/// **Cette cible n'a aucune source** : c'est un objectif personnel, pas
/// une recommandation médicale (voir `nutrition_goals.HYDRATION_DEFAULT_ML`
/// côté serveur). Le widget peut donc l'afficher comme une jauge, jamais
/// comme un seuil de santé. `nil` jauge masquée, total seul c'était le
/// comportement d'origine et il reste le repli.
var waterGoalMl: Double? = nil
/// Énergie du jour et objectif, poussés par l'app depuis le journal.
/// `kcalGoal` vient des objectifs nutritionnels réels (1950 au 06/08/2026) :
/// il n'est pas écrit en dur ici, pour qu'un changement d'objectif suive.