extend search api to users

This commit is contained in:
2021-08-16 14:39:18 +02:00
parent 6b4e27a531
commit 54c4524b27
6 changed files with 140 additions and 42 deletions

View File

@@ -2,6 +2,7 @@
namespace Chill\MainBundle\Search;
use Chill\MainBundle\Search\Entity\SearchUserApiProvider;
use Chill\MainBundle\Serializer\Model\Collection;
use Chill\MainBundle\Pagination\PaginatorFactory;
use Chill\PersonBundle\Search\SearchPersonApiProvider;
@@ -25,12 +26,14 @@ class SearchApi
EntityManagerInterface $em,
SearchPersonApiProvider $searchPerson,
ThirdPartyApiSearch $thirdPartyApiSearch,
SearchUserApiProvider $searchUser,
PaginatorFactory $paginator
)
{
$this->em = $em;
$this->providers[] = $searchPerson;
$this->providers[] = $thirdPartyApiSearch;
$this->providers[] = $searchUser;
$this->paginator = $paginator;
}
@@ -41,6 +44,10 @@ class SearchApi
{
$queries = $this->findQueries($pattern, $types, $parameters);
if (0 === count($queries)) {
throw new SearchApiNoQueryException($pattern, $types, $parameters);
}
$total = $this->countItems($queries, $types, $parameters);
$paginator = $this->paginator->create($total);
@@ -49,9 +56,7 @@ class SearchApi
$this->prepareProviders($rawResults);
$results = $this->buildResults($rawResults);
$collection = new Collection($results, $paginator);
return $collection;
return new Collection($results, $paginator);
}
private function findQueries($pattern, array $types, array $parameters): array
@@ -77,7 +82,7 @@ class SearchApi
$rsmCount->addScalarResult('count', 'count');
$countNq = $this->em->createNativeQuery($countQuery, $rsmCount);
$countNq->setParameters($parameters);
return $countNq->getSingleScalarResult();
}
@@ -130,7 +135,7 @@ class SearchApi
$nq = $this->em->createNativeQuery($union, $rsm);
$nq->setParameters($parameters);
return $nq->getResult();
}
@@ -142,7 +147,7 @@ class SearchApi
if ($p->supportsResult($r['key'], $r['metadata'])) {
$metadatas[$k][] = $r['metadata'];
break;
}
}
}
}
@@ -161,7 +166,7 @@ class SearchApi
$p->getResult($r['key'], $r['metadata'], $r['pertinence'])
);
break;
}
}
}
}