whereIn('id', $pendingUserIds) ->whereRaw('u + d >= transfer_enable') ->where('transfer_enable', '>', 0) ->where('banned', 0) ->select(['id', 'group_id']) ->get(); if ($exceededUsers->isEmpty()) { return; } $groupedUsers = $exceededUsers->groupBy('group_id'); $notifiedCount = 0; foreach ($groupedUsers as $groupId => $users) { if (!$groupId) { continue; } $userIdsInGroup = $users->pluck('id')->toArray(); $servers = Server::whereJsonContains('group_ids', (string) $groupId)->get(); foreach ($servers as $server) { if (!NodeSyncService::isNodeOnline($server->id)) { continue; } NodeSyncService::push($server->id, 'sync.user.delta', [ 'action' => 'remove', 'users' => array_map(fn($id) => ['id' => $id], $userIdsInGroup), ]); $notifiedCount++; } } $this->info("Checked " . count($pendingUserIds) . " users, notified {$notifiedCount} nodes for " . $exceededUsers->count() . " exceeded users."); } }