用户操作表中未存储编辑内容

我刚刚意识到,要么是我对创建编辑通知的情况理解不够全面,要么这是一个比我想象中更普遍的问题。

主要假设

如果用户 A 编辑了用户 B 撰写的内容,会发生以下几件事:

  • post_revisions 表中会添加一行新记录。
  • user_actions 表中会添加一行新记录,其中 action_type = 11
  • 通过访问 /u/userB/notifications/edits,用户 B 将能够看到用户 A 进行的编辑(这依赖于 user_actions)。
  • 通过点击帖子中的铅笔图标,用户 B 将能够查看用户 A 执行的具体编辑内容(这依赖于 post_revisions)。

测试

如果上述假设正确,以下查询应显示 post_revisions 表中由用户 B(在此例中为 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 -- 仅编辑操作
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 操作。
    • 帖子特定。并非所有帖子都会出现此问题,仅特定帖子(看似随机)会受影响。
  • 一种可能性是,在创建某些特定帖子时,某种机制阻止了 EDIT user_actions 的保存,但我不知道具体原因。

  • 也有可能是按设计如此,即在特定条件下用户不会收到编辑通知,但我尚未在任何文档中看到相关说明。

后续步骤

  • 如果您知道为什么编辑通知可能不会在每次编辑时都被触发,请告知我。
  • 如果您有自己的 Discourse 实例,能否在某些用户 ID 上运行上述 SQL 查询,查看是否也出现 user_actions 数据缺失的情况,并反馈结果?