أدركت للتو إما أنني لا أفهم تمامًا الحالات التي يتم فيها إنشاء إشعار تعديل، أو أن هذه مشكلة أوسع نطاقًا بكثير مما كنت أظن.
الافتراضات الرئيسية
إذا قام المستخدم أ بتعديل ما كتبه المستخدم ب، فإن عدة أشياء تحدث:
- يتم إضافة صف جديد إلى جدول
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مفقودة والإبلاغ عن النتيجة؟
