Я изучил существующие запросы для бейджей, чтобы понять, какие из них нацелены на посты в таблице badge_posts или используют другие методы исключения постов из защищённых категорий.
Следующие бейджи, использующие конкретные посты, не будут присуждаться за активность в приватных категориях:
- Редактор
- Первый флаг
- Первый лайк
- Первая ссылка
- Первое цитирование
- Первый шеринг
- Первый эмодзи
- Первое упоминание
- Первая вставка (Onebox)
- Первый ответ по электронной почте
- Читатель
- Редактор вики
- Великолепный шеринг
- Хороший шеринг
- Служба поддержки
- Приятный шеринг
- Добро пожаловать
- Знаменитая ссылка
- Великолепный ответ
- Великолепная тема
- Хороший ответ
- Хорошая тема
- Горячая ссылка
- Приятный ответ
- Приятная тема
- Популярная ссылка
Следующие бейджи не запрашивают конкретные посты и будут присуждаться за активность в приватных категориях:
- Лицензированный
- Автобиограф
- Сертифицированный
- Новый пользователь месяца
- Прочитал правила
- Восхищённый
- Чемпион
- Безумно влюблённый
- Преданный
- Эмпатичный
- Афисионадо
- Юбилей
- Активист кампании
- Возвращает долг
- Высшая любовь
- Уважаемый
- Оценённый
- Энтузиаст
- Из любви
- Промоутер
- Спасибо
- Лидер
- Регулярный
- Базовый
- Участник
- Персонал
- Фото профиля
Что-то подобное уже покрыто бейджами «Оценённый» (1 лайк на 20 постах) и «Уважаемый» (2 лайка на 100 постах). Можно добавить некоторые вариации этих запросов. Например, 10 лайков на 20 постах. Также хорошей идеей мог бы стать бейдж за темы с супер-лайками — он функционировал бы как аналог бейджа «Великолепные темы». Например, его можно было бы присуждать, когда пользователь создал 10 тем, получивших по 10 лайков.
Не уверен, имеет ли смысл добавлять бейдж, присуждаемый за активность на одном посте или в одной теме, без ссылки на этот пост. Например, можно создать альтернативный бейдж «Первый лайк» со следующим SQL-запросом:
SELECT pa1.user_id, pa1.created_at granted_at
FROM (
SELECT pa.user_id, min(pa.id) id
FROM post_actions pa
JOIN posts p on p.id = pa.post_id
WHERE post_action_type_id = 2
GROUP BY pa.user_id
) x
JOIN post_actions pa1 on pa1.id = x.id
Чтобы запрос работал, необходимо использовать триггер «Обновлять ежедневно» вместо запроса «Когда пользователь действует над постом». На странице «Бейджи» будут показаны пользователи, получившие бейдж, вместе с временем его присуждения. Ссылки на пост, за который был присуждён бейдж, не будет:
Имеет ли смысл такой подход для сайтов, где большинство категорий защищены? Если да, то его можно использовать для дублирования некоторых запросов, которые в настоящее время нацелены на таблицу badge_posts.