Чтобы ответить на ваш первый вопрос, я ожидаю, что перевод сайта в режим «только для чтения» повлияет на возможность получения пользователями значка «Преданный». Когда сайт находится в режиме «только для чтения», никакие новые данные не записываются в базу данных, поэтому информация о посещениях пользователя не будет зафиксирована, пока сайт находится в этом режиме.
Попробуйте выполнить этот запрос. Он возвращает дни, когда пользователь не посещал сайт в указанный диапазон дат:
Дни без посещений для пользователя
--[params]
-- date :start_date
-- date :end_date
-- string :username
WITH days AS (
SELECT date_trunc('day', day)::date AS day
FROM generate_series(:start_date::date, :end_date::date, '1 day') AS day
),
users_visits AS (
SELECT
visited_at
FROM user_visits uv
JOIN users u ON u.id = uv.user_id
WHERE u.username = :username
AND visited_at BETWEEN :start_date AND :end_date
),
visits_days AS (
SELECT
day,
visited_at
FROM days
LEFT JOIN users_visits uv
ON uv.visited_at = day
ORDER BY day DESC
)
SELECT day AS days_without_visits
FROM visits_days WHERE visited_at IS NULL
ORDER BY day DESC
Если вы хотите выдать значок некоторым пользователям, которые технически не соответствуют требованиям, ознакомьтесь со статьей Award a non-custom badge through the console. Обратите внимание, что такой подход возможен только на самостоятельно размещённых сайтах. Для сайтов, размещённых на нашем хостинге, мы можем выдать вам значки, перечисленные в этой теме.