isDraft()) { return 0; } $total = 0; $this->recipients->query($campaign->filters ?? []) ->select(['id', 'email']) ->chunkById(500, function ($users) use ($campaign, &$total): void { $rows = $users->map(fn (User $user): array => [ 'newsletter_campaign_id' => $campaign->id, 'user_id' => $user->id, 'email' => $user->email, 'status' => NewsletterRecipientStatus::Pending->value, 'created_at' => now(), 'updated_at' => now(), ])->all(); $campaign->recipients()->insert($rows); $total += count($rows); }); if ($total === 0) { return 0; } $campaign->update([ 'status' => NewsletterCampaignStatus::Sending->value, 'recipients_total' => $total, ]); $campaign->recipients() ->select(['id']) ->chunkById(500, function ($recipients): void { foreach ($recipients as $recipient) { SendNewsletterCampaignMail::dispatch($recipient->id); } }); return $total; } }