Salut tout le monde ! J’ai cherché, mais je n’ai rien trouvé.
Y a-t-il un moyen d’attribuer un badge en fonction de la durée pendant laquelle un utilisateur est modérateur ?
Dans notre cas, nous avons des modérateurs qui font partie intégrante de l’équipe depuis de nombreuses années et nous voulons leur donner un badge spécial.
Fondamentalement, la requête doit vérifier les conditions :
L’utilisateur est-il actuellement un modérateur ?
Depuis combien de jours l’utilisateur occupe-t-il un rôle de modérateur ?
De cette façon, nous voulons distribuer des badges aux modérateurs qui sont actifs depuis 1 an, 3 ans, 5 ans, etc.
Je n’ai pas encore essayé de le configurer en tant que badge SQL, mais voici une requête d’explorateur de données pour obtenir les jours de modération en tant que leur rôle :
WITH moderator_role_dates AS (
SELECT
gu.user_id,
MIN(gu.created_at) AS role_granted_date
FROM
group_users gu
JOIN groups g ON gu.group_id = g.id
WHERE
g.name = 'moderators'
GROUP BY
gu.user_id
),
current_date_info AS (
SELECT
CURRENT_DATE AS today
)
SELECT
mrd.user_id,
u.username,
mrd.role_granted_date,
cdi.today,
(cdi.today - mrd.role_granted_date) AS days_in_role
FROM
moderator_role_dates mrd
JOIN users u ON mrd.user_id = u.id,
current_date_info cdi
ORDER BY
days_in_role DESC
J’ai juste marqué ceci comme sql-triggered-badge, mais j’ai pensé vérifier si vous cherchiez un badge automatique ou non ? Je suppose que vous n’avez peut-être pas énormément de modérateurs et que vous pourriez peut-être accorder ce badge manuellement sur la base d’une requête d’explorateur de données ?
Je pense qu’une version simplifiée de celle ci-dessus pourrait être :
-- [params]
-- int :years
WITH time_in_mod_group AS (
SELECT
user_id,
(CURRENT_DATE - created_at::date) AS days_as_mod
FROM group_users
WHERE group_id = 2 -- group id of the 'moderator' group
AND user_id > 0 -- exclude system users and bots
)
SELECT
user_id,
days_as_mod
FROM time_in_mod_group
WHERE days_as_mod > (365 * :years)
Celle-ci fonctionnerait comme une requête d’explorateur de données plutôt que comme un ensemble de badges SQL, et peut sélectionner une liste d’utilisateurs qui correspondent aux critères afin que vous puissiez leur accorder manuellement le badge.
Il y a une mise en garde : s’ils ont quitté le groupe de modérateurs à un moment donné et l’ont rejoint, cela ne compterait que la dernière inclusion. Je pense qu’il serait possible d’utiliser la table user_histories pour contourner cela, mais s’il s’agit d’une exception, il est probablement plus facile de la prendre en compte manuellement également.
Oui, il est censé être automatique. En gros, nous voulons simplement définir plusieurs badges pour les modérateurs (1 an, 2 ans, 3 ans, etc.) en fonction de la durée de leur mandat de modérateur et leur attribuer automatiquement des badges.
Je pense que celui ci-dessus est adaptable si vous supprimez le paramètre et changez le WHERE pour être les différents seuils de jours pour chacun, par exemple.
Merci, techniquement nous pourrions le faire, mais tant que nous pouvons le faire automatiquement d’une manière qui ne compromet pas la sécurité, nous préférerons opter pour cela.
J’apprécie vraiment le code et nous essaierons de le mettre en œuvre avec notre hébergeur CommuniteQ et nous vous ferons un retour ici.