personRepository = $personRepository; $this->personACLAwareRepository = $personACLAwareRepository; $this->security = $security; $this->authorizationHelper = $authorizationHelper; $this->extractDateFromPattern = $extractDateFromPattern; $this->extractPhonenumberFromPattern = $extractPhonenumberFromPattern; } public function provideQuery(string $pattern, array $parameters): SearchApiQuery { $datesResult = $this->extractDateFromPattern->extractDates($pattern); $phoneResult = $this->extractPhonenumberFromPattern->extractPhonenumber($datesResult->getFilteredSubject()); $filtered = $phoneResult->getFilteredSubject(); return $this->personACLAwareRepository->buildAuthorizedQuery( $filtered, null, null, count($datesResult->getFound()) > 0 ? $datesResult->getFound()[0] : null, null, null, null, null, count($phoneResult->getFound()) > 0 ? $phoneResult->getFound()[0] : null ) ->setSelectKey("person") ->setSelectJsonbMetadata("jsonb_build_object('id', person.id)"); } public function supportsTypes(string $pattern, array $types, array $parameters): bool { return \in_array('person', $types); } public function prepare(array $metadatas): void { $ids = \array_map(fn($m) => $m['id'], $metadatas); $this->personRepository->findByIds($ids); } public function supportsResult(string $key, array $metadatas): bool { return $key === 'person'; } public function getResult(string $key, array $metadata, float $pertinence) { return $this->personRepository->find($metadata['id']); } }