Suppression en masse d'anciens et de sujets dispersés

Bonjour,

Nous avons des milliers de sujets anciens ou obsolètes sur notre forum que nous souhaitons supprimer. J’ai déjà cherché sur Meta une méthode appropriée pour y parvenir, mais je n’ai pas trouvé de solution adéquate.

Suffirait-il d’itérer sur une liste d’identifiants de sujets et de définir le drapeau deleted_at de chaque sujet à supprimer sur « vrai », ou existe-t-il une meilleure approche ? Je sais que c’est une solution assez paresseuse.

Je pense qu’il serait un peu trop lourd d’écrire un plugin supplémentaire (petit) pour utiliser Topic.destroy afin de procéder à une suppression en masse.

Cordialement,
Sascha

P.S.
Contexte : Ces sujets posent des problèmes de crawl et génèrent des soft 404, et nous souhaitons les masquer aux moteurs de recherche. Les sujets supprimés sont exclus de notre plan du site.

Peut-être souhaitez-vous simplement les retirer de la liste ? Cela devrait les empêcher d’être indexés.

Souhaitez-vous le faire une seule fois ou régulièrement ?

Bonjour,

Oui, nous souhaitons les retirer de la liste et empêcher leur indexation.
Cela sera fait une seule fois, car nous pourrons corriger manuellement tout futur sujet/publication « défaillant » qui pose des problèmes de crawl.

Notre forum est très ancien (créé en 1996) et a été migré à de nombreuses reprises, avec une syntaxe étrange ou obsolète dans le texte brut et d’autres éléments. Nous avons recensé tous les sujets antérieurs à 2015, ayant moins de 1000 vues et signalés comme « défaillants » dans la Search Console de Google.

Pour nous, il n’y a pas de problème si ces sujets sont simplement marqués comme supprimés, mais nous n’étions pas tout à fait sûrs de savoir si définir directement deleted_at était une bonne idée ou s’il existe des dépendances dont nous devrions tenir compte. Donc, si nous devons suivre la voie programmatique.

Si vous souhaitez les supprimer, je pense que vous devez vraiment appeler topic.delete. S’il existe des dépendances, elles seront gérées automatiquement.

Merci pour vos conseils ! Dans le cas où nous choisirions de supprimer complètement ces sujets, je définirai deleted_at et visible=false via une requête SQL. Ces sujets seront supprimés par un job Sidekiq après 30 jours.

Cependant, si ces sujets doivent être conservés, je ferai ce que vous avez suggéré et les « supprimerai » via un petit snippet Ruby en utilisant topic.delete.

Dans les deux cas, ces sujets seront donc traités par Discourse lui-même à la fin, ce qui devrait prendre en charge les éventuelles dépendances.

Merci beaucoup !