Вот попытка описать задачу, которую мы пытаемся решить:
У нас есть команда поддержки из 4 человек, у всех установлены настройки уведомлений на уровень «Следить за первым постом» для категории поддержки. Мы хотим ускорить работу команды поддержки, побуждая их чаще и быстрее реагировать на уведомления. Поскольку у членов команды разные рабочие часы, множество тем открывается и решается в нерабочее время.
Пример:
Я являюсь членом команды поддержки, и моя смена начинается в
, но до этого момента открыто и решено множество тем.
Я не хочу получать уведомления о таких темах.
Таким образом, мы ищем способ отклонить («де-уведомить», отозвать, автоматически отметить как прочитанное» уведомления, которые сработали из-за настройки «Следить за первым постом», но тема была решена до того, как пользователь зашел в Discourse.
Пока что мы находим такие уведомления в базе данных с помощью запроса вроде этого:
select
notifications.user_id
,notifications.topic_id
,notifications.id
from notifications
where read=false
and notification_type=17
and topic_id in (
select
topic_id
from topic_custom_fields
where name='accepted_answer_post_id' and value is not null
)
Нам удалось отклонить уведомления, обновив поле read напрямую в базе данных:
update notifications
set read=true
where id=XXXXXX
Мы понимаем, что прямое обновление базы данных в Discourse — это безумие и очень плохая практика.
Поэтому мы ищем какой-то API, который позволит нам вызвать отклонение конкретного уведомления?
Если мы создадим Sidekiq-задачу для отклонения уведомлений через прямое обновление базы данных, будет ли это устойчивым решением для продакшн-сайта?
Есть ли какие-то «хорошие» плагины, выполняющие фоновые задачи через базу данных, чтобы мы могли попробовать воссоздать один из них для наших задач?
Скорее всего, мы захотим удалять такие уведомления, так как у нас нет Notifications - "unread only" filter.
Есть ли у Discourse какой-то «официальный» плагин, выполняющий удаления внутри базы данных, чтобы мы могли изучить, как удалять что-либо в базе данных через плагин?