Skip to content

Commit

Permalink
Missing functions for subobjects and result statistics
Browse files Browse the repository at this point in the history
  • Loading branch information
rjzondervan committed Dec 19, 2024
1 parent b173208 commit ec20891
Showing 1 changed file with 65 additions and 0 deletions.
65 changes: 65 additions & 0 deletions lib/Service/ObjectService.php
Original file line number Diff line number Diff line change
Expand Up @@ -275,6 +275,23 @@ public function findMultiple(array $ids): array
return $result;
}

public function findSubObjects(array $ids, string $property): array
{
$schemaObject = $this->schemaMapper->find($this->schema);
$property = $schemaObject->getProperties()[$property];

if(isset($property['items'])) {
$ref = explode('/', $property['items']['$ref']);
} else {
$subSchema = explode('/', $property['$ref']);
}
$subSchema = end($ref);

$subSchemaMapper = $this->getMapper(register: $this->getRegister(), schema: $subSchema);

return $subSchemaMapper->findMultiple($ids);
}

/**
* Get aggregations for objects matching filters
*
Expand Down Expand Up @@ -312,6 +329,54 @@ private function getDataFromObject(mixed $object, ?array $extend = []): mixed
return $object->getObject();
}

public function findAllPaginated(array $requestParams): array
{
// Extract specific parameters
$limit = $requestParams['limit'] ?? $requestParams['_limit'] ?? null;
$offset = $requestParams['offset'] ?? $requestParams['_offset'] ?? null;
$order = $requestParams['order'] ?? $requestParams['_order'] ?? [];
$extend = $requestParams['extend'] ?? $requestParams['_extend'] ?? null;
$page = $requestParams['page'] ?? $requestParams['_page'] ?? null;
$search = $requestParams['_search'] ?? null;

if ($page !== null && isset($limit)) {
$page = (int) $page;
$offset = $limit * ($page - 1);
}


// Ensure order and extend are arrays
if (is_string($order)) {
$order = array_map('trim', explode(',', $order));
}
if (is_string($extend)) {
$extend = array_map('trim', explode(',', $extend));
}

// Remove unnecessary parameters from filters
$filters = $requestParams;
unset($filters['_route']); // TODO: Investigate why this is here and if it's needed
unset($filters['_extend'], $filters['_limit'], $filters['_offset'], $filters['_order'], $filters['_page'], $filters['_search']);
unset($filters['extend'], $filters['limit'], $filters['offset'], $filters['order'], $filters['page']);

$objects = $this->findAll(limit: $limit, offset: $offset, filters: $filters, sort: $order, search: $search, extend: $extend);
$total = $this->count($filters);
$pages = $limit !== null ? ceil($total/$limit) : 1;

$facets = $this->getAggregations(
filters: $filters,
search: $search
);

return [
'results' => $objects,
'facets' => $facets,
'total' => $total,
'page' => $page ?? 1,
'pages' => $pages,
];
}

/**
* Gets all objects of a specific type.
*
Expand Down

0 comments on commit ec20891

Please sign in to comment.