Изменения не сохраняются в таблице user_actions

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

Основные предположения

Если пользователь А редактирует то, что написал пользователь Б, происходит следующее:

  • В таблицу post_revisions добавляется новая строка.
  • В таблицу user_actions добавляется новая строка с action_type = 11.
  • Перейдя по адресу /u/userB/notifications/edits, пользователь Б сможет увидеть, что новое редактирование выполнил пользователь А (это зависит от user_actions).
  • Нажав на значок карандаша в своём посте, пользователь Б сможет увидеть само редактирование, выполненное пользователем А (это зависит от post_revisions).

Тест

Если вышеуказанные предположения верны, этот запрос должен показать все строки в таблице post_revisions для постов, созданных пользователем Б (в данном случае id 259), которые были отредактированы любым пользователем (кроме него самого или системного пользователя), вместе с соответствующими строками в user_actions для action_type = 11.

with my_user_posts as (
  select
    p.id,
    p.user_id
  from
    posts p
  where
    p.user_id = 259 -- выберите id пользователя
)
select
  up.user_id as my_user_id,
  ua.user_id as target_user_id,
  pr.post_id,
  ua.target_post_id,
  pr.user_id as editor_user_id,
  ua.acting_user_id,
  ua.action_type,
  pr.created_at as edit_created_at,
  ua.created_at as action_created_at
from
  post_revisions pr
  inner join my_user_posts up on up.id = pr.post_id
  and up.user_id != pr.user_id -- исключим само редактирование
  and pr.user_id != -1 -- исключим системные редактирования
  left join user_actions ua on ua.target_post_id = pr.post_id
  and ua.action_type = 11 -- только действия EDIT
order by
  pr.post_id,
  pr.created_at;

Ожидаемый результат

Каждая строка должна содержать как данные post_revisions, так и данные user_actions.

Фактический результат

Некоторые строки post_revisions не имеют соответствующих данных в user_actions. Следовательно, пользователь может увидеть ревизии, нажав на карандаш в каждом посте, но не получил уведомлений о нескольких редактированиях.

Что я пробовал

  • Добавление дополнительного редактирования к старому посту, у которого нет данных user_action. Результат: данные user_action также не появились.
  • Создание фейкового пользователя, копирование содержимого поста до редактирования, у которого нет данных user_action, создание с ним нового поста и применение того же редактирования, которое было выполнено другим пользователем. Результат: данные user_action появились корректно.
  • Повторение вышеуказанных процедур, когда пользователь активен или офлайн. Результат: изменений нет.
  • Повторение вышеуказанных процедур с изменением периода прощения при редактировании. Результат: изменений нет.

Выводы

  • Проблема, по-видимому, не является:

    • специфичной для пользователя. Она возникает практически у каждого пользователя.
    • специфичной для подключения. Тот факт, что пользователь активен или офлайн, не влияет на результат.
    • специфичной по времени. Изменение периода прощения при редактировании не оказало эффекта.
  • Проблема, по-видимому, является:

    • специфичной для действия. Я не видел никаких проблем с уведомлением о других действиях (LIKE, WAS_LIKED, RESPONSE, REPLY, MENTION или QUOTE). Единственная проблема касается действий EDIT.

    • специфичной для поста. Она возникает не у каждого поста, а только у некоторых (кажется, случайно).

  • Возможно, что при создании определённых постов что-то происходит, что препятствует сохранению user_actions для EDIT, но я не представляю, что это может быть.

  • Также возможно, что это происходит намеренно и существуют определённые условия, при которых пользователи не уведомляются о редактированиях, но я не видел этого нигде задокументированным.

Следующие шаги

  • Если вы знаете причину, по которой уведомления о редактировании могут не срабатывать каждый раз при редактировании, пожалуйста, сообщите об этом.
  • Если у вас есть собственный экземпляр Discourse, могли бы вы выполнить вышеуказанный SQL-запрос на некоторых id пользователей, чтобы проверить, видите ли вы также отсутствующие данные user_actions, и сообщить результаты?