GeotrekCE / Geotrek-admin

Paths management for National Parks and Tourism organizations
https://geotrek.fr
BSD 2-Clause "Simplified" License
130 stars 76 forks source link

Mécanismes de suppression des données/catégories #3887

Open Chatewgne opened 5 months ago

Chatewgne commented 5 months ago

Bonjour,

nous avons récemment révisé le système de suppression en cascade (exemple de cascade : la suppression d'une pratique sportive qui entraînait la suppression de tous les itinéraires associés à cette pratique), ce afin d'éviter la perte involontaire de données, avoir un système plus logique et homogène, et également mieux tracer la raison des suppressions dans l'historique : https://github.com/GeotrekCE/Geotrek-admin/pull/3549. Désormais la plupart des liens entre les objets sont protégés, c'est à dire qu'on ne peut pas supprimer une pratique (catégorie) si des itinéraires (objets) y sont encore associés.

Mais suite à ce travail on peut désormais rencontrer un autre problème : ne pas réussir à supprimer une catégorie malgré la suppression préalable des objets qui lui sont associés. Cela est du au fait que les objets ne sont pas réellement supprimés dans la base, il sont conservés mais leur champ deleted est passé à True (NoDeleteMixin dans les modèles).

Ce ticket vise à rassembler les réflexions autour des mécanismes de suppression pour arriver à quelque chose de plus satisfaisant.

Pistes :

camillemonchicourt commented 5 months ago

J'ai une autre proposition plus radicale. Supprimer NoDeleteMixin, comme discuté et validé en 2020 lors du premier groupement de commandes : https://github.com/GeotrekCE/Geotrek-admin/issues/2136

On a reporté cela à cause de questions à trancher et de complexité, même cette suppression logique des objets plutôt que physique est clairement à remettre en cause :

Chatewgne commented 5 months ago

Merci pour les éléments de réponse @camillemonchicourt

Chatewgne commented 5 months ago

Point de vigilance d'après @submarcos, si l'on supprime ce mixin, il faudra faire attention aux mécanismes d'invalidation de cache qui peuvent se baser sur ce champ deleted, ça peut avoir des conséquences