← Retour à l'article

0 €0 €123456789,0⌫VALIDER12
L'événement en vol : impulsion sur un cordon, chariot sur le railTouches sur ressort (thread UI) et boîtier du brouillon (thread JS)Cordons : onPress, cache, envoi, accueil, RealtimeCoffre : le serveur, seul à calculer série et XPLa saisie rapide de Duo, démontée en caisse d'atelier. De gauche à droite : le clavier et sa barre Valider devant le boîtier qui garde le brouillon ; le cache des requêtes avec ses quatre fiches ; le panneau d'accueil (cadran d'XP, compteur de série, voyant du jour) ; le quai, le rail et le coffre du serveur avec sa balise Realtime. Les durées sont étirées pour être suivies à l'œil : dans l'app, l'aller du cordon prend quelques millisecondes, seul le rail (le réseau) se compte en dixièmes de seconde. Le ressort des touches, lui, tourne à sa vraie vitesse.
  1. Le doigt se pose. Pressable.onPressIn écrit scale.set(spring(0.95, 'snappy')) : la touche s'enfonce sur son ressort (raideur 420, amortissement 24), animée sur le thread UI par Reanimated, sans aucun rendu React.
  2. Le doigt se lève. onPress part vers le thread JS (le cordon) : Haptics.selectionAsync() fait vibrer le moteur, puis onKey(key) appelle setDraft(applyAmountKey(…)).
  3. React rend. Le brouillon est une chaîne ("12.5") ; formatDraft l'affiche dans la langue de l'appareil, draftToMinor en fait un entier en centimes (1250n). Jamais de flottant.
  4. Valider. useAddTransaction().mutate : onMutate met le cache TanStack Query à jour tout de suite (total du mois, « j'ai saisi aujourd'hui ») — l'accueil réagit avant le serveur.
  5. Le réseau. backend.addTransaction envoie rpc('add_transaction') avec un client_id généré sur l'appareil : un renvoi après coupure ne crée jamais de doublon.
  6. Le serveur décide du jeu. Série, XP et quêtes sont calculés côté Postgres ; il renvoie une reward (+15 XP quand la journée est complète) ou null. Realtime prévient le téléphone du partenaire.
  7. Retour. onSuccess dépose la récompense et ferme la feuille ; onSettled invalide quatre clés (jeu, célébrations, catégories, compte) et l'accueil se redessine. Hors ligne : onError remet le cache d'avant, le brouillon garde son client_id.