Estou criando um feed de postagens de publicações, onde os usuários podem criar publicações, reagir a elas e comentar. No caso quando um usuário cadastrar um publicação quero enviar um evento avisando que foi criado e contabilizar isso em tempo real na propria tela.
Estou usando o laravel 10 no caso fiz assim:
Controller
public function store($request)
{
try {
$post = FeedPost::create($request);
/** TODO - vincular as mençoes de usuários */
PostCreated::dispatch($post->post, auth()->user()->id, 'post-created');
return response()->json("Post cadastrado com sucesso!", Response::HTTP_OK);
} catch (Exception $exception) {
return response()->json(['message' => 'Não foi possivel completar está ação!'],
Response::HTTP_BAD_REQUEST);
}
}
Event
class PostCreated implements ShouldBroadcast
{
use Dispatchable, InteractsWithSockets, SerializesModels;
/**
* Create a new event instance.
*/
public function __construct(
public int $postId,
public int $userId,
public string $action,
)
{
}
/**
* Get the channels the event should broadcast on.
*
* @return array<int, Channel>
*/
public function broadcastOn(): array
{
return [
new PrivateChannel('post-created'),
];
}
}