Предложить использовать флаг «Уведомлять пользователей» для ЛС

Мы хотим побудить пользователей чаще отправлять личные сообщения с критикой или личными отзывами о постах (и делать это в вежливой и дружелюбной манере), вместо того чтобы публиковать их публично и тем самым, возможно, уводить разговор в сторону от темы. Вот значок:

Запрос:

SELECT p.user_id, current_timestamp AS granted_at
FROM posts AS p
JOIN topics t on t.id = p.topic_id
WHERE t.archetype = 'private_message'
AND t.title LIKE 'Ваш пост в "%"'
AND p.post_number = 1
AND p.like_count >= 1
AND (:backfill OR p.user_id IN (:user_ids))
GROUP BY p.user_id
HAVING count(*) >= 1

Я не нашёл конкретного триггера для сообщений с флагами, поэтому запрос использует заголовок по умолчанию «Ваш пост в …». Скорее всего, значок можно легко обмануть или сфальсифицировать несколькими способами, но он всё равно достигнет своей цели, просто повысив видимость этой функции и дав понять, что это считается позитивным действием для сообщества.

Может быть, это основано на post_action для «Уведомить пользователя»?

Что-то вроде:

SELECT pa.user_id, current_timestamp AS granted_at
FROM post_actions pa
  JOIN posts p ON p.id = pa.related_post_id
WHERE pa.post_action_type_id = 6
  AND p.like_count >= 1
  AND (:backfill OR p.user_id IN (:user_ids))
GROUP BY pa.user_id
HAVING COUNT(*) >= 1

На самом деле, я думаю, что речь идёт о ссылках в посте, на котором основан флаг, а не в ЛС. Возможно, потребуется небольшая корректировка.

Быстрое изменение в соединении, чтобы p.id = pa.related_post_id, должно решить задачу, думаю. :+1:

Я считаю, что HAVING нужен только в том случае, если вы хотите выдать серебряную и золотую версии для чего-то большего, чем один элемент.