Pour un déclenchement personnalisé, je pense que vous devriez pouvoir copier la requête de la campagne et la modifier pour qu’elle fonctionne pour les badges au lieu des invitations.
Celle-ci est pour avoir 5 ‘Badge 108’, et serait configurée pour se mettre à jour quotidiennement.
SELECT u.id user_id, current_timestamp granted_at
FROM users u
WHERE u.id IN (
SELECT ub.user_id
FROM user_badges ub
WHERE ub.badge_id = 108
GROUP BY ub.user_id
HAVING COUNT(*) >= 4
) AND u.active AND u.silenced_till IS NULL AND u.id > 0 AND
(:backfill OR u.id IN (:user_ids) )
Je l’ai brièvement testée sur mon site de test et elle semble fonctionner correctement (j’ai déclenché le job Sidekiq de Badge Grant pour accélérer l’attente). Mais j’espère que cela vous donne au moins un point de départ.
Il y a aussi quelques exemples différents ici que vous pouvez utiliser pour vous inspirer, si vous ne l’avez pas encore trouvé, Some common badge queries
> ActiveRecord::PreparedStatementInvalid: valeur manquante pour :backfill dans /*
> * DataExplorer Query
> * Query: /admin/plugins/explorer?id=13
> * Started by: alefattorini
> */
> WITH query AS (
> SELECT u.id user_id, current_timestamp granted_at
> FROM users u
> WHERE u.id IN (
> SELECT ub.user_id
> FROM user_badges ub
> WHERE ub.badge_id = 102
> GROUP BY ub.user_id
> HAVING COUNT(*) >= 1
> ) AND u.active AND u.silenced_till IS NULL AND u.id > 0 AND
> (:backfill OR u.id IN (:user_ids) )
> ) SELECT * FROM query
> LIMIT 1000
Il semble que vous ayez exécuté cela dans l’explorateur de données. Pour les badges SQL personnalisés, vous devrez activer le paramètre de site caché et ajouter la requête à la page des badges :
Cependant, tout le monde ne peut pas le faire en fonction de son package d’hébergement.
Mais un explorateur de données est plus que possible aussi si vous ne pouvez pas avoir ceux déclenchés par SQL personnalisé. Je pense que vous devrez faire des choix sur la fréquence d’exécution et sur la manière dont les badges seraient attribués à partir des résultats (manuellement un par un, ou par attribution en masse), mais c’est tout à fait réalisable.
Quelque chose de simple pourrait être mieux, bien que vous souhaitiez peut-être également ajouter un paramètre de plage de dates ?
WITH foo AS (SELECT ub.user_id,count(ub.user_id), max(ub.granted_at) granted_at
FROM user_badges ub
WHERE ub.badge_id=108
GROUP BY ub.user_id)
SELECT user_id, granted_at
FROM foo
WHERE count >4
ORDER BY granted_at DESC
C’est super. Je trouve que copier les requêtes de badge existantes et les modifier est très utile pour avoir une idée par où commencer. Je suis sûr qu’elles pourront ensuite être affinées davantage si vous rencontrez des problèmes avec l’une d’elles.