Класс PostAlerter содержит систему проверок и триггеров для уведомлений, отправляемых после сохранения обычного сообщения, начиная с метода after_save_post.
Я работаю с этим методом в плагине Follow (см. конкретно discourse-follow/plugin.rb at main · discourse/discourse-follow · GitHub) и у меня есть несколько мыслей и вопросов, которыми я хотел бы поделиться с сообществом.
Учитывая природу PostAlerter, я считаю, что это обсуждение выходит за рамки плагина Follow. Мои предложения ниже могут быть актуальны и для плагина assign, и для плагина polls, а также для других.
Мои текущие мысли сводятся к следующему (я с радостью подготовлю PR для любого из предложенных вариантов):
-
Было бы отлично добавить хук или триггер события в методе
after_save_post, чтобы плагины могли добавлять пользователей, которым нужно отправить (или не отправлять) уведомления, в контексте проверок и счетчиков этого метода. При отправке уведомления необходимо учитывать три ключевых аспекта:- Стоит ли отправлять пользователю уведомление о сообщении;
- Уже ли было отправлено пользователю уведомление о данном сообщении;
- Как именно следует уведомить пользователя о сообщении (т. е. с учетом его настроек).
Каждый из этих аспектов было бы проще оценить в контексте метода
after_save_post. -
Модифицированное использование типов уведомлений. В настоящее время в PostAlerter используются несколько констант типов уведомлений, которые перебираются или фильтруются в рамках конкретных проверок и счетчиков, например
NOTIFIABLE_TYPESиCOLLAPSED_NOTIFIABLE_TYPES.Сейчас существует универсальный тип уведомления
:custom, однако он не особенно полезен в контекстеafter_save_post, так как добавлениеcustomк константам типов означало бы, что затронуты будут все случаи использования типа уведомленияcustom.Обратите внимание, что плагин assign в настоящее время использует тип уведомления
:custom, однако применяет его только для уведомлений о мелких действиях (не обычных сообщениях) и не использует его для каких-либо запросов (поскольку любой плагин или сервис может его использовать; он использует поле сообщения для поиска уведомлений assign).