Skip to content
This repository was archived by the owner on Jun 25, 2025. It is now read-only.
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 0 additions & 7 deletions Http/Http.php
Original file line number Diff line number Diff line change
Expand Up @@ -100,13 +100,6 @@ class Http
*/
const TO_FIELD = 'to';

/**
* @var string
*
* Purge Query object from response
*/
const PURGE_QUERY_FROM_RESPONSE_FIELD = 'incl_query';

/**
* Get common query values.
*
Expand Down
36 changes: 36 additions & 0 deletions Query/Query.php
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,13 @@ class Query implements HttpTransportable
*/
const NO_MIN_SCORE = 0.0;

/**
* @var string
*
* UUID
*/
private $UUID;

/**
* @var Coordinate
*
Expand Down Expand Up @@ -1378,6 +1385,30 @@ public function getSubqueries(): array
return $this->subqueries;
}

/**
* Identify it.
*
* @param string $UUID
*
* @return Query
*/
public function identifyWith(string $UUID)
{
$this->UUID = $UUID;

return $this;
}

/**
* Get identification.
*
* @return string|null
*/
public function getUUID(): ? string
{
return $this->UUID;
}

/**
* To array.
*
Expand All @@ -1386,6 +1417,7 @@ public function getSubqueries(): array
public function toArray(): array
{
return array_filter([
'uuid' => $this->UUID,
'q' => '' !== $this->getQueryText()
? $this->getQueryText()
: null,
Expand Down Expand Up @@ -1518,6 +1550,10 @@ public static function createFromArray(array $array): self
return Query::createFromArray($query);
}, $array['subqueries'] ?? []);

if (isset($array['uuid'])) {
$query->UUID = $array['uuid'];
}

return $query;
}
}
2 changes: 1 addition & 1 deletion Repository/InMemoryRepository.php
Original file line number Diff line number Diff line change
Expand Up @@ -76,7 +76,7 @@ public function query(
);

$items = $this->items[$this->getIndexKey()] ?? [];
$result = new Result($query, count($items), count($resultingItems));
$result = new Result($query->getUUID(), count($items), count($resultingItems));
foreach ($resultingItems as $resultingItem) {
$result->addItem($resultingItem);
}
Expand Down
3 changes: 1 addition & 2 deletions Repository/TransformableRepository.php
Original file line number Diff line number Diff line change
Expand Up @@ -148,7 +148,7 @@ private function applyTransformersToResult(Result $result): Result
{
return empty($result->getSubresults())
? Result::create(
$result->getQuery(),
$result->getQueryUUID(),
$result->getTotalItems(),
$result->getTotalHits(),
$result->getAggregations(),
Expand All @@ -160,7 +160,6 @@ private function applyTransformersToResult(Result $result): Result
)
)
: Result::createMultiResult(
$result->getQuery(),
array_map(function (Result $subresult) {
return $this->applyTransformersToResult($subresult);
}, $result->getSubresults())
Expand Down
44 changes: 20 additions & 24 deletions Result/Result.php
Original file line number Diff line number Diff line change
Expand Up @@ -17,19 +17,18 @@

use Apisearch\Model\HttpTransportable;
use Apisearch\Model\Item;
use Apisearch\Query\Query;

/**
* Class Result.
*/
class Result implements HttpTransportable
{
/**
* @var Query
* @var string
*
* Query associated
* UUID
*/
private $query;
private $queryUUID;

/**
* @var Item[]
Expand Down Expand Up @@ -83,24 +82,24 @@ class Result implements HttpTransportable
/**
* Result constructor.
*
* @param Query $query
* @param int $totalItems
* @param int $totalHits
* @param string|null $queryUUID
* @param int $totalItems
* @param int $totalHits
*/
public function __construct(
Query $query,
?string $queryUUID,
int $totalItems,
int $totalHits
) {
$this->query = $query;
$this->queryUUID = $queryUUID;
$this->totalItems = $totalItems;
$this->totalHits = $totalHits;
}

/**
* Create by.
*
* @param Query $query
* @param string|null $queryUUID
* @param int $totalItems
* @param int $totalHits
* @param Aggregations|null $aggregations
Expand All @@ -110,15 +109,15 @@ public function __construct(
* @return Result
*/
public static function create(
Query $query,
?string $queryUUID,
int $totalItems,
int $totalHits,
? Aggregations $aggregations,
array $suggests,
array $items
): self {
$result = new self(
$query,
$queryUUID,
$totalItems,
$totalHits
);
Expand All @@ -133,16 +132,13 @@ public static function create(
/**
* Create multiquery Result.
*
* @param Query $query
* @param Result[] $subresults
*
* @return Result
*/
public static function createMultiResult(
Query $query,
array $subresults
) {
$result = new Result($query, 0, 0);
public static function createMultiResult(array $subresults)
{
$result = new Result(null, 0, 0);
$result->subresults = $subresults;

return $result;
Expand Down Expand Up @@ -320,13 +316,13 @@ public function getSuggests(): array
}

/**
* Get query.
* Get query UUID.
*
* @return Query
* @return string|null
*/
public function getQuery(): Query
public function getQueryUUID(): ? string
{
return $this->query;
return $this->queryUUID;
}

/**
Expand Down Expand Up @@ -367,7 +363,7 @@ public function getSubresults(): array
public function toArray(): array
{
return array_filter([
'query' => $this->query->toArray(),
'query_uuid' => $this->queryUUID,
'total_items' => $this->totalItems,
'total_hits' => $this->totalHits,
'items' => array_map(function (Item $item) {
Expand Down Expand Up @@ -399,7 +395,7 @@ public function toArray(): array
public static function createFromArray(array $array): self
{
$result = self::create(
Query::createFromArray($array['query'] ?? []),
$array['query_uuid'] ?? '',
$array['total_items'] ?? 0,
$array['total_hits'] ?? 0,
isset($array['aggregations'])
Expand Down
12 changes: 12 additions & 0 deletions Tests/Query/QueryTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -70,6 +70,7 @@ public function testDefaults()
$this->assertEquals(Query::NO_MIN_SCORE, $query->getMinScore());
$this->assertEquals([], $query->getMetadata());
$this->assertEquals($query, HttpHelper::emulateHttpTransport($query));
$this->assertNull($query->getUUID());
}

/**
Expand Down Expand Up @@ -187,4 +188,15 @@ public function testSubqueries()
]);
$this->assertCount(3, $query->getSubqueries());
}

/**
* Test identifier.
*/
public function testIdentifier()
{
$query = Query::createMatchAll()->identifyWith('123');
$this->assertEquals('123', $query->getUUID());
$query = HttpHelper::emulateHttpTransport($query);
$this->assertEquals('123', $query->getUUID());
}
}
29 changes: 12 additions & 17 deletions Tests/Result/ResultTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,6 @@

use Apisearch\Model\Item;
use Apisearch\Model\ItemUUID;
use Apisearch\Query\Query;
use Apisearch\Result\Aggregation;
use Apisearch\Result\Aggregations;
use Apisearch\Result\Result;
Expand All @@ -35,15 +34,14 @@ class ResultTest extends TestCase
public function testToArray()
{
$result = new Result(
Query::createMatchAll(),
'123',
2, 1
);
$resultArray = $result->toArray();
$this->assertFalse(array_key_exists('items', $resultArray));
$this->assertFalse(array_key_exists('aggregations', $resultArray));
$this->assertFalse(array_key_exists('suggests', $resultArray));
$this->assertEquals(Query::createMatchAll(), $result->getQuery());
$this->assertFalse(array_key_exists('query', $resultArray));
$this->assertEquals('123', $result->getQueryUUID());
$this->assertEquals(1, $result->getTotalHits());
$this->assertEquals(1, $resultArray['total_hits']);
$this->assertEquals(2, $result->getTotalItems());
Expand All @@ -61,7 +59,7 @@ public function testToArray()
public function testItems()
{
$result = new Result(
Query::createMatchAll(),
'123',
2, 1
);
$result->addItem(Item::create(ItemUUID::createByComposedUUID('1~product')));
Expand All @@ -79,7 +77,7 @@ public function testItems()
public function testAggregations()
{
$result = new Result(
Query::createMatchAll(),
'123',
2, 1
);
$aggregations = new Aggregations(2);
Expand All @@ -103,7 +101,7 @@ public function testAggregations()
public function testSuggests()
{
$result = new Result(
Query::createMatchAll(),
'123',
2, 1
);
$result->addSuggest('hola');
Expand All @@ -118,7 +116,7 @@ public function testSuggests()
public function testGetItemsGroupedByType()
{
$result = new Result(
Query::createMatchAll(),
'123',
1, 1
);

Expand Down Expand Up @@ -153,9 +151,7 @@ public function testGetItemsGroupedByType()
public function testCreateFromArrayAllValues()
{
$resultAsArray = [
'query' => [
'q' => 'engonga',
],
'query_uuid' => '123',
'total_items' => 10,
'total_hits' => 20,
'aggregations' => [
Expand Down Expand Up @@ -186,7 +182,7 @@ public function testCreateFromArrayAllValues()
];

$result = Result::createFromArray($resultAsArray);
$this->assertEquals(Query::create('engonga'), $result->getQuery());
$this->assertEquals('123', $result->getQueryUUID());
$this->assertEquals(10, $result->getTotalItems());
$this->assertEquals(20, $result->getTotalHits());
$this->assertInstanceof(Aggregation::class, $result->getAggregation('gogo'));
Expand All @@ -200,11 +196,10 @@ public function testCreateFromArrayAllValues()
*/
public function testMultiResult()
{
$query = Query::createMatchAll();
$result = Result::createMultiResult($query, [
'res1' => Result::create($query, 10, 3, null, [], []),
'res2' => Result::create($query, 10, 4, null, [], []),
'res3' => Result::create($query, 10, 5, null, [], []),
$result = Result::createMultiResult([
'res1' => Result::create('1', 10, 3, null, [], []),
'res2' => Result::create('2', 10, 4, null, [], []),
'res3' => Result::create('3', 10, 5, null, [], []),
]);

$this->assertCount(3, $result->getSubresults());
Expand Down