التعديلات لا تُخزَّن في جدول user_actions

أدركت للتو إما أنني لا أفهم تمامًا الحالات التي يتم فيها إنشاء إشعار تعديل، أو أن هذه مشكلة أوسع نطاقًا بكثير مما كنت أظن.

الافتراضات الرئيسية

إذا قام المستخدم أ بتعديل ما كتبه المستخدم ب، فإن عدة أشياء تحدث:

  • يتم إضافة صف جديد إلى جدول post_revisions.
  • يتم إضافة صف جديد إلى جدول user_actions مع action_type = 11.
  • من خلال الانتقال إلى /u/userB/notifications/edits، سيتمكن المستخدم ب من رؤية أن المستخدم أ قام بتعديل جديد (يعتمد هذا على user_actions).
  • من خلال النقر على أيقونة القلم الرصاص في منشوره، سيتمكن المستخدم ب من رؤية التعديل الفعلي الذي قام به المستخدم أ (يعتمد هذا على post_revisions).

الاختبار

إذا كانت الافتراضات أعلاه صحيحة، فيجب أن يعرض هذا الاستعلام جميع الصفوف في جدول post_revisions للمنشورات التي أنشأها المستخدم ب (في هذه الحالة، المعرف 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 -- اختر معرف مستخدم
)
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). المشكلة الوحيدة هي مع إجراءات التعديل.

    • خاصة بالمنشور. لا تحدث لكل منشور، بل لمنشورات محددة (يبدو أنها عشوائية)

  • احتمال واحد هو أن شيئًا ما يحدث أثناء إنشاء منشورات معينة لمنع حفظ إجراءات user_actions الخاصة بالتعديل، لكنني لا أعرف ما يمكن أن يكون هذا الشيء.

  • من الممكن أيضًا أن يحدث هذا عن قصد وأن هناك ظروفًا محددة لا يتم فيها إشعار المستخدمين بالتعديلات، لكنني لم أرَ ذلك موثقًا في أي مكان.

الخطوات التالية

  • إذا كنت تعرف سببًا لعدم تشغيل إشعارات التعديل في كل مرة يتم فيها إجراء تعديل، فيرجى إخباري.
  • إذا كان لديك مثيل Discourse خاص بك، هل يمكنك تشغيل استعلام SQL المذكور أعلاه على بعض معرفات المستخدمين الخاصة بك لمعرفة ما إذا كنت ترى أيضًا بيانات user_actions مفقودة والإبلاغ عن النتيجة؟