Skip to content
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

Ajout du champ notification_email pour les usagers, modifiable uniquement via l'api (par rdv-insertion) #5003

Draft
wants to merge 3 commits into
base: production
Choose a base branch
from

Conversation

Holist
Copy link
Contributor

@Holist Holist commented Jan 22, 2025

Closes gip-inclusion/rdv-insertion#2065

Contexte

Nous avons besoin de pouvoir assigner à différents usagers le même email de notification lors de la création des comptes pour les invitations à prendre rdv dans rdv-insertion dans le cas d'un couple conjoint demandeur RSA ou dans le cas d'un déménagement (plusieurs comptes seront créés sur les différents territoires).

Un début d'implémentation avait été réalisé en septembre dernier ici et ici. Il n'a pas été poursuivi car cela avait des répercussions trop importantes, notamment le renommage du champ email en account_email.
Suite à cela une spec fonctionnelle et technique a été réalisée pour évaluer les options possibles.
Une discovery a été mené par @NesserineZarouri à ce sujet pour identifier les besoins coté RDVSP.
Il en est ressorti qu'il n'y a pas de besoin de cette fonctionnalité aujourd'hui coté RDVSP.
On a donc décidé de choisir l'implémentation minimale de la fonctionnalité tout en pouvant évoluer si besoin.

Solution

On ajoute le champ notification_email pour les usagers.
Ce champ est modifiable uniquement via l'api et seulement pour les clients qui utilisent le shared secret (uniquement rdv insertion).
Dans le front on affiche l'email de notification dans la show de l'usager si celui ci existe pour que les agents rdvi connectés à rdvsp puissent avoir l'information.
Dans l'edit du formulaire de l'usager il n'y a pas de changement. Si un email est renseigné celui ci prendra la valeur du champ email et un callback effacera le champ notification_email de l'usager.
Les mailers sont modifiés pour utiliser l'email ou le notification_email en fonction de celui qui est rempli.

Techniquement

J'ai hésité à ajouter de nouveaux endpoint create et update au Api::Rdvinsertion::UsersController. Au final j'ai préféré modifier Api::V1::UsersController afin d'éviter de la duplication de code qui pourrait poser problème si on doit un jour mettre à jour ces méthodes.

@Holist Holist self-assigned this Jan 22, 2025
@@ -6,6 +6,8 @@ class UserBlueprint < Blueprinter::Base
:notify_by_email, :invitation_created_at, :invitation_accepted_at, :created_at, :case_number, :address_details,
:logement, :notes

field :notification_email, if: ->(_field_name, _user, options) { options[:include_notification_email] }
Copy link
Contributor Author

Choose a reason for hiding this comment

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

A voir si on ne souhaite pas conditionner de cette façon, on pourrait toujours afficher le champ si il est rempli par exemple.

Copy link
Contributor

@francois-ferrandis francois-ferrandis left a comment

Choose a reason for hiding this comment

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

J'ai fait un premier tour, je suis trop sous l'eau cette semaine car on est en sous-effectif, je reste bien chaud pour discuter des points soulevés, on peut s'appeler demain ou vendredi !


def change
add_column :users, :notification_email, :string
add_index :users, :notification_email, algorithm: :concurrently
Copy link
Contributor

Choose a reason for hiding this comment

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

Un index partiel (WHERE NOT NULL) mer semble très judicieux ici !

@@ -90,6 +91,11 @@ def email=(value)
super(value&.gsub(".@", "@")&.gsub("..", "."))
end

def notification_email=(value)
# On applique les mêmes corrections pour notification_email
super(value&.gsub(".@", "@")&.gsub("..", "."))
Copy link
Contributor

Choose a reason for hiding this comment

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

Je pense qu'on peut factoriser dans une méthode de classe du genre .sanitize_email(email) puis appeler super(sanitize_email(value))

Comment on lines -56 to +58
attrs -= User::FranceconnectFrozenFieldsConcern::FROZEN_FIELDS if @user&.logged_once_with_franceconnect?
# Seul rdv-insertion peut enregistrer l'email de notification des usagers
# Celui ci permet de notifier plusieurs usagers avec le même email
base_attrs << :notification_email if rdvinsertion_request?
Copy link
Contributor

Choose a reason for hiding this comment

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

Je trouve ça étonnant qu'on ait un champ uniquement dispo à RDV-I dans notre API publique. Quel est le risque de rendre ce champ utilisable par n'importe qui ?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
Status: 🔖 Ready
Development

Successfully merging this pull request may close these issues.

[Bug] Un conjoint et un demandeur ne peuvent pas utiliser les mêmes emails de contact
2 participants