| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647 |
- <?php
- namespace App\Observers;
- use App\Broadcasting\RealtimeEvent;
- use App\Broadcasting\RealtimeRoom;
- use App\Broadcasting\RealtimeService;
- use App\Enums\ServicePackageStatusEnum;
- use App\Models\ServicePackage;
- class ServicePackageObserver
- {
- public function __construct(
- private RealtimeService $realtime
- ) {}
- public function updated(ServicePackage $servicePackage): void
- {
- if (! $servicePackage->wasChanged('status')) {
- return;
- }
- $rooms = [
- RealtimeRoom::package($servicePackage->id),
- ];
- if ($servicePackage->client?->user_id) {
- $rooms[] = RealtimeRoom::user($servicePackage->client->user_id);
- }
- if ($servicePackage->provider?->user_id) {
- $rooms[] = RealtimeRoom::user($servicePackage->provider->user_id);
- }
- $status = $servicePackage->status;
- $this->realtime->emit(
- RealtimeEvent::PACKAGE_STATUS_CHANGED,
- $rooms,
- [
- 'entity' => 'service_package',
- 'id' => $servicePackage->id,
- 'status' => $status instanceof ServicePackageStatusEnum ? $status->value : $status,
- ],
- );
- }
- }
|