New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Harmonisation des doublons usagers suspectés #1284
Conversation
a3a5524
to
9f4ce4f
Compare
5cd4860
to
4a314b6
Compare
b64e30f
to
3822f22
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
(notes pour moi)
3822f22
to
e1833c1
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@yaf Sinon c’est bon pour moi. J’ai l’impression que la modale nous coûte assez cher en complexité du code, mais c’est pas l’objet ici.
Je veux bien que tu jettes un coup d’œil rapide :)
Je vais prendre un peu le temps de faire quelques tests si c'est ok pour toi d'attendre un peu. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Il y a une erreur 500 lorsque je pose un rendez-vous depuis l'agenda
https://sentry.io/organizations/rdv-solidarites/issues/2178934294/?project=1811205&referrer=RegressionActivityEmail
Bizarre d'ailleurs de ne pas avoir un test qui claque ici du coup 🤔 S'il y a bien un truc qui est sur le chemin critique, c'est bien poser un rendez-vous sur l'agenda :)
Mm, je vois la 500 sur la review app mais pas en local. (Au moins ça explique pourquoi les tests n’échouent pas.) |
Ah oui. Ok, c'est peut-être lié à une migration ou une donnée inconsistante alors 🤔 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Ça fait du bien ce petit nettoyage.
Je ne suis pas à l'aise avec cette histoire de modal. Mais je crois que pour s'en passer nous avons besoin de réfléchir un peu en termes de design
Pour l'usage des FormObjects, je ne suis pas encore pleinement convaincu, mais je n'ai pas non plus d'argument contre. Je suis prêt à essayer encore un peu :)
Ceci est une grosse PR, elle m'a pris un long moment et beaucoup d'allers-retours. Le code n'est pas encore parfait, mais ça va dans la bonne direction par rapport à aujourd'hui je pense.
Contexte
Un usager peut-être créé de plusieurs manières :
Il y a différents cas d'usagers doublons que l'on veut gérer :
Lorsqu'un doublon est détecté on veut réagir différement selon le chemin emprunté :
Enfin, il faut aussi prendre en compte les chemins de mise à jour, dans lesquels on veut réagir de la même manière mais uniquement en cas de modification des champs menant à l'apparition du doublon. On ne veut pas ré-alerter de la présence d'un doublon sur base du numéro de téléphone si l'agent vient de changer l'adresse par ex.
cf screenshots tout en bas pour avoir une idée visuelle
Objectifs de cette PR
Changements fonctionnels
Refactorings code
Form Object
Admin::UserForm
introduction d'un Form Object
Admin::UserForm
dont le rôle est de rajouter des validations et warnings sur la création et update d'User, uniquement depuis les formulaires web de l'admin.Ces validations et warnings étaient jusqu'ici faites dans le modèle User, ce qui ne permettait pas de se comporter différement selon le chemin emprunté.
Mon utilisation idéale d'un Form Object (FO) serait qu'il remplace complètement l'AR record qu'il wrappe dans le contrôleur et la vue, que l'on puisse faire
simple_form_for(user_form)
,user_form.save
, afficher les warnings du FO plutot que du record. Malheureusement ça ne se comporte pas très bien avecsimple_form
, principalement parce qu'il ne reconnaît pas bien les associations, même en déléguant bien du FO vers le record. Je fais donc un usage un peu hybride des deux objets, ce qui n'est pas très agréable :/À cause de cette remarque précédente, ce FO rajoute des erreurs et des warnings sur le record (plutôt que d'avoir ses propres warnings et erreurs, et de les fusionner avec ceux du record). En plus, on fait un truc un peu hacky avec le
active_warnings_confirm_decision
qui vient de la gemactivemodel-caution
: il faut bien qu'il soit setté au niveau des params du FO et pas de ceux du record, car il faut le mettre au même niveau que l'appel àcaution
😓 trickyContrôleur admin/users_controler
view_locals
qui vont être utilisées dans la génération des messages interactifs d'erreurs et de warnings. Ce n'est pas très agréable mais je n'ai pas d'autre solution en tête.active_warnings_confirm_decision
qui vient de la gemactivemodel-caution
Modèle User
beaucoup de nettoyage de vilaines méthodes :)
Screenshots
(après modifications décrites dans cette PR)
Screenshot avant après refacto pour utiliser le système d'avertissements générique
Screenshots admin/users#new meme orga
Screenshots admin/users#new different orga
Screenshots dans le tunnel RDV