setName(self::COMMAND_NAME) ->setDescription('Update segment count cache for changed segments.'); } /** * @throws InvalidArgumentException */ protected function execute(InputInterface $input, OutputInterface $output): int { $segmentsForRecount = $this->getAllSegmentsForRecount(); if (count($segmentsForRecount) > 0) { $totalLeadCount = $this->leadListRepository->getLeadCount($segmentsForRecount); if (!is_array($totalLeadCount)) { $totalLeadCount = [$segmentsForRecount[0] => $totalLeadCount]; } foreach ($totalLeadCount as $segmentId => $leadCount) { $this->segmentCountCacheHelper->setSegmentContactCount((int) $segmentId, (int) $leadCount); } } $output->writeln(sprintf('%s segment\'s contact count have been updated.', count($segmentsForRecount))); return ExitCode::SUCCESS; } /** * @return int[] */ private function getAllSegmentsForRecount(): array { $segmentsForRecount = []; $segmentIds = $this->leadListRepository->getLists(); foreach ($segmentIds as $segment) { $segmentId = $segment['id']; if ($this->segmentCountCacheHelper->hasSegmentIdForReCount($segmentId)) { $segmentsForRecount[] = $segmentId; } } return $segmentsForRecount; } }