[BUGFIX] Gerer les erreurs en cas de conflit avec la contrainte d'unicité de profile rewards (PIX-16129) #11140
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
🥞 Problème
Nous avons gérés au niveau du usecase le cas ou un utilisateur a déjà obtenu la récompense liée a la quête en cours. Mais il est arrivé un cas où un utilisateur qui spam un peu les réponses arrive a avoir deux requêtes en parallèle pour la même récompense et donc fait casser l'insertion à cause de la contrainte d'unicité mise en place sur la table profile reward
🥓 Proposition
Nous n'avons pas besoin de "gérer" le traitement de cette erreur car ce n'est pas un cas qui doit arriver dans un cas d'usage standard, donc on décide de simplement ignorer l'insertion si la ligne existe déjà et qu'elle déclenche l'erreur de la contraeinte d'unicité
🧃 Remarques
L'équipe xp d'éval à déjà eu des soucis de concurrence sur cette route (/api/answers), ces bugs seront peut être corrigés dans un futur mais sont déjà connus.
😋 Pour tester
Compliqué de faire un test fonctionnel pour ce cas la car c'est difficile a reproduire la concurrence des requêtes dans les environnements de tests
J'ai écris le test d'intégration en premier pour "reproduire" le cas d'erreur qu'on a eu, et effectivement, il cassait avant d'ajouter le onConflict 👍
🐈⬛