pastvu icon indicating copy to clipboard operation
pastvu copied to clipboard

Site notification system / Система уведомлений сайта

Open paul-k-pastvu opened this issue 5 years ago • 1 comments

Нужна система уведомлений сайта, которые будут:

  1. отображаться в отдельном разделе сайта, в "Ленте уведомлений"
  2. выводиться во всплывающих окошках (по аналогии с уведомлениями Телеграма и др. приложений и сайтов)
  3. включатиься в почтовую рассылку уведомлений (вместе с подписками на комментарии)

В состав уведомлений могут включаться:

  1. Изменения статуса загруженных пользователем изображений
  2. Изменение учетных данных пользователя (изменение роли или добавление/удаление области модерации)
  3. Упоминание пользователя в комментариях
  4. Появление на сайте очередной новости
  5. Иные события и объявления, настраиваемые администраторами сайта

У пользователя должна быть возможность настроить (включить или отключить) получение уведомлений каждым из способов.

У администраторов должна быть возможность пометить какие-то объявления как неотключаемые.

У админов должен быть свой раздел уведомлений с админдействиями.

У модераторов должен быть свой раздел уведомлений с событиями в их регионе модерирования (загрузки, комментарии, действия других модераторов)

paul-k-pastvu avatar Nov 07 '20 22:11 paul-k-pastvu

Возможно создать систему сообщений (PubSub messaging) и использовать ее для коммуникации событий в системе (не только относящихся к уведомлениям, и для связи других компонентов будет полезно) и поверх нее уже сделать подписки на определенный тип событий в системе и обработчики способа уведомления пользователя.

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

Email Popup
Own photo status change [x] [x]
New photo in subscribed region [x] [ ]
Mention in comments [x] [x]

У событий могут быть разные атрибуты, к примеру определяющие необходимые права для уведомления (админ, модератор, пользователь). Обработчик данного способа уведомления получает событие в системе, определяет подлежит ли оно уведомлению и затем уведомляет пользователей определенным способом в соответствии с их предпочтениями. Так для Email уведомления обработчик может находиться на вокере и ставить уведомление пользователя в очередь на отправку почты, а для Popup обработчик события должен находится на инстансах приложения и транслировать событие клиенту для показа в интерфейсе.

Задача довольно обширная и требует написания спецификации. Предложенная event-driven architecture поможет еще в нескольких задачах, к примеру лог событий в системе (#124).

kabalin avatar Aug 17 '22 21:08 kabalin