Возможное решение может быть следующим:
Первый шаг: задача cron
Вы создаете задачу CRON (https://scotch.io/tutorials/nodejs-cron-jobs-by-examples), которая будет проверять каждую минуту на например, если отметка времени собрания прошла или если в следующую минуту будет собрание (этот тип запроса: SELECT * FROM meeting WHERE notified = false AND (now() > meeting_time OR now() + 1m > meeting_time)
- этот запрос недействителен SQL, это просто, например, * ). Для каждого из выбранных собраний вы добавляете новый объект в коллекцию notification
вместе с информацией об уведомлениях и помечаете каждое уведомленное meeting
, например, notified=true
, чтобы избежать извлечения уже уведомленных собраний.
Второй шаг: посмотреть изменения
Затем вы можете просто использовать функцию watch()
mongodb (https://docs.mongodb.com/manual/reference/method/db.collection.watch/), чтобы прослушать ваши изменения в notification
и уведомить ваш фронт, когда есть новое уведомление. Вот пример с Server Send Event (SSE) и mongodb watch: https://ryantravitz.com/2018-11-29-server-sent-events/
См. Также
Вы также можете использовать сторонние сервисы для хранения таких уведомлений, как https://pusher.com/ или пожарная база (https://angularfirebase.com/lessons/send-push-notifications-in-angular-with-firebase-cloud-messaging/). Тот же принцип, но вместо того, чтобы хранить уведомление в mongodb, вы отправляете его этим службам и подключаете свой фронт к конечным точкам, предоставляемым этими службами.