Всем привет, у меня появился вопрос, как мне сделать так чтобы пользователь видел новые уведомления.и система видела что он прочитал, И как раз была идея по типу проверки количества строк полученных из бд и потом сравнение, но как я понял это ресурсо затратно и будет просто багованое. Кто может пожалуйста объявнить как такое сделать и показывать пользователю что появилось новое уведомление.Я
Я пол часа думал над алгоритмом но так и не пришел к нужному решению
Способ в лоб
Контроллер отдающий уведомления
/api/notification
Таблица
Id
Userid
Body
Created
Isread
Ваше приложение каждые 5 секунд опрашивает этот контооллер если есть новые Сообщения то рисует список. При клике отправляется запрос с айдишником для установки статуса.
Есть и другие способы long pooling, signal ir но они требуют по одному соединению на каждого клиента, а сокетов может на всех и не хватить.
Я понял смысл, но я хочу просто сделать так чтобы Если нет прочитаных сообщений то показывается значок что новое сообщение(предупреждение в моем случае) и берет данные из бд сервера. И я как раз понял что к этому можно привязать как раз параметр Isread. И как раз. Если пользователь прогрузил страницу где отображаются предупреждения, то система понимает что оно прочтено и обновляет таблицу, верно?
Точно также, делаете роут, который будет возвращать количество уведомлений.
Для уведомлений сделать отдельную таблицу. А в запросе к БД вместо полей можно просто количество запросить по нужным фильтрам. Пример для TypeORM:
await Queue.count({
where: {
userId: 123
}
});
И, как было сказано выше, просто с клиента отправлять раз в n секунд запрос на этот роут
Сделать ещё один роут для события "Прочитал". Если пользователь открыл уведомление, то отправлять запрос на этот роут. Он в свою очередь будет данное уведомление помечать как прочитанное и больше отображаться не должно.