From 50501aca5f5615959d224f8fef29ac470933ed15 Mon Sep 17 00:00:00 2001 From: louispaulb Date: Mon, 6 Jul 2026 11:34:51 -0400 Subject: [PATCH] =?UTF-8?q?feat(events):=20rattachement=20multi-signal=20+?= =?UTF-8?q?=20validation=20crois=C3=A9e=20aveugle=20+=20envoi=20test?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Suite aux demandes : bouton d'envoi test (courriel par défaut = utilisateur), auto- rattachement par courriel/nom/téléphone, et confirmation « êtes-vous un client ? » par recoupement — SANS autosuggest (aucune fuite de PII). Hub lib/events.js : - matchAndValidate({token,number,email,phone,name}) : recherche AVEUGLE de candidats par courriel/téléphone/numéro (en parallèle), le nom corrobore. « confirmed » = ≥2 signaux concordent sur le MÊME compte ; « probable » = 1 ; « none » = aucun. Jamais bloquant, ne renvoie jamais de donnée client. Empêche un courriel deviné de mal rattacher. - Formulaire RSVP : ajoute Nom (requis) + Téléphone (optionnel), n° client devient optionnel. Message de remerciement adaptatif (« ✓ on vous a reconnu » si confirmed). - POST /events/:id/send {test:true, test_emails[]} : envoi TEST via Mailjet/Gmail (réutilise email.sendEmail/gmail.sendMessage + inviteEmail + rsvpLink). Envoi de masse reste gaté (400). Ops EventsPage : badge de confiance (Confirmé/Probable/À vérifier + signaux en infobulle), dialogue d'envoi test (canal + courriel défaut = usePermissions().userEmail), CSV enrichi (téléphone + confiance). Filtres par niveau de confiance. Vérifié : 21/21 tests unitaires hub (cross-validation + envoi test mailjet/gmail + masse gatée) ; page Ops rend sans erreur, dialogue s'ouvre avec courriel pré-rempli. Co-Authored-By: Claude Opus 4.8 --- apps/ops/src/pages/EventsPage.vue | 71 +++++-- services/targo-hub/lib/events.js | 317 ++++++++++++++++++------------ 2 files changed, 247 insertions(+), 141 deletions(-) diff --git a/apps/ops/src/pages/EventsPage.vue b/apps/ops/src/pages/EventsPage.vue index 59f45d3..ef97c5c 100644 --- a/apps/ops/src/pages/EventsPage.vue +++ b/apps/ops/src/pages/EventsPage.vue @@ -81,10 +81,12 @@ -