Skip to content

[TECH] Mise en place de l'EDA sur l'anonymisation - #17387

Open
P-Jeremy wants to merge 6 commits into
devfrom
tech-days-2026-anonymisation
Open

[TECH] Mise en place de l'EDA sur l'anonymisation#17387
P-Jeremy wants to merge 6 commits into
devfrom
tech-days-2026-anonymisation

Conversation

@P-Jeremy

@P-Jeremy P-Jeremy commented Sep 3, 2026

Copy link
Copy Markdown
Contributor

☀️ Problème

L'anonymisation d'un utilisateur (admin via POST /api/admin/users/{id}/anonymize, ou l'utilisateur lui-même via DELETE /api/users/me) est aujourd'hui portée par un unique service, anonymize-user.service.js (contexte privacy), qui appelle directement les repositories/API de 4 autres contextes (identity-access-management, team, legal-documents, prescription/learner-management).

Ce couplage rend le service difficile à faire évoluer et empêche d'isoler l'échec d'un traitement sans bloquer toute la chaîne.

⛱️ Proposition

Bascule de l'anonymisation vers l'architecture événementielle mise en place dans #17159 : publication d'un AnonymizeUserEvent, auquel chaque bounded context réagit via son propre EventHandler, de façon autonome et découplée :

  • identity-access-management : moyens de connexion, dernières connexions, login, révocation des tokens, demande de réinitialisation de mot de passe
  • legal-documents : documents légaux acceptés
  • prescription/learner-management : apprenants et participations aux campagnes
  • team : memberships et certification-center-memberships

AnonymizeUserEvent est un integration event consommé par plusieurs bounded contexts : il est donc déclaré dans shared/domain/events/ (et non dans privacy), pour que privacy reste le seul producteur sans devenir une dépendance des contextes consommateurs. La règle dependency-cruiser qui exemptait spécifiquement les évènements de domaine des vérifications de dépendances inter-contextes n'est donc plus nécessaire et a été retirée : shared étant déjà une dépendance autorisée pour tous les contextes, aucune exception particulière n'est requise.

L'ancien anonymize-user.service.js est supprimé.

🧴 Remarques

  • Chaque handler est couvert par un test d'intégration dédié.
  • Le test acceptance sur la route anonymize-user vérifie que chaque EventHandler reçoit le payload attendu.

🏊 Pour tester

  • En local (Pix Admin, superadmin@example.net / pix123) : sur la fiche d'un utilisateur, déclencher l'anonymisation, puis vérifier en base que l'utilisateur, ses memberships, ses moyens de connexion, ses participations et ses documents légaux sont bien anonymisés/désactivés.
  • Ou en tant qu'utilisateur connecté sur mon-pix (certif-success@example.net / pix123) : DELETE /api/users/me, même vérification.

Penser à démarrer le traitement des jobs en local ! cd api && npm run start:job

@P-Jeremy
P-Jeremy requested review from a team as code owners September 3, 2026 12:45
@pix-bot-github

pix-bot-github commented Sep 3, 2026

Copy link
Copy Markdown

@P-Jeremy P-Jeremy self-assigned this Sep 3, 2026
@P-Jeremy P-Jeremy changed the title Tech days 2026 anonymisation [TECH] Mise en place de l'EDA sur l'anonymisation Sep 3, 2026
@P-Jeremy
P-Jeremy requested review from a team as code owners September 3, 2026 12:53
@P-Jeremy
P-Jeremy force-pushed the tech-days-2026-anonymisation branch from 160bf15 to 4b83c23 Compare September 3, 2026 12:55
@P-Jeremy P-Jeremy added ⚠️ PR Inheritance This PR inherits a first-to-merge PR and will need a rebase ⚠️ Blocked labels Sep 3, 2026
@P-Jeremy
P-Jeremy force-pushed the tech-days-2026-anonymisation branch from 4b83c23 to 66506a1 Compare September 3, 2026 12:57
@P-Jeremy
P-Jeremy force-pushed the tech-days-2026-anonymisation branch from 66506a1 to a26ebac Compare September 3, 2026 13:11
@P-Jeremy P-Jeremy added 👀 Tech Review Needed 👀 Func Review Needed Need PO validation for this functionally labels Sep 3, 2026
Base automatically changed from tech-days-2026-EDA to dev September 3, 2026 13:24
@P-Jeremy
P-Jeremy force-pushed the tech-days-2026-anonymisation branch from a26ebac to 7517782 Compare September 3, 2026 13:41
@P-Jeremy P-Jeremy removed ⚠️ Blocked ⚠️ PR Inheritance This PR inherits a first-to-merge PR and will need a rebase labels Sep 3, 2026
@P-Jeremy
P-Jeremy force-pushed the tech-days-2026-anonymisation branch 3 times, most recently from a0dfa33 to d192b4d Compare September 4, 2026 09:26

@bpetetot bpetetot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Test OK

@P-Jeremy
P-Jeremy force-pushed the tech-days-2026-anonymisation branch from d192b4d to d31ea98 Compare September 7, 2026 08:39

@EmmanuelleBonnemay EmmanuelleBonnemay left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Lu et testé avec succès

@lego-technix
lego-technix self-requested a review September 7, 2026 09:37
Comment thread api/src/shared/domain/errors.js
@lego-technix

Copy link
Copy Markdown
Contributor

La description de la PR n’indique pas dans la proposition le comportement souhaité en cas d’erreur de l’anonymisation dans un des contextes.

De même dans la description des tests fonctionnels il n’y a la description d’un cas d’erreur.

Serait-il possible d’ajouter ces 2 points dans la description de la PR SVP ? 🙏

Comment thread admin/app/components/users/user-overview.gjs Outdated
Comment thread admin/tests/acceptance/authenticated/users/get-test.js Outdated
@lego-technix

Copy link
Copy Markdown
Contributor

Actuellement sur le déploiement d’une RA pour Pix App n’est pas coché, est-ce volontaire ? Pourtant l’auto-anonymisation depuis le compte d’utilisateur sur Pix App avec envoi d’email est un cas pertinent à tester.

@lego-technix

lego-technix commented Sep 7, 2026

Copy link
Copy Markdown
Contributor

🧪 J’ai effectué les tests fonctionnels indiqués dans la PR et des tests fonctionnels en cherchant à générer des erreurs. Tout me semble très bon, avec une toute petite remarque sur le cas suivant :

  1. Dans Pix Admin, un admin a un onglet ouvert pour anonymiser un utilisateur et lance
  2. Dans Pix App, cet utilisateur s’auto-anonymise
  3. Dans Pix Admin, l’admin lance l’anonymisation → la ConflictError 400 n’est pas gérée côté Pix Admin et l’UI est cassée et ne répond plus.

Néanmoins c’est mieux que ce qui se passe sur dev actuellement où, pour ce cas-ci, l’utilisateur se retrouve anonymisé 2 fois 🤯 et où 2 audit logs sont enregistrés dans l’Audit Logger. Donc 👏👏👏 cela démontre que l’EDA est bien adaptée pour gérer ce cas d’anonymisation et se comporte mieux que l’architecture précédente 👏👏👏

@yaf
yaf force-pushed the tech-days-2026-anonymisation branch 2 times, most recently from af9a7b8 to 6522be9 Compare September 8, 2026 13:29
@P-Jeremy
P-Jeremy force-pushed the tech-days-2026-anonymisation branch from 6522be9 to 7c830c7 Compare September 8, 2026 13:34
P-Jeremy and others added 4 commits September 8, 2026 15:43
Co-Authored-By: Yannick François <42057+yaf@users.noreply.github.com>
Co-Authored-By: Cécilia Bossard <3694254+cbossard@users.noreply.github.com>
Co-Authored-By: Guillaume Olejniczak <6728051+La-toile-cosmique@users.noreply.github.com>
Co-Authored-By: Gilles Vieira <22393206+sandalfon@users.noreply.github.com>
Co-Authored-By: Alice <44300937+alicepeltier@users.noreply.github.com>
Co-Authored-By: Claude <noreply@anthropic.com>
Co-Authored-By: Yannick François <42057+yaf@users.noreply.github.com>
Co-Authored-By: Cécilia Bossard <3694254+cbossard@users.noreply.github.com>
Co-Authored-By: Guillaume Olejniczak <6728051+La-toile-cosmique@users.noreply.github.com>
Co-Authored-By: Gilles Vieira <22393206+sandalfon@users.noreply.github.com>
Co-Authored-By: Alice <44300937+alicepeltier@users.noreply.github.com>
Co-Authored-By: Claude <noreply@anthropic.com>
Co-Authored-By: Yannick François <42057+yaf@users.noreply.github.com>
Co-Authored-By: Cécilia Bossard <3694254+cbossard@users.noreply.github.com>
Co-Authored-By: Guillaume Olejniczak <6728051+La-toile-cosmique@users.noreply.github.com>
Co-Authored-By: Gilles Vieira <22393206+sandalfon@users.noreply.github.com>
Co-Authored-By: Alice <44300937+alicepeltier@users.noreply.github.com>
Co-Authored-By: Claude <noreply@anthropic.com>
Co-Authored-By: Yannick François <42057+yaf@users.noreply.github.com>
Co-Authored-By: Cécilia Bossard <3694254+cbossard@users.noreply.github.com>
Co-Authored-By: Guillaume Olejniczak <6728051+La-toile-cosmique@users.noreply.github.com>
Co-Authored-By: Gilles Vieira <22393206+sandalfon@users.noreply.github.com>
Co-Authored-By: Alice <44300937+alicepeltier@users.noreply.github.com>
Co-Authored-By: Claude <noreply@anthropic.com>
@P-Jeremy
P-Jeremy force-pushed the tech-days-2026-anonymisation branch from 7c830c7 to 4f4f981 Compare September 8, 2026 13:43
P-Jeremy and others added 2 commits September 8, 2026 16:06
Co-Authored-By: Yannick François <42057+yaf@users.noreply.github.com>
Co-Authored-By: Cécilia Bossard <3694254+cbossard@users.noreply.github.com>
Co-Authored-By: Guillaume Olejniczak <6728051+La-toile-cosmique@users.noreply.github.com>
Co-Authored-By: Gilles Vieira <22393206+sandalfon@users.noreply.github.com>
Co-Authored-By: Alice <44300937+alicepeltier@users.noreply.github.com>
Co-Authored-By: Claude <noreply@anthropic.com>
Co-Authored-By: Yannick François <42057+yaf@users.noreply.github.com>
Co-Authored-By: Cécilia Bossard <3694254+cbossard@users.noreply.github.com>
Co-Authored-By: Guillaume Olejniczak <6728051+La-toile-cosmique@users.noreply.github.com>
Co-Authored-By: Gilles Vieira <22393206+sandalfon@users.noreply.github.com>
Co-Authored-By: Alice <44300937+alicepeltier@users.noreply.github.com>
Co-Authored-By: Claude <noreply@anthropic.com>
@P-Jeremy
P-Jeremy force-pushed the tech-days-2026-anonymisation branch from 4f4f981 to ef1f8ea Compare September 8, 2026 14:06
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

cross-team Toutes les équipes de dev 👀 Func Review Needed Need PO validation for this functionally 👀 Tech Review Needed tech-days-event-driven

Projects

None yet

Development

Successfully merging this pull request may close these issues.

10 participants