Skip to content

Fix: mise à jour de la liste des agents d’un RDV #5169

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

Merged
merged 4 commits into from
Apr 29, 2025

Conversation

AntoineGirard
Copy link
Member

@AntoineGirard AntoineGirard commented Mar 12, 2025

Contexte

En explorant un bug concernant les mails transactionnels qui ne partaient pas quand on ajoute un agent à un RDV, je me suis rendu compte d’un comportement anormal.

En tant qu’agent, si j’édite un RDV et que celui-ci n’est pas valide au moment de la soumission (et que je n’ignore pas l’avertissement), le RDV n’est pas sauvegardé mais la liste des agents oui. Le comportement est reproduit dans la spec du premier commit.

Le problème vient du assign_attributes(attributes) positionné avant le valid? et le save. Il déclenche un self.agent_ids = new_agent_ids qui écrit en db, ce qui est un comportement connu et documenté mais très surprenant de Rails.

Solution

Je propose une solution qui améliore la situation mais ne la résoud pas à 100% : je décale ce self.agent_ids = plus bas, après la vérification du valid?.

Il peut donc encore y avoir des états incohérents si le .agent_ids= passe mais pas le .save consécutif. C’est nettement moins probable.

A ma connaissance, il n’y a pas de validation sur les agents associés à un RDV au moment de l’update donc ça ne pose pas de soucis de décaler le agent_ids= après la vérification de la validité.

@adipasquale adipasquale force-pushed the fix-agents-rdvs-creation-before-rdv-valid branch from aad2591 to 3c3470a Compare April 28, 2025 15:32
@adipasquale adipasquale marked this pull request as ready for review April 29, 2025 07:01
@@ -11,11 +11,15 @@ def initialize(rdv, agent_context)
end

def submit(rdv_attributes)
raise ArgumentError, "agent_ids est accepté mais pas agents" if rdv_attributes.key?(:agents)
Copy link
Contributor

Choose a reason for hiding this comment

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

j’ai rajouté cette ligne pour expliciter qu’il faut passer agent_ids et pas agents, ce qui était le cas dans ta première version des specs @AntoineGirard .

On pourrait adopter d’autres solutions.
Une manière serait d’accepter une liste en dur d’attributs plutôt que rdv_attributes qui est un peu « dangereux ».

Une autre manière, que je pense proposer dans une PR successive est de modifier ce submit pour recevoir la liste de params du controlleur et faire le parsing directement ici. Ce formulaire est appelé à un seul endroit donc ça me semble raisonnable de décaler le parsing ici, aussi parce que le controlleur déborde un peu actuellement

let!(:rdv2) { create(:rdv, agents: [agent_mayra], organisation:, starts_at: Time.zone.parse("2025-04-29 18:00")) }
let(:base_attributes) do
{
starts_at: Time.zone.parse("2025-04-28 10:30"), # le même horaire que rdv1, déclenche une erreur contournable
Copy link
Contributor

Choose a reason for hiding this comment

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

@AntoineGirard j’ai modifié les specs pour que le cas soit plus réaliste : on tente de changer l’heure et les agents en même temps.

Copy link
Member Author

@AntoineGirard AntoineGirard left a comment

Choose a reason for hiding this comment

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

Merci @adipasquale d’avoir itéré sur le sujet

J’étais parti sur des solutions un peu plus lourdes à la mise en œuvre, mais je n’avais pas eu le temps d’aboutir à quelque chose de satisfaisant à l’époque

Pour une première itération ça me va très bien !

La solution que tu proposes dans un deuxième temps me semble parfaitement convenable aussi

@adipasquale adipasquale enabled auto-merge (squash) April 29, 2025 12:21
@github-project-automation github-project-automation bot moved this from 🔖 Ready to 🚀 To deploy in RDV Service Public Apr 29, 2025
@adipasquale adipasquale merged commit b999a9f into production Apr 29, 2025
16 checks passed
@github-project-automation github-project-automation bot moved this from 🚀 To deploy to ✅ Done in RDV Service Public Apr 29, 2025
@adipasquale adipasquale deleted the fix-agents-rdvs-creation-before-rdv-valid branch April 29, 2025 12:21
adipasquale added a commit that referenced this pull request May 12, 2025
* Fix: mise à jour de la liste des agents d’un RDV

* improve spec

* fix spec

---------

Co-authored-by: Adrien Di Pasquale <[email protected]>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
Status: ✅ Done
Development

Successfully merging this pull request may close these issues.

2 participants