Synchronisation en temps réel des missions #2573
Unanswered
louptheron
asked this question in
Ideas
Replies: 1 comment 1 reply
-
@louptheron je me rends compte qu'on n'a pas reparlé de la manière dont seraient gérées les validations de champ dans le cas d'un auto-save. Est-ce que tu pourrais le préciser dans cette discussion afin qu'on ait toutes les données du problème ? merci ! |
Beta Was this translation helpful? Give feedback.
1 reply
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
-
Besoins
Nous avons besoin d'avoir des missions synchronisées presque en temps réel, voici les deux cas :
Process utilisateur
On peut 1) garder le même principe qu'actuellement (l'utilisateur sauvegarde une mission au clic) ou 2) on "auto-save" le formulaire à chaque modification.
Pour le cas 1), étant donné qu'il peut y avoir des modifications non-repercutées, il faut définir un process de mise-à-jour lorsqu'un formulaire ouvert est modifié sur un autre poste, voici un exemple de process.
Donc, lorsque le formulaire des missions est ouvert est qu'une mission est modifiée sur un autre poste :
Pour le cas 2), étant donné que tout modification est repercutée en temps-réel sur les autres formulaires, on peut se dire qu'un process de mise-à-jour n'est pas requis (pas besoin de prévenir l'utilisateur car la portée de la modification est minime) et qu'une modification peut instantanément mettre à jour un formulaire sans "demander la permission".
Conditions d'envoi du formulaire lorsqu'un champ est modifié :
Donc, lorsque le formulaire des missions est ouvert est qu'une mission est modifiée sur un autre poste :
Implémentation
Il y a deux sujets techniques à couvrir : 1) comment recevoir les modifications et 2) comment enregistrer les modifications.
1) Réception des modifications
Aujourd'hui la synchronisation se fait par
polling
régulier toutes les 2 minutes.Je propose de faire un Server-Side Event - SSE - (un flux continu d'évenement unidirectionnel du backend) pour recevoir un évenement de mise-à-jour en temps réel sur les missions car :
Nous pouvons utiliser ce canal réactif seulement pour invalider le cache
RTK
et donc demander une nouvelle version (sans la mission sans lepayload
) ou insérer directement la nouvelle mission (reçue dans lepayload
) dansRTK
.Gestion du cache RTK avec des événements : https://redux-toolkit.js.org/rtk-query/usage/streaming-updates#websocket-chat-api
2) Enregistrement des modifications
Pour moi, le process 2) auto-save paraît le plus simple à mettre en oeuvre : toute modification du formulaire
Formik
(avec potentiellement un petitdebounce
) entraine la mise-à-jour de la mission via l'API (pas besoin de canal de type WebSocket dans ce cas à mon sens).Cet enregistrement envoie depuis le backend un événement SSE
MISSION_UPDATE
à tous leslisteners
(avec ou sans la mission enpayload
- à définir).Qu'en pensez-vous ?
Beta Was this translation helpful? Give feedback.
All reactions