Значки/достижения

Я хочу реализовать аналогичную вещь для значков stackoverflow. вы также можете приравнять их к достижениям в играх.

но я не уверен, что как создать базу данных/код/​​отслеживание для них.

Я получаю то, что должен делать для значков, таких как:

Altruist × 1456 Первая награда, которую вы вручную присудили по заданию другого человека

потому что это одноразовый случай, но как обращаться с другими, такими как:

Аналитический × 16389 Посетил каждый раздел часто задаваемых вопросов
 Электорат × 1783 Проголосовали по 600 вопросам и 25% или более от общего количества голосов по вопросам  Outspoken × 188 Добавлено 10 сообщений в чате, которые были отмечены 10 разными пользователями

и т.д...

как обрабатывать их, как отслеживать прогресс для каждого и т.д. есть ли учебник или что-то, что может помочь мне разобраться в шаблоне проектирования для них?

Ответы

Ответ 1

В приведенных примерах существуют два механизма, которые вам понадобятся.

Я не знаю, как это делается на SO, это всего лишь предложение о решении.

Посмотрите сначала на "Аналитический". Вам придется записывать с помощью простого флага, когда пользователь посещает конкретную область в FAQ. Представьте таблицу БД с полем для каждого раздела FAQ и идентификатора пользователя. Это начинается как "N" (или 0, или же вы хотите представить свой флаг). Когда пользователь посещает эту область, вы вызываете код, чтобы перевернуть это поле на "Y". Когда все поля "Y", вы можете наградить этот значок.

Что касается "электората" и "аутсайкшн", вы можете получить эту информацию с помощью запроса на свои существующие данные, считая, что эти запросы не слишком обременительны. Вам нужно будет рассмотреть, когда следует выполнять эти проверки. Это, по сути, сводится к двум вариантам.

1) Когда выполняется действие, которое может получить награжденный значок (например, раздел "Часто задаваемые вопросы", "Голосование по вопросу, вопрос, снятый кем-то другим" )

2) Периодически (ежечасно, ежедневно и т.д.) запускайте проверку всех ваших значков на текущие данные.

Имейте в виду, что значки являются односторонними в Stackoverflow, поэтому, если вы хотите быть эквивалентными, вам не нужно учитывать логику, чтобы "не награждать" значки.