Я внедряю систему репутации, похожую на Stackoverflow, на своем сайте с описанием рэп-текстов, Rap Genius :
- Хорошее объяснение: + 10
- Плохое объяснение: -1
- У песни больше всего объяснений: + 30
У меня вопрос, как это реализовать. В частности, я пытаюсь решить, должен ли я создать таблицу reputation_events
, чтобы помочь в пересчете репутации, или я должен просто пересчитать с нуля всякий раз, когда мне нужно.
Таблица reputation_events
будет иметь столбцы для:
- имя (например, "good_explanation", "bad_explanation")
- awarded_to_id
- awarded_by_id
- awarded_at
Всякий раз, когда что-то влияет на репутацию, я вставляю соответствующую строку в reputation_events
. Это позволяет легко пересчитать репутацию и создать понятную для человека последовательность событий, которая произвела репутацию данного человека.
С другой стороны, любое данное действие может повлиять на репутацию нескольких пользователей. Например, предположим, что пользователь A обгоняет пользователя B по заданной песне; Исходя из цели «Иметь наибольшее количество объяснений в песне», я должен был бы не забыть удалить оригинальное событие «has_the_most_explanations» Б (или, возможно, я бы добавил новое событие для Б?)