title = $title; $this->message = $message; $this->type = $type; $this->customBodyFields = $customBodyFields; $this->sendToAll = $sendToAll; $this->userIds = $userIds; } public function handle() { Log::info("🔔 SendFcmBatchJob started"); // ✅ If sendToAll = true if ($this->sendToAll) { // Fetch tokens with user preference $tokens = UserFcmToken::with('user') ->whereHas('user', fn($q) => $q->where('notification', 1)) ->get(['fcm_token', 'platform_type']); // Split tokens by platform $androidIosTokens = $tokens->whereIn('platform_type', ['Android', 'iOS'])->pluck('fcm_token')->toArray(); $otherTokens = $tokens->whereNotIn('platform_type', ['Android', 'iOS'])->pluck('fcm_token')->toArray(); // ✅ Send Android/iOS via Topic if (!empty($androidIosTokens)) { NotificationService::sendFcmNotification( [], $this->title, $this->message, $this->type, $this->customBodyFields, true ); Log::info("📱 Topic-based notification sent to Android/iOS users."); } // ✅ Send Others via Chunk (if any) if (!empty($otherTokens)) { collect($otherTokens)->chunk(500)->each(function ($chunk) { NotificationService::sendFcmNotification( $chunk->toArray(), $this->title, $this->message, $this->type, $this->customBodyFields, false ); }); Log::info("💻 Chunk-based notification sent to other platform users."); } } else { // ✅ Send to specific selected users UserFcmToken::with('user') ->whereIn('user_id', $this->userIds) ->whereHas('user', fn($q) => $q->where('notification', 1)) ->chunk(500, function ($tokens) { $fcmTokens = $tokens->pluck('fcm_token')->toArray(); NotificationService::sendFcmNotification( $fcmTokens, $this->title, $this->message, $this->type, $this->customBodyFields, false ); }); Log::info("👥 Notifications sent to selected users."); } Log::info("✅ SendFcmBatchJob finished"); } }