Site notification system / Система уведомлений сайта
Нужна система уведомлений сайта, которые будут:
- отображаться в отдельном разделе сайта, в "Ленте уведомлений"
- выводиться во всплывающих окошках (по аналогии с уведомлениями Телеграма и др. приложений и сайтов)
- включатиься в почтовую рассылку уведомлений (вместе с подписками на комментарии)
В состав уведомлений могут включаться:
- Изменения статуса загруженных пользователем изображений
- Изменение учетных данных пользователя (изменение роли или добавление/удаление области модерации)
- Упоминание пользователя в комментариях
- Появление на сайте очередной новости
- Иные события и объявления, настраиваемые администраторами сайта
У пользователя должна быть возможность настроить (включить или отключить) получение уведомлений каждым из способов.
У администраторов должна быть возможность пометить какие-то объявления как неотключаемые.
У админов должен быть свой раздел уведомлений с админдействиями.
У модераторов должен быть свой раздел уведомлений с событиями в их регионе модерирования (загрузки, комментарии, действия других модераторов)
Возможно создать систему сообщений (PubSub messaging) и использовать ее для коммуникации событий в системе (не только относящихся к уведомлениям, и для связи других компонентов будет полезно) и поверх нее уже сделать подписки на определенный тип событий в системе и обработчики способа уведомления пользователя.
Пользовательский интерфейс может выглядеть как матрица событий (доступных текущему пользователю) и способов уведомления:
| Popup | ||
|---|---|---|
| Own photo status change | [x] | [x] |
| New photo in subscribed region | [x] | [ ] |
| Mention in comments | [x] | [x] |
У событий могут быть разные атрибуты, к примеру определяющие необходимые права для уведомления (админ, модератор, пользователь). Обработчик данного способа уведомления получает событие в системе, определяет подлежит ли оно уведомлению и затем уведомляет пользователей определенным способом в соответствии с их предпочтениями. Так для Email уведомления обработчик может находиться на вокере и ставить уведомление пользователя в очередь на отправку почты, а для Popup обработчик события должен находится на инстансах приложения и транслировать событие клиенту для показа в интерфейсе.
Задача довольно обширная и требует написания спецификации. Предложенная event-driven architecture поможет еще в нескольких задачах, к примеру лог событий в системе (#124).