feat: Realtime for Votes + Deadlines

This commit is contained in:
2024-03-24 01:36:16 +01:00
parent b1cb25c823
commit 5c0dab3448
9 changed files with 133 additions and 1 deletions

View File

@@ -0,0 +1,40 @@
<?php
namespace App\Events\Deadline;
use App\Models\Deadline;
use Illuminate\Broadcasting\InteractsWithSockets;
use Illuminate\Broadcasting\PrivateChannel;
use Illuminate\Contracts\Broadcasting\ShouldBroadcast;
use Illuminate\Foundation\Events\Dispatchable;
use Illuminate\Queue\SerializesModels;
class DeadlineCreated implements ShouldBroadcast
{
use Dispatchable, InteractsWithSockets, SerializesModels;
/**
* Create a new event instance.
*/
public function __construct(public Deadline $deadline)
{
//
}
public function broadcastAs(): string
{
return 'DeadlineCreated';
}
/**
* Get the channels the event should broadcast on.
*
* @return array<int, \Illuminate\Broadcasting\Channel>
*/
public function broadcastOn(): array
{
return [
new PrivateChannel('Deadline'),
];
}
}

View File

@@ -0,0 +1,42 @@
<?php
namespace App\Events\Vote;
use App\Models\Vote;
use Illuminate\Broadcasting\InteractsWithSockets;
use Illuminate\Broadcasting\PrivateChannel;
use Illuminate\Contracts\Broadcasting\ShouldBroadcast;
use Illuminate\Foundation\Events\Dispatchable;
use Illuminate\Queue\SerializesModels;
class VoteCreated implements ShouldBroadcast
{
use Dispatchable, InteractsWithSockets, SerializesModels;
/**
* Create a new event instance.
*/
public function __construct(
public Vote $vote
)
{
//
}
public function broadcastAs(): string
{
return 'VoteCreated';
}
/**
* Get the channels the event should broadcast on.
*
* @return array<int, \Illuminate\Broadcasting\Channel>
*/
public function broadcastOn(): array
{
return [
new PrivateChannel('Vote'),
];
}
}

View File

@@ -2,6 +2,7 @@
namespace App\Models;
use App\Events\Deadline\DeadlineCreated;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
@@ -16,6 +17,13 @@ class Deadline extends Model
'target_chapter',
];
protected static function booted() :void
{
static::created(static function ($deadline) {
event(new DeadlineCreated($deadline));
});
}
public function bookRecommendation()
{
return $this->belongsTo(BookRecommendation::class);

View File

@@ -2,6 +2,7 @@
namespace App\Models;
use App\Events\Vote\VoteCreated;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
@@ -14,6 +15,13 @@ class Vote extends Model
'book_recommendation_id',
];
protected static function booted() :void
{
static::created(static function ($vote) {
broadcast(new VoteCreated($vote))->toOthers();
});
}
public function user()
{
return $this->belongsTo(User::class);