Привет. Стоит задача реализовать систему доставки уведомлений по различным каналам (Email, SMS, Telegram, в будущем пуш- уведомления). Пользователь может выбирать что и по каким каналам доставлять.
Есть внутренняя система уведомлений, как на любом другом сайте. Нужно доставлять эти уведомления, а также сгенерированные динамически (типа "У вас 5 новых сообщений").
Как бы вы это реализовали? Сейчас я думаю сохранять время последней отправки для каждого канала и типа уведомлений, но встаёт вопрос, как это сделать правильно, т. к. у каждого пользователя это время может отличаться. Это не является камнем преткновения, можно и это решить, но было бы интересно узнать о других вариантах решения.
У меня такая же система с разными каналами. Я не храню записи об отсылках в каждый канал. Я просто создаю уведомление и 1) сохраняю его в табличку, 2) кладу его в очереди rabbitmq. В раббите очередь на каждый канал (в соответствии с настройками юзера), оттуда их выгребают консьюмеры каждого типа: в тг, на почту, по смс.
На сайте страница уведомлений работает с табличкой.
Помимо этого есть надстройка, объект типа "глобальное уведомление", которое создается админами, там пишется текст и выбираются фильтры юзеров: регион, всякие типы и тп. При сохранении этого объекта тоже кидается джоба в очередь, а бекграундный скрипт строит критерию по выбранным фильтрам, получает список пользователей, и каждому создает персональное уведомление, ну а при создании его, срабатывает та же логика с очередями каналов.