RuleGroupObserver.php 1.0 KB

1234567891011121314151617181920212223242526272829303132333435363738
  1. <?php
  2. namespace App\Observers;
  3. use App\Jobs\VNet\reloadNode;
  4. use App\Models\Node;
  5. use App\Models\RuleGroup;
  6. use Arr;
  7. class RuleGroupObserver
  8. {
  9. public function updated(RuleGroup $ruleGroup): void
  10. {
  11. $changes = $ruleGroup->getChanges();
  12. if (Arr::exists($changes, 'type') || Arr::exists($changes, 'rules')) {
  13. $nodes = Node::whereType(4)->whereIn('id', $ruleGroup->nodes)->get(
  14. );
  15. if ($nodes) {
  16. reloadNode::dispatchNow($nodes);
  17. }
  18. } elseif (Arr::exists($changes, 'nodes')) {
  19. $nodes = Node::whereType(4)
  20. ->whereIn(
  21. 'id',
  22. array_diff(
  23. $ruleGroup->nodes,
  24. $ruleGroup->getOriginal('nodes') ?: []
  25. )
  26. )
  27. ->get();
  28. if ($nodes) {
  29. reloadNode::dispatchNow($nodes);
  30. }
  31. }
  32. }
  33. }