Поведение PostAlerter after_save_post

Класс PostAlerter содержит систему проверок и триггеров для уведомлений, отправляемых после сохранения обычного сообщения, начиная с метода after_save_post.

Я работаю с этим методом в плагине Follow (см. конкретно discourse-follow/plugin.rb at main · discourse/discourse-follow · GitHub) и у меня есть несколько мыслей и вопросов, которыми я хотел бы поделиться с сообществом.

Учитывая природу PostAlerter, я считаю, что это обсуждение выходит за рамки плагина Follow. Мои предложения ниже могут быть актуальны и для плагина assign, и для плагина polls, а также для других.

Мои текущие мысли сводятся к следующему (я с радостью подготовлю PR для любого из предложенных вариантов):

  1. Было бы отлично добавить хук или триггер события в методе after_save_post, чтобы плагины могли добавлять пользователей, которым нужно отправить (или не отправлять) уведомления, в контексте проверок и счетчиков этого метода. При отправке уведомления необходимо учитывать три ключевых аспекта:

    1. Стоит ли отправлять пользователю уведомление о сообщении;
    2. Уже ли было отправлено пользователю уведомление о данном сообщении;
    3. Как именно следует уведомить пользователя о сообщении (т. е. с учетом его настроек).

    Каждый из этих аспектов было бы проще оценить в контексте метода after_save_post.

  2. Модифицированное использование типов уведомлений. В настоящее время в PostAlerter используются несколько констант типов уведомлений, которые перебираются или фильтруются в рамках конкретных проверок и счетчиков, например NOTIFIABLE_TYPES и COLLAPSED_NOTIFIABLE_TYPES.

    Сейчас существует универсальный тип уведомления :custom, однако он не особенно полезен в контексте after_save_post, так как добавление custom к константам типов означало бы, что затронуты будут все случаи использования типа уведомления custom.

    Обратите внимание, что плагин assign в настоящее время использует тип уведомления :custom, однако применяет его только для уведомлений о мелких действиях (не обычных сообщениях) и не использует его для каких-либо запросов (поскольку любой плагин или сервис может его использовать; он использует поле сообщения для поиска уведомлений assign).

1 лайк