Значок «Первый лайк» нельзя удалить

Описание: Пользователь попросил отозвать у него значок «Первый лайк» после того, как он сам отменил лайк под постом, но значок продолжал автоматически присваиваться снова. Контекст можно найти в моем предыдущем посте в категории поддержки.

Шаги для воспроизведения:

  1. Создайте нового пользователя
  2. Поставьте лайк под постом
  3. Получите значок «Первый лайк»
  4. Отмените лайк под постом
  5. Переключитесь на пользователя с правами администратора
  6. Перейдите в панель администратора для пользователя, поставившего лайк под постом
  7. Откройте опцию «Редактировать значки»
  8. Нажмите «Отозвать» на значке «Первый лайк»
  9. Подождите некоторое время (я не уверен, когда запускается фоновая задача для этого конкретного значка, но день точно хватит. Возможно, стоит попробовать запустить все задачи, связанные со значками, в Sidekiq, чтобы ускорить процесс?)
  10. Значок автоматически присваивается пользователю снова, за тот же пост, под которым лайк был отменен, и на ту же дату, когда лайк был поставлен

Я сузил проблему до этой строки SQL-запроса для присвоения значка, поскольку, хотя строка в таблице post_actions для действия «лайк» всё ещё существует после отмены лайка, у неё столбец deleted_at установлен в значение даты, которое запрос не учитывает. Я считаю, что исправление этой проблемы потребует изменения условия WHERE в подзапросе на:

      WHERE post_action_type_id = 2 AND
        pa.deleted_at IS NULL AND
        (:backfill OR pa.post_id IN (:post_ids) )

но у меня нет настроенной среды разработки или много времени, чтобы протестировать это исправление самостоятельно.

Приоритет/Серьезность: Я уже решил эту проблему для себя, удалив соответствующие строки в post_actions, и ранее мне никогда не поступали подобные запросы. Думаю, это не делает задачу очень приоритетной?

2 лайка

Они поставили лайк на пост. Снятие лайка не меняет того факта, что они доказали, что умеют ставить лайки. Возможно, они имеют право на значок «Первое снятие лайка», но теперь, когда они поставили лайк на пост, они поставили лайк. Они получают значок за то, что поставили лайк. Нельзя вернуть колокольчик в исходное состояние.

Это моя догадка.

Ваше решение было очень умным. Другой способ удалить их значок — удалить пользователя. :rofl:

2 лайка

Это правда, но я всё ещё считаю неочевидным, что я, как администратор, не могу отозвать этот бейдж у пользователя, даже после того, как он отменил лайк. По крайней мере, на кнопке «Отозвать» в представлении «Редактировать бейджи» должно быть какое-то уведомление о том, что бейдж нельзя отозвать? Вместо текущего поведения, когда бейдж незаметно выдаётся заново во время какой-то фоновой задачи по заполнению данных, заставляя администратора сомневаться, действительно ли он нажал эту кнопку или нет.

2 лайка

Согласен.

Я думаю, мой ответ был бы примерно таким:

Извините, Дэйв. Боюсь, я не могу этого сделать.

3 лайка

Перенёс это в раздел «Функции». Похоже, запрос на новую функцию звучит так:

Сделать возможным на 100% отзывать значки, которые проходят повторную оценку

или

Запретить администраторам отзывать значки, основанные на SQL или проходящие регулярную оценку


На данный момент моя рекомендация: «не делайте этого», но опыт работы администраторов, безусловно, можно улучшить.

1 лайк