Insignia de Devoto y zonas horarias, ¿relajar los requisitos?

He recibido varios informes de usuarios sobre la insignia Devoto, que requiere 365 días de inicio de sesión consecutivos para obtenerla. El problema parece ser que los usuarios en zonas horarias muy alejadas de UTC (por ejemplo, PST +8) deben tener en cuenta que el “día” subyacente se basa en la hora UTC. Estamos viendo que los usuarios europeos reciben la insignia, mientras que otros no entienden por qué no la obtienen.

Lo que creo que ha ocurrido es que alguien en una zona como PST +8 inicia sesión a primera hora de la mañana del 14 de marzo y luego a última hora de la noche del 15 de marzo (para ellos, un inicio de sesión cada día), pero la consulta del sistema de insignias considera que el 15 de marzo fue completamente “omitido”, rompiendo así su racha de 365 días consecutivos. Esto puede ser frustrante para el usuario final, especialmente si está cerca del final de su racha anual.

Sé que las zonas horarias y las consultas de bases de datos a menudo no se llevan bien, pero me gustaría preguntar si se podría hacer algo para “ampliar” la consulta, quizás otorgando tolerancia para un “día UTC” cuando se trata de períodos de insignias más largos, como un año. Gracias.

9 Me gusta

La tabla que almacena las visitas utiliza una fecha simple, no una marca de tiempo, por lo que no es factible implementar una tolerancia de unas pocas horas.

Todo depende de lo que tu comunidad desee finalmente. Podrías desactivar ese distintivo y crear uno personalizado equivalente que se active con menos días, de modo que sea suficiente para cubrir esos periodos. O bien, buscar usuarios cuyos intervalos entre visitas nunca superen 1 día.

7 Me gusta

Gracias por mirar y por la respuesta.

Quieren que su insignia funcione independientemente de su zona horaria. Los usuarios con más tiempo son los más apasionados. :slight_smile:

Tenemos una consulta de Data Explorer como esta, que nos ayudó a identificar el problema:

-- [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 

…lo que proporciona los segmentos continuos listados. Debido a la parte de UTC (o más bien a cómo se almacena la fecha subyacente en lugar de la fecha y hora), parece justo que deberíamos otorgar la insignia, incluso si existe un ‘intervalo de 1 día’, creo.

Vamos a intentar crear otra insignia de Devoto basándonos en modificar esta consulta, quizás con un INTERVAL de ‘2 días’.

6 Me gusta

Recibimos algunas solicitudes de soporte relacionadas con la insignia Devoto exactamente por esta razón. La solución consiste en otorgar la insignia a través de la consola de Rails. Las instrucciones para hacerlo se encuentran aquí: Award a non-custom badge through the console.

Si existe una forma sencilla de relajar los criterios de la insignia para permitir algunos días omitidos, creo que sería una buena idea.

5 Me gusta