Как вывести уведомления о событиях реверберации из частной группы?Php

Кемеровские программисты php общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Как вывести уведомления о событиях реверберации из частной группы?

Сообщение Anonymous »

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

Теперь я хочу отправлять уведомления о публикациях в реальном времени с помощью событий Laravel 11 Reverb.

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

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

Я попробовал несколько способов трансляции событий для пользователей, которые не активны в группе. Например, я защитил широковещательный канал с помощью идентификатора пользователя, а затем в контроллере прошёл через group->members()->chunk(), но этот подход для группы с большим количеством участников не подходит:


$this->group->members()->chunk(250, function ($users) use ($auth) {
foreach ($users as $user) {
if ($user->pivot->member_id === $user->id) {
broadcast(new GroupEvents(
$this->group,
$user,
$auth,
[
"refresh" => true,
"title" => "The {$this->group->name} group is being archived.",
"message" => "{$auth->full_name} has archived the {$this->group->name} group. All actions within this group are now disabled.",
]
))->toOthers();
}
}
});

Второй метод заключается в том, что я создаю уведомление, используя $user->notify(), а затем в глобальном макете во внешнем интерфейсе я использую Inertia usePoll() для обновления пользователь unread_notifications каждые 3 минуты.

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

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



// channel.php
Broadcast::channel('group.events.{id}', function (User $user, $id) {
$group = Group::findOrNew($id);
return $user->address && $group->members()
->wherePivot('member_id', $user->id)
->exists();
});

//GroupEventsJob.php
public array $inputs;
public Group $group;
public User $user;

/**
* Create a new job instance.
*/
public function __construct($group, $user, array $data)
{
$this->inputs = $data;
$this->user = $user;
$this->group = $group;
}

/**
* Execute the job.
*/
public function handle(): void
{
$inputs = new Fluent($this->inputs);

broadcast(new GroupEvents(
$this->group,
$this->user,
[
"refresh" => $inputs->refresh,
"title" => $inputs->title,
"message" => $inputs->message,
]
))->toOthers();

$this->group->members()->chunk(250, function ($users) use ($inputs) {
foreach ($users as $user) {
if ($user->username !== $this->user->username) {
$user->notify(new \App\Notifications\GroupEvents([
"title" => $inputs->title,
"message" => $inputs->message,
"url" => null,
"group_id" => $this->group->uid
]));

if ($user->last_activity === null) {
$user->notifications()
->whereNull('popped_at')
->update(['popped_at' => now()]);
}
}
}
});
}

// GroupController.php
public function archive(string $group)
{
if (!$this->group->is_archived) {
$auth = auth()->user();
$this->group->is_archived = now();
$this->group->join_code = null;
$this->group->save();

dispatch(new GroupEventsJob(
$this->group,
$auth,
[
"refresh" => true,
"title" => "The {$this->group->name} group is being archived.",
"message" => "{$auth->full_name} has archived the {$this->group->name} group. All actions within this group are now disabled.",
]
));

inertia()->clearHistory();

return back()
->with('message', [
"type" => "success",
"content" => "The group has been successfully archived."
]);
}
}


Подробнее здесь: https://stackoverflow.com/questions/793 ... vate-group
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Как мне настроить уведомления о пользовательских событиях в моем коде?
    Anonymous » » в форуме Php
    0 Ответы
    7 Просмотры
    Последнее сообщение Anonymous
  • Уведомления о событиях пользователей, хранящихся в качестве временной метки в БД
    Anonymous » » в форуме JAVA
    0 Ответы
    4 Просмотры
    Последнее сообщение Anonymous
  • Уведомления о событиях пользователей, хранящихся в качестве временной метки в БД
    Anonymous » » в форуме JAVA
    0 Ответы
    2 Просмотры
    Последнее сообщение Anonymous
  • Уведомления о событиях пользователей, хранящихся в качестве временной метки в БД [закрыто]
    Anonymous » » в форуме JAVA
    0 Ответы
    3 Просмотры
    Последнее сообщение Anonymous
  • Laravel 10 с подключением реверберации не удалось
    Anonymous » » в форуме Php
    0 Ответы
    11 Просмотры
    Последнее сообщение Anonymous

Вернуться в «Php»