Skip to content

Employeur : Historique des SIRET#4945

Merged
rsebille merged 1 commit intomasterfrom
rsebille/trigger-siret-history
Nov 21, 2024
Merged

Employeur : Historique des SIRET#4945
rsebille merged 1 commit intomasterfrom
rsebille/trigger-siret-history

Conversation

@rsebille
Copy link
Copy Markdown
Contributor

@rsebille rsebille commented Oct 17, 2024

🤔 Pourquoi ?

  • C'est très utile pour le support (et aussi nous) d'avoir les anciens SIRET d'une entreprise
  • On a déjà 2 modèles qui font ce genre de chose mais uniquement si on passe par le .save() et pas tout à faire de la même manière

Lors de l'édition dans des transactions //, le 2ème UPDATE bloque jusqu'à ce que la transaction ayant déjà fait un UPDATE soit COMMIT donc on ne devrais pas avoir de perte de données mais par contre possible qu'on crée des dead locks, à surveiller.

🏝️ Comment tester

Les tests sont normalement parlant, sinon ça fonctionne aussi via psql ou tout autre moyen modifiant le champ ;)

@rsebille rsebille self-assigned this Oct 17, 2024
@rsebille rsebille added the ajouté Ajouté dans le changelog. label Oct 17, 2024
Copy link
Copy Markdown
Contributor

@tonial tonial left a comment

Choose a reason for hiding this comment

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

🤩

@xavfernandez
Copy link
Copy Markdown
Contributor

Je me demande si on ne voudrait pas defer ce champs dans le base_manager vu qu'a priori on ne l'utilisera que dans l'admin ?
Cf https://adamj.eu/tech/2023/12/11/django-always-defer-a-field/

Copy link
Copy Markdown
Contributor

@xavfernandez xavfernandez left a comment

Choose a reason for hiding this comment

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

😍

Comment thread itou/utils/triggers.py
@rsebille rsebille force-pushed the rsebille/trigger-siret-history branch 2 times, most recently from 131b220 to 3ca5899 Compare November 4, 2024 14:30
@rsebille rsebille force-pushed the rsebille/trigger-siret-history branch 3 times, most recently from e204ea2 to 7411608 Compare November 14, 2024 17:11
@rsebille
Copy link
Copy Markdown
Contributor Author

J'ai rajouté le .defer() car les managers étaient là mais vu qu'a plein d'autre endroit c'est pas pris en compte je sais pas si au final on veux avoir cette différence de comportement, car elle peux surprendre suivant les cas d'utilisations.

Pour les histoires de nom de champs et de DB j'ai utilisé .column plutôt que .get_attname_column() qui semble aussi faire le boulot.

J'en ai également profité pour tester dans psql cette histoire de transaction //, et ai donc mis à jour le corps de la PR avec le résultat.

Lors de l'édition dans des transactions //, le 2ème UPDATE bloque jusqu'à ce que la transaction ayant déjà fait un UPDATE soit COMMIT donc on ne devrais pas avoir de perte de données mais par contre possible qu'on crée des dead locks, à surveiller.

Et avec l'ajout du champs dans l'admin je pense qu'on est sur quelque chose de fusionnable la semaine prochaine.

@xavfernandez
Copy link
Copy Markdown
Contributor

Pour les histoires de nom de champs et de DB j'ai utilisé .column plutôt que .get_attname_column() qui semble aussi faire le boulot.

Cf https://github.com/django/django/blob/stable/5.1.x/django/db/models/fields/__init__.py#L937 ça me semble bien 👍

@rsebille rsebille changed the title Employeur : Historique des changements de SIRET en utilisant un trigger PG générique et réutilisable Employeur : Historique des SIRET Nov 18, 2024
@rsebille rsebille force-pushed the rsebille/trigger-siret-history branch from 7411608 to 606bd8b Compare November 18, 2024 11:26
@rsebille rsebille marked this pull request as ready for review November 18, 2024 11:26
Comment thread itou/companies/models.py
),
verbose_name="historique des champs modifiés sur le modèle",
default=list,
)
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

nit: comme le champs n'est pas nullable, je me demande si on ne devrait pas mettre un db_default=[] pour ne pas casser la création (improbable) d'une Company pendant le déploiement ?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Tu m'as mis le doute depuis le temps, mais django gère le truc comme il faut :

❯ ./manage.py sqlmigrate companies 0014
BEGIN;                                                                                                                                                         
--                                                                         
-- Add field fields_history to company
--                                                                                                                                                             
ALTER TABLE "companies_company" ADD COLUMN "fields_history" jsonb[] DEFAULT '{}' NOT NULL;
ALTER TABLE "companies_company" ALTER COLUMN "fields_history" DROP DEFAULT;
...

Copy link
Copy Markdown
Contributor

@xavfernandez xavfernandez Nov 20, 2024

Choose a reason for hiding this comment

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

Euh oui, il gère l'ajout de la colonne :)
Mais après il DROP le DEFAULT: tu as maintenant une colonne NOT NULL sans valeur par défaut.
Donc l'ancien code (qui tourne toujours après le passage de la migration), quand il va tenter un INSERT: 💥 .

Après on peut tout à fait se dire que la création d'entreprise est assez rare pour que ça n'arrive pas pendant le déploiement de cette PR.

@rsebille rsebille force-pushed the rsebille/trigger-siret-history branch from 606bd8b to be8b7f2 Compare November 20, 2024 13:47
@rsebille rsebille force-pushed the rsebille/trigger-siret-history branch from be8b7f2 to 613c9a5 Compare November 21, 2024 13:57
@rsebille rsebille added this pull request to the merge queue Nov 21, 2024
Merged via the queue into master with commit 1a4fb4a Nov 21, 2024
@rsebille rsebille deleted the rsebille/trigger-siret-history branch November 21, 2024 14:28
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

ajouté Ajouté dans le changelog.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants