fix(widget): le total retombait à zéro après synchronisation

Le widget affiche « snapshot + file d'attente ». La synchronisation vidait la
file sans créditer le snapshot : le total repassait donc à zéro juste après que
la saisie ait été enregistrée pour de bon. Le pire moment pour douter de son
journal.

`flush()` reporte désormais dans le snapshot ce qu'il vient d'envoyer, AVANT de
vider la file. Seules les entrées du jour sont créditées — le snapshot porte des
totaux quotidiens, y verser une saisie d'hier les fausserait. Le pont web
repoussera un snapshot exact au prochain chargement de page ; ce report garde
l'affichage juste entre-temps.

Les optionnels du snapshot reçoivent `= nil` explicitement : sans valeur par
défaut, l'init memberwise de Swift les aurait exigés à l'appel.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
Sylvain Bettinelli
2026-08-06 13:51:22 +00:00
parent b2b3c10807
commit d8adad466b
2 changed files with 33 additions and 8 deletions

View File

@@ -41,8 +41,8 @@ enum CoachWidgetStore {
/// le widget n'a pas d'accès réseau, tout vient de ce snapshot poussé par l'app.
struct CoachWidgetSnapshot: Codable {
var updatedAt: Date
var today: TodaySession?
var forme: FormeScore?
var today: TodaySession? = nil
var forme: FormeScore? = nil
/// Boissons du jour DÉJÀ connues du serveur, en millilitres et en nombre de
/// cafés. Le widget de saisie rapide y ajoute ce qui attend encore dans la
@@ -50,14 +50,14 @@ struct CoachWidgetSnapshot: Codable {
/// « 1,5 L » tant que l'app n'a pas resynchronisé, et l'utilisateur
/// douterait de saisies pourtant enregistrées.
/// Optionnels : un snapshot écrit par une version antérieure reste lisible.
var waterMlToday: Double?
var coffeeCountToday: Int?
var waterMlToday: Double? = nil
var coffeeCountToday: Int? = 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.
var kcalToday: Double?
var kcalGoal: Double?
var kcalToday: Double? = nil
var kcalGoal: Double? = nil
/// Séance planifiée du jour (nil = jour OFF / pas de séance).