Интерактивные уведомления Laravel

Пытаюсь придумать интерактивную систему уведомлений. Мое приложение построено на Laravel, и в настоящее время я использую Pusher для трансляции определенных событий клиенту. Я буду использовать тот же процесс с системой уведомлений, однако, когда для пользователя появляется уведомление, мне нужен какой-то стиль, который останется, если пользователь не щелкнет или не наведет курсор на уведомление.

Я знаю, что могу сделать это с помощью Javascript, но что, если пользователь не отреагирует на это уведомление, выйдет из системы, а затем снова войдет в систему. Я хочу, чтобы этот стиль оставался неизменным до тех пор, пока пользователь не взаимодействует с этим уведомлением.

Было бы лучше создать контроллер уведомлений, и всякий раз, когда пользователь взаимодействует с этим уведомлением, запись базы данных обновляется для этого конкретного пользователя? Кажется, это много, поскольку уведомления будут общедоступными и транслироваться практически всем пользователям ... и иметь запись в базе данных для каждого пользователя ... которая может создать ТОННУ записей.

Любая помощь приветствуется. Спасибо!


person Matt Pierce    schedule 02.03.2016    source источник


Ответы (1)


Не уверен, что это будет лучший способ, но я бы настроил:

  1. Модель уведомления
  2. Отношения с пользователем. (Пользователь - Уведомление - Многие ко многим)
  3. Промежуточная таблица для хранения уведомлений и отношений с пользователями.

Модель уведомлений может иметь следующие поля базы данных для хранения данных уведомления.

  • id
  • заглавие
  • сообщение
  • положение дел

и ваша промежуточная таблица может иметь (таблица notification_user)

  • notification_id
  • ID пользователя
  • read_on (отметка времени)
  • is_archived (логический)

Вы можете обновить временную метку read_on, когда пользователь прочитает уведомление, чтобы вы не отображали их все время. И вы также можете предоставить им возможность архивировать и т. Д., Которые должны быть в вашей сводной таблице.

Надеюсь это поможет.

person Can Celik    schedule 02.03.2016
comment
Это похоже на то, как я думал об этом. Предвидите ли вы проблему, если уведомление будет отправлено 1000 пользователям, в результате чего будет создано 1000 записей в базе данных? Похоже, эта таблица была бы просто ОГРОМНОЙ. - person Matt Pierce; 03.03.2016
comment
Если вы используете MYSQL и ваш идентификатор notification_id беззнаковый int, наибольшее значение составляет 4 294 967 295. Если это беззнаковый bigint, наибольшее значение равно 18 446 744 073 709 551 615. Если вы приблизитесь к этим цифрам, тогда, я думаю, вы можете начать беспокоиться об этом :) - person Can Celik; 03.03.2016
comment
Без проблем. Рад, что это помогло. - person Can Celik; 03.03.2016
comment
Дополнительный вопрос. Поскольку я использую Pusher для функции реального времени, что лучше использовать: публичный или частный канал? Скорее всего, канал будет ориентирован на пользователя, но должен ли он быть частным? Спасибо. - person Matt Pierce; 03.03.2016
comment
Я не очень знаком с Pusher, но похоже, что это должно быть конфиденциально. pusher.com/docs/client_api_guide/client_private_channels Я бы все равно дважды проверил. - person Can Celik; 04.03.2016