Discourse-Beitragsbewertung

Ich denke das auch. :slight_smile: Aber Sam ist fest davon überzeugt, dass es das gibt:

Es sieht nicht so aus, als gäbe es dafür schon Badges.

Wenn Sie spezifische Kriterien für Badges haben, die Sie erstellen möchten, sollten Sie für jeden einzelnen ein Thema unter Data & reporting eröffnen. :+1:

Ich denke, ein paar Beispiele könnten in der Art sein:

Erhalte 10 Stimmen für eine Antwort, die abstimmt

SELECT p.user_id, p.created_at AS granted_at, p.id AS post_id
FROM post_voting_votes pvv
  JOIN posts p ON p.id = pvv.votable_id
WHERE pvv.direction = 'up'
  AND p.post_number <> 1
  AND (:backfill OR p.id IN (:post_ids))
GROUP BY p.user_id, p.id
HAVING COUNT(*) >=10

Oder eine etwas nuanciertere Variante, bei der Sie die „Up- vs. Down“-Stimmen berücksichtigt haben:

WITH vote_totals AS (

SELECT
    p.user_id,
    p.id AS post_id,
    p.created_at AS granted_at,
    (COUNT(*) FILTER (WHERE pvv.direction = 'up') - COUNT(*) FILTER (WHERE pvv.direction = 'down')) AS total
FROM post_voting_votes pvv
  JOIN posts p ON p.id = pvv.votable_id
WHERE p.post_number <> 1
GROUP BY 1, 2

)

SELECT *
FROM vote_totals
WHERE total >= 10
  AND (:backfill OR post_id IN (:post_ids))

:red_exclamation_mark: Diese müssen noch weiter getestet werden, um sicherzustellen, dass sie wie beabsichtigt funktionieren. :slight_smile:

Man sollte jedoch bedenken, dass die Gesamtzahl dynamisch ist, sodass aus einem heutigen „10“ morgen ein „5“ werden könnte, wenn weitere Downvotes hinzugefügt werden (für das zweite Beispiel). Und wenn das Badge nur auf Upvotes basiert, wie im ersten Beispiel, dann haben Sie vielleicht 10 erhalten, aber die Benutzeroberfläche zeigt nur 5 an, wenn die Downvotes eingerechnet werden.

5 „Gefällt mir“