Задать вопрос

Правильно ли я реализовал массовые уведомления?

Когда пользователь добавляет пост то всем подписчикам приходит уведомления.
Есть слушатель который срабатывает когда создается пост добавляет работу в очередь
class AddPostNotify
{
    public function handle(PostCreated $event)
    {
        dispatch(new AddPostNotificationJob($event->post));
    }
}

Эта работа добавляет нотификации в очередь
public function handle()
{
Subs::query()->each(function (Notification $notification) {
                $notification->user->notify(new AddPostNotification($this->post));
            });
}

Сама нотификация
class AddPostNotification extends Notification implements ShouldQueue
{
    use Queueable;

    private Post $post;

    public function __construct(Post $post)
    {
        $this->post = $post;
    }

    public function via($notifiable)
    {
        $this->onQueue('notification');

        return $notifiable->isNotificationEnabled(self::class) ? ['broadcast', 'database'] : [];
    }

    public function toArray($notifiable)
    {
        return [
            //
        ];
    }

    public function toDatabase($notifiable)
    {
        return new BroadcastMessage([
            'post' => $this->post,
        ]);
    }

    public function toBroadcast($notifiable)
    {
        return new BroadcastMessage([
            'data' => [
                'post' => $this->post,
            ],
        ]);
    }
}


Так же по такому принципу реализовал нотификации о добавлении комментирования.
Правильная ли логика? Или можно сделать что-то получше ?
  • Вопрос задан
  • 435 просмотров
Подписаться 5 Простой 2 комментария
Пригласить эксперта
Ответы на вопрос 2
Alex_Wells
@Alex_Wells
PHP/Kotlin
Нормально, если сабов не много. Со временем упрешься в лимит джобы по времени из-за ->each(). Потом упрешься в кол-во нотификейшенов, которые ты пишешь в базу на каждого саба. Еще позже - в отправку броадкаста по личному каналу каждому юзеру, а не всем сразу в какой-то один.

Решай проблемы по ходу дела, нет смысла пытаться решить их наперед.
Ответ написан
Комментировать
@jazzus
Для отправки группе абонентов нужно юзать фасад https://laravel.com/docs/8.x/notifications#using-t...
Проверку, которая в isNotificationEnabled можно сделать в where запросе до создания уведомлений.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы