ServicePackageObserver.php 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. <?php
  2. namespace App\Observers;
  3. use App\Broadcasting\RealtimeEvent;
  4. use App\Broadcasting\RealtimeRoom;
  5. use App\Broadcasting\RealtimeService;
  6. use App\Enums\ServicePackageStatusEnum;
  7. use App\Models\ServicePackage;
  8. class ServicePackageObserver
  9. {
  10. public function __construct(
  11. private RealtimeService $realtime
  12. ) {}
  13. public function updated(ServicePackage $servicePackage): void
  14. {
  15. if (! $servicePackage->wasChanged('status')) {
  16. return;
  17. }
  18. $rooms = [
  19. RealtimeRoom::package($servicePackage->id),
  20. ];
  21. if ($servicePackage->client?->user_id) {
  22. $rooms[] = RealtimeRoom::user($servicePackage->client->user_id);
  23. }
  24. if ($servicePackage->provider?->user_id) {
  25. $rooms[] = RealtimeRoom::user($servicePackage->provider->user_id);
  26. }
  27. $status = $servicePackage->status;
  28. $this->realtime->emit(
  29. RealtimeEvent::PACKAGE_STATUS_CHANGED,
  30. $rooms,
  31. [
  32. 'entity' => 'service_package',
  33. 'id' => $servicePackage->id,
  34. 'status' => $status instanceof ServicePackageStatusEnum ? $status->value : $status,
  35. ],
  36. );
  37. }
  38. }