documentFactory = $documentFactory ?? new DocumentFactory(); } /** * @return Collection|Document[] */ public function findDocuments(string $directory): Collection { $iterator = new RecursiveIteratorIterator( new RecursiveDirectoryIterator($directory), RecursiveIteratorIterator::SELF_FIRST ); return collect($iterator) ->filter(static fn(SplFileInfo $fileInfo) => $fileInfo->isFile()) ->filter(static fn(SplFileInfo $fileInfo) => preg_match('/.pdf$/i', $fileInfo->getBasename())) ->map(fn(SplFileInfo $fileInfo) => $this->documentFactory->createDocument($fileInfo)); } }