-
Notifications
You must be signed in to change notification settings - Fork 14
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 d'un générateur de numeros de datapass ID #595
Conversation
class IdGenerator(models.Model): | ||
code = models.CharField(max_length=100, unique=True) | ||
last_id = models.PositiveIntegerField() | ||
|
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.
On pourrait rajouter un unique_together sur code / last_id, mais je ne l'ai pas fait, je ne sais pas ce que vous en pensez.
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.
Le unique
sur code
me semble suffisant (et nécessaire).
@@ -1440,6 +1440,11 @@ def createTOTPDevice(self, confirmed=False, tolerance=30): | |||
) | |||
|
|||
|
|||
class IdGenerator(models.Model): | |||
code = models.CharField(max_length=100, unique=True) |
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.
Ici un ajout d'un code pour pouvoir utiliser la table pour générer plusieurs ID, au cas où
id_datapass.last_id = F('last_id') + 1 | ||
id_datapass.save() | ||
id_datapass.refresh_from_db() | ||
return id_datapass.last_id |
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.
On bloque la table sur la ligne qui nous intéresse et on calcule la nouvelle valeur que l'on renvoie.
L'utilisation du F oblige à faire un refresh_from_db.
|
||
import qrcode | ||
|
||
if TYPE_CHECKING: | ||
from aidants_connect_web.models import Aidant, Usager | ||
|
||
|
||
@transaction.atomic |
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.
Question : si on est dans une autre fonction "transaction.atomic" et qu'on appelle un generate_new_datapass_id(), est-ce que ça va marcher correctement ?
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.
oui ca va "empiler" les transactions
2c136e7
to
c539b29
Compare
Bon, j'avoue, je comprends pas bien ce qu'il se passe dans cette PR. Je vais faire confiance à mes collègues. |
c539b29
to
ee32ac4
Compare
🌮 Objectif
Proposition d'une méthode sereine pour generer des datapassid en evitant les collisions possibles
🔍 Implémentation
Une nouvelle table pour stocker le dernier numéro, une migration de donnée pour le positionner a 10000 et une fonction de génération utilisation select_for_update et les F pour éviter les collisions de générations.
j'ai choisi d'avoir une table qui pourrait stocker plusieurs "id généré" au cas ou.
🏕 Amélioration continue
(optionnel) Documentation, commandes à lancer, variables d'environment, etc
🖼️ Images
(optionnel) Une ou plusieurs captures d'écran