شارة المعجبين والمناطق الزمنية، هل تُخفّض المتطلبات؟

كان هناك عدد من تقارير المستخدمين بشأن شارة “المُكرّس” التي تتطلب تسجيل دخول متتالي لمدة 365 يومًا للحصول عليها. يبدو أن المشكلة تكمن في أن المستخدمين في مناطق زمنية بعيدة عن توقيت يونيكوordinated العالمي (UTC)، مثل منطقة توقيت المحيط الهادئ مع إضافة 8 ساعات (PST +8)، عليهم مراعاة أن اليوم الفعلي يُحسب وفق توقيت UTC. نلاحظ أن المستخدمين الأوروبيين يحصلون على الشارة، بينما آخرون لا يفهمون سبب عدم حصولهم عليها.

أعتقد ما حدث هو أن شخصًا في منطقة مثل PST +8 قد سجّل دخوله في الصباح الباكر من 14 مارس، ثم في وقت متأخر من الليل في 15 مارس (وهو يعتبر كلًا منهما تسجيل دخول يومي بالنسبة له)، لكن استعلام الشارة في النظام سيعتبر يوم 15 مارس كمُتجاوز بالكامل، مما يقطع سلسلة الـ 365 يومًا المتتالية. هذا قد يكون محبطًا للمستخدم النهائي، خاصة إذا كان قريبًا من نهاية سنته من السلسلة المتتالية.

أعلم أن المناطق الزمنية واستعلامات قواعد البيانات غالبًا لا تتوافق جيدًا، لكنني أود الاستفسار عما إذا كان يمكن اتخاذ أي إجراء لتوسيع نطاق الاستعلام، ربما لمنح تساهل في حساب “يوم UTC” عندما تكون فترات الشارة أطول، مثل سنة واحدة - شكرًا لكم.

9 إعجابات

جدول الزيارات يستخدم تاريخًا عاديًا وليس طابعًا زمنيًا، لذا فإن تنفيذ تسامح لعدة ساعات غير ممكن.

يعتمد الأمر كليًا على ما تريده مجتمعك في النهاية. يمكنك تعطيل هذه الشارة وإنشاء شارة مخصصة مكافئة تُفعّل بعدد أيام أقل لتكون كافية لتغطية تلك الأيام. أو يمكنك التحقق من المستخدمين الذين لا تتجاوز الفجوات بين زياراتهم يومًا واحدًا.

7 إعجابات

شكرًا لك على المتابعة والرد.

يريدون أن تعمل شاراتهم بغض النظر عن منطقتهم الزمنية. المستخدمون القدامى هم الأكثر شغفًا. :slight_smile:

لدينا استعلام في Data Explorer مثل هذا، ساعد في تحديد المشكلة:

-- [params]
-- user_list :users

WITH StartingPoints AS (
  SELECT user_id, visited_at, ROW_NUMBER() OVER(ORDER BY user_id, visited_at) AS rownum
  FROM user_visits AS A
  WHERE NOT EXISTS (
     SELECT 1
     FROM user_visits AS B
     WHERE B.visited_at = A.visited_at - INTERVAL '1 day' AND
     B.user_id = A.user_id
  ) AND user_id IN (:users)
),
EndingPoints AS (
  SELECT user_id, visited_at, ROW_NUMBER() OVER(ORDER BY user_id, visited_at) AS rownum
  FROM user_visits AS A
  WHERE NOT EXISTS (
     SELECT 1
     FROM user_visits AS B
     WHERE B.visited_at = A.visited_at + INTERVAL '1 day' AND
     B.user_id = A.user_id
  ) AND user_id IN (:users)
)
SELECT u.username, S.visited_at AS start_range, E.visited_at AS end_range, (E.visited_at - S.visited_at + 1) AS Days
FROM StartingPoints AS S
JOIN EndingPoints AS E ON E.rownum = S.rownum
JOIN users u ON u.id=S.user_id AND
u.id IN (:users)
ORDER BY u.id ASC, S.visited_at DESC 

..والذي يعطي الأجزاء المتصلة المذكورة. نظرًا لجزء UTC (أو بالأحرى كيفية تخزين التاريخ الأساسي بدلاً من التاريخ والوقت؟)، يبدو منطقيًا أن نمنح الشارة، حتى لو كانت هناك “فجوة يوم واحد” أعتقد.

سنعمل على محاولة إنشاء شارة Devotee أخرى بناءً على تعديل هذا الاستعلام، ربما مع INTERVAL قدره “يومين”؟

6 إعجابات

نتلقى عددًا قليلًا من طلبات الدعم بخصوص شارة “المُكرّس” لنفس السبب تمامًا. الحل البديل هو منح الشارة عبر وحدة تحكم Rails. توجد تعليمات حول كيفية القيام بذلك هنا: Award a non-custom badge through the console.

إذا كان هناك طريقة سهلة لتخفيف معايير الشارة للسماح بتخطي بضعة أيام، فأعتقد أن ذلك سيكون فكرة جيدة.

5 إعجابات