get(); $now = now(); $subscriptions->filter(function ($subscription) use ($now) { return $this->isTimeToRunSync($subscription, $now); })->each(function ($subscription) { SynchronizeAddressBooks::dispatch($subscription); }); } /** * Test if the last synchronized timestamp is older than the subscription's frequency time. * * @param AddressBookSubscription $subscription * @param Carbon $now * @return bool */ private function isTimeToRunSync(AddressBookSubscription $subscription, Carbon $now): bool { return is_null($subscription->last_synchronized_at) || $subscription->last_synchronized_at->addMinutes($subscription->frequency)->lessThan($now); } }