Lilly
(Lillian Louis)
Août 26, 2023, 9:47
1
Je ne saisis pas entièrement la condition de remplissage, alors je vais demander à Lola Bot de l’expliquer.
2 « J'aime »
Sam Saffron:
Le badge suivant est déclenché sur « lorsqu’un utilisateur agit sur un message », cela signifie que les applications « delta » recevront le paramètre :post_ids.
SELECT p.user_id, p.id post_id, p.updated_at granted_at
FROM badge_posts p
WHERE p.like_count >= 25 AND
(:backfill OR p.id IN (:post_ids) )
La clause (:backfill OR p.id IN (:post_ids) ) nous permet de filtrer les résultats. Lorsque le travail quotidien s’exécute, :backfill est vrai, donc l’ensemble est analysé. Lorsque les travaux delta s’exécutent, :backfill est faux et :post_ids est défini.
J’essayais de le faire déclencher sur « Lorsqu’un utilisateur agit sur un message », mais je pense que mes réactions pourraient bloquer cela d’une manière ou d’une autre ? Quoi qu’il en soit, la mise à jour quotidienne fonctionnera et ne pose pas autant de problèmes de performance, je pense.
5 « J'aime »
Lilly
(Lillian Louis)
Août 26, 2023, 9:58
3
Oui, cela me semble tout à fait logique maintenant. Je pense que je préfère l’explication de Sam.
Peux-tu expliquer un peu plus la condition de remplissage Lola ?
Lola Bot:
Certainement, Lilly ! Dans Discourse, :backfill et :post_ids sont des paramètres utilisés lors de l’exécution des requêtes de badges. Ils servent à contrôler quels messages sont pris en compte lors de l’attribution du badge.
:backfill est un paramètre booléen. Lorsque :backfill est true, la requête de badge est exécutée sur tous les messages éligibles de la base de données. Ceci est généralement utilisé lorsque vous créez un badge pour la première fois ou lorsque vous souhaitez recalculer qui devrait avoir le badge en fonction de toutes les données historiques.
:post_ids est une liste d’identifiants de messages. Lorsque :backfill est false, la requête de badge n’est exécutée que sur les messages dont les identifiants sont dans la liste :post_ids. Ceci est généralement utilisé pour vérifier si un badge doit être attribué en fonction d’un nouveau message ou d’un ensemble de messages récents, plutôt que de tous les messages.
La condition (:backfill OR p.id IN (:post_ids)) dans la clause WHERE de la requête SQL garantit que :
Si :backfill est true, la condition sera toujours true et tous les messages seront pris en compte (car true OR quoi que ce soit est toujours true).
Si :backfill est false, seuls les messages dont les identifiants sont dans la liste :post_ids seront pris en compte (car false OR p.id IN (:post_ids) sera true uniquement pour les messages dont les identifiants sont dans la liste :post_ids).
Cela permet à Discourse d’attribuer efficacement des badges soit en fonction de tous les messages historiques, soit en fonction d’un petit ensemble de messages récents, en fonction de la situation.
5 « J'aime »
Je pense que je dois examiner quelles requêtes de badges en ont réellement besoin. Je pense que si vous utilisez Update Daily, ce n’est pas nécessaire :
2 « J'aime »
system
(system)
A fermé ce sujet ()
Septembre 25, 2023, 10:06
6
This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.