Уведомление Api System Правильный процесс - PullRequest
0 голосов
/ 29 мая 2020

Я создал небольшую систему api уведомлений, которая имеет столбцы id, user_id, subject, text, status, created_at в базе данных.

Мой текущий процесс заключается в том, что, когда пользователь запрашивает уведомления, я получаю последние 100 непрочитанных сообщений и отправляю пользователю, а затем жду, пока внешний интерфейс отправит мне список ids из тех, которые были прочитаны пользователем, чтобы я мог изменить их статус на прочитано .

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

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

но я я не уверен, что это лучший способ справиться с этим! есть ли лучший процесс для систем уведомлений api, пожалуйста, посоветуйте мне. Спасибо.

Ответы [ 2 ]

1 голос
/ 29 мая 2020

Я бы подумал об этом так: что это за список непрочитанных записей? То, что понимает государство, осталось непрочитанным. Действительно ли получение списка непрочитанных элементов означает, что все эти элементы были прочитаны? Думаю, нет. Вы можете разрешить массовое чтение меток, но на самом деле чтение списка - это просто представление с сохранением состояния. Прочтите список и авторитетно отметьте прочитанное при прикосновении к видимому компоненту интерфейса, отправив запрос для каждого элемента на thing/mark-read.

Если у вас возникли проблемы с (центральным) хранилищем, не отображающим состояние точно, потому что вы думаете, что они должны быть прочитаны, отлаживайте свой интерфейс. Однако я бы не стал отмечать чтение при вытягивании списка. Это был бы ошибочный подход.

Если вы действительно вставляете все 100 в дисплей, где вы считаете их прочитанными, создайте конечную точку в своем API для thing/mark-items-read и передайте ей эти 100 идентификаторов элементов.

1 голос
/ 29 мая 2020

Мы не можем видеть ваш код здесь, но я бы предложил следующее:

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

  2. Создайте конечную точку, которая получает этот массив на сервере в вашем файле маршрутов

    Route::post('somepath/read-messages', 'MessageController@readMessages');
    

    Затем в вашем контроллере сообщений:

    public function readMessages(Request $request) {
    
       if ($request->has('read_messages') {
           $messages = Message::whereIn('id', $request->read_messages)->get();
           $messages->update(array('staus' => 'read');
       }
    
    }
    
...