헌신상 배지와 시간대, 요건 완화?

Devotee 배지에 대해 몇 가지 사용자 보고가 있었습니다. 이 배지는 365일 연속 로그인 시 획득할 수 있습니다. 문제는 UTC와 시차가 큰 지역(예: PST +8)에 있는 사용자가 시스템의 '하루’가 UTC 기준으로 계산된다는 점을 고려해야 한다는 것입니다. 유럽 사용자는 배지를 획득하고 있지만, 다른 사용자들은 왜 자신은 획득하지 못하는지 이해하지 못하는 경우가 발생하고 있습니다.

제 생각에는 PST +8 지역의 사용자가 3월 14일 이른 아침에 로그인하고, 3월 15일 늦은 밤에 다시 로그인하면(사용자 입장에서는 매일 로그인한 것으로 보이지만), 시스템의 배지 조회 쿼리는 3월 15일을 완전히 ‘건너뛴’ 것으로 인식하여 365일 연속 기록을 깨뜨리는 것으로 보입니다. 특히 1년 연속 기록의 막바지에 있는 사용자들에게는 이는 매우 좌절스러운 일이 될 수 있습니다.

시차와 데이터베이스 쿼리가 잘 맞지 않는다는 점은 알고 있지만, 1년과 같은 긴 배지 기간의 경우 'UTC 기준 하루’에 대한 허용 범위를 넓혀 쿼리를 조정할 수 있는지 문의드립니다. 감사합니다.

9개의 좋아요

방문 기록을 저장하는 테이블은 타임스탬프가 아닌 일반 날짜를 사용하므로, 몇 시간의 허용 오차를 구현하는 것은 현실적으로 어렵습니다.

결국 커뮤니티가 최종적으로 원하는 것이 무엇인지에 따라 달라집니다. 해당 배지를 비활성화하고, 그보다 짧은 일수로 트리거되는 동등한 사용자 지정 배드를 만들어 해당 기간을 커버할 수 있도록 할 수도 있습니다. 또는 방문 간격이 1일을 초과하지 않는 사용자를 확인하는 방법도 있습니다.

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 부분(또는 datetime이 아니라 날짜로 저장되는 방식 때문인지) 때문에, '1일 간격’이 존재하더라도 배지를 부여하는 것이 합리적이라고 생각합니다.

이 쿼리를 수정하여 ‘2일’ INTERVAL을 사용하는 또 다른 Devotee 배지를 만드는 것을 검토해 볼 예정입니다.

6개의 좋아요

이러한 이유로 Devotee 배지에 대한 지원 요청을 몇 건 받았습니다. 임시 해결책은 Rails 콘솔을 통해 배지를 부여하는 것입니다. 이를 수행하는 방법은 여기에서 확인할 수 있습니다: Award a non-custom badge through the console.

배지 획득 기준을 몇 일 정도 건너뛰어도 되도록 완화할 쉬운 방법이 있다면, 좋은 아이디어라고 생각합니다.

5개의 좋아요