Skip to content

fix(comptoir): speed up transaction search and clean up background tasks - #192

Merged
RemiF1908 merged 3 commits into
mainfrom
fix/comptoir-search
Sep 17, 2026
Merged

RemiF1908 merged 3 commits into
mainfrom
fix/comptoir-search

Conversation

@lmandrelli

@lmandrelli lmandrelli commented Sep 17, 2026

Copy link
Copy Markdown
Contributor

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 build et git 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.

Recherche Avant Après
En cours · Martin 104,66 ms 2,29 ms
En cours · nom absent 236,75 ms 2,77 ms
Terminées · Martin 103,63 ms 111,14 ms
Tous statuts · Martin 92,26 ms 93,98 ms

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

  • Bug fix (non-breaking change which fixes an issue)
  • New feature (non-breaking change which adds functionality)
  • Documentation (update or create documentation)
  • CI/CD
  • Other
  • Breaking change (fix or feature that would cause existing functionality to change)

@lmandrelli lmandrelli added the bug Something isn't working label Sep 17, 2026
@RemiF1908
RemiF1908 merged commit 3b11703 into main Sep 17, 2026
2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

bug Something isn't working

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants