fix(comptoir): speed up transaction search and clean up background tasks - #192
Merged
Merged
Conversation
This was referenced Sep 19, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Accélère la recherche des transactions du comptoir et corrige les tâches qui restaient actives après une navigation, une déconnexion ou une reconnexion du lecteur de carte.
Recherche côté backend : ajoute l’index MongoDB composé
{ state: 1, created_at: -1 }pour exploiter le statut sélectionné, déjà transmis à l’API. Partage le filtre entre comptage et lecture, conserve la recherche par nom/surnom lorsque les commandes en ligne sont masquées et traite la saisie comme du texte littéral.Recherche côté frontend : attend 150 ms après la saisie, annule les requêtes obsolètes, ignore leurs réponses et revient à la première page lors d’un changement de filtre. Le rafraîchissement périodique attend la fin de la requête précédente.
Sessions prolongées : libère les abonnements, événements, temporisations et requêtes au démontage des composants. Ferme le socket courant du lecteur de carte et annule sa reconnexion. Arrête le carrousel et les chargements de l’écran de connexion dès qu’on le quitte.
Modale de transaction : annule les délais des messages et de fermeture automatique au démontage. Une réponse serveur reçue après la fermeture ne peut plus programmer une fermeture ni effacer la recherche d’une autre transaction. Le délai normal de 1,5 seconde reste conservé pour terminer, annuler et remettre en attente.
Le nouvel index est créé à l’initialisation du backend. Aucun changement du contrat API.
Validation
go test -mod=readonly ./...: réussi, avec tests des filtres MongoDB, du comptage, de la pagination et de l’index.npm run buildetgit diff --check: réussis.npm run check: toujours 8 erreurs et 51 avertissements préexistants, sans nouvelle erreur.Tests navigateur sur les composants Svelte réels : recherche, pagination, filtres, annulation des requêtes et nettoyage au démontage vérifiés.
Avec une horloge virtuelle simulant 8 heures : aucun appel du carrousel après avoir quitté la connexion (960 auparavant) ; au maximum une requête de rafraîchissement simultanée avec des réponses lentes (6 auparavant).
Après destruction de 41 instances de la liste, une recherche ne déclenche plus de requêtes résiduelles (41 auparavant). Les nettoyages de la déconnexion automatique et du lecteur de carte sont également vérifiés.
Régression de la modale : 27 scénarios navigateur passent avec le composant réel, une horloge virtuelle et des réponses API simulées (4 seulement sur la version précédente). Couverture des fermetures par croix/fond, de la réouverture avant/après le délai, des réponses tardives et de la navigation, ainsi que de la fermeture automatique normale.
Benchmark local
MongoDB 8.0.8, 100 000 transactions synthétiques dont 500 en cours. Médianes du comptage et de la lecture de la première page, avec les mêmes données et filtres : nouvel index masqué puis activé, 3 passages de chauffe et 15 mesures par cas.
Le gain concerne surtout les statuts contenant peu de transactions : le comptage examine 500 documents au lieu de 100 000 pour les transactions en cours. Il ne se généralise pas à tout l’historique ; le cas « terminées » est environ 7 % plus lent dans cette mesure. Avec la version corrigée, la médiane HTTP pour « en cours · Martin » est de 4,90 ms, hors délai de saisie et rendu.
Les données sont synthétiques et le cache chaud. Les 8 heures sont simulées, sans profil complet de la mémoire ni mesure en production. Le simple maintien de la page ouverte avec des réponses rapides ne reproduit pas de croissance des ressources dans l’ancien code. Les scripts de benchmark et fixtures restent temporaires et ne sont pas inclus dans cette PR.
Related issues :
Aucune issue liée.
Types of changes