statisticsOpensRepository = $statisticsOpensRepository; $this->subscribersRepository = $subscribersRepository; } public function processTaskStrategy(ScheduledTask $task, $timer) { $subscribers = $this->subscribersRepository->findByUpdatedScoreNotInLastMonth(SubscribersEngagementScore::BATCH_SIZE); foreach ($subscribers as $subscriber) { $this->statisticsOpensRepository->recalculateSubscriberScore($subscriber); } if ($subscribers) { $this->scheduleImmediately(); } else { $this->schedule(); } return true; } public function scheduleImmediately(): void { $this->cronWorkerScheduler->schedule(static::TASK_TYPE, $this->getNextRunDateImmediately()); } public function getNextRunDateImmediately(): Carbon { return Carbon::createFromTimestamp($this->wp->currentTime('timestamp')); } public function getNextRunDate() { // random day of the next week $date = Carbon::createFromTimestamp($this->wp->currentTime('timestamp')); $date->addDay(); $date->setTime(mt_rand(0, 23), mt_rand(0, 59)); return $date; } }