Как узнать, есть ли у пользователя непрочитанные сообщения (узел + mongodb)? - PullRequest
0 голосов
/ 11 апреля 2020

Я создаю приложение для обмена сообщениями с socket.io, node, express, mon goose и mongodb. Я хотел бы отобразить количество непрочитанных сообщений, которые есть у пользователя (или хотя бы базовую c истину / ложь информации).

Моя стратегия проста:

  • Пользователь входит в систему и получает json с полезной информацией. Клиент React l oop через все свои сохраненные комнаты socket.io и сообщает серверу, что присоединяется к ним снова.

  • Все комнаты хранятся в виде отдельных документов, называемых Conversation. Пользователь отслеживает все свои разговоры в своей собственной схеме благодаря свойству conversations, в котором хранится идентификатор каждого Conversation. (conversations: [{type: Schema.types.ObjectId, ref: "Conversation"}]).

  • При отправке нового сообщения в комнате срабатывает функция socket.emit. Сервер сохраняет новое сообщение в связанном документе Mon go Conversation и, если все сделано успешно, отправляет сообщение всем членам комнаты. Так что есть сообщения в реальном времени + сохраненные сообщения.

  • А как насчет непрочитанных сообщений? Пользователи хотят получать уведомления в настоящее время. При сохранении нового сообщения в диалоге объект с именем latestMessage: {senderId: 123, messageSnippet: "hello...", read: false} постоянно обновляется в документе Conversation. Поэтому, когда пользователь проверяет свою панель сообщений, он может видеть свои непрочитанные сообщения (userId! == senderId && read: false ).

  • Когда пользователь нажимает на разговор, массив сообщений разговора отправляется сервером. Кроме того, свойство latestMessage обновлено до {senderId: 123, messageSnippet: "hello...", read: true}. Однако боюсь, что такая операция не очень оптимизирована (постоянно мутирует база данных ...). Есть ли лучший способ справиться с этим?

  • Последнее, но не менее важное: мне нужно обновить значок сообщения на панели навигации, чтобы сообщить пользователю, что у него есть новые непрочитанные сообщения. По сути, я хотел бы иметь такой же рендеринг, как Stackoverflow здесь. Как я могу сделать это эффективно?

Спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...