Files
breadcrumb-the-shire/lib/Service/Data/GridUserCountEnricher.php

47 lines
1.4 KiB
PHP
Raw Normal View History

<?php
namespace MintyPHP\Service\Data;
class GridUserCountEnricher
{
/**
* Collect entity IDs from grid rows, batch-query total and active user
* counts, and return a lookup map keyed by entity ID.
*
* @param array[] $rows Grid result rows (each must have an 'id' key).
* @param callable(list<int>): array<int,int> $countTotal fn(ids) => [entityId => totalCount]
* @param callable(list<int>): array<int,int> $countActive fn(ids) => [entityId => activeCount]
* @return array<int, array{active_users: int, inactive_users: int}>
*/
public function computeCounts(array $rows, callable $countTotal, callable $countActive): array
{
$ids = [];
foreach ($rows as $row) {
$id = (int) ($row['id'] ?? 0);
if ($id > 0) {
$ids[] = $id;
}
}
$ids = array_values(array_unique($ids));
if (!$ids) {
return [];
}
$totalCounts = $countTotal($ids);
$activeCounts = $countActive($ids);
$result = [];
foreach ($ids as $id) {
$total = (int) ($totalCounts[$id] ?? 0);
$active = (int) ($activeCounts[$id] ?? 0);
$result[$id] = [
'active_users' => $active,
'inactive_users' => max(0, $total - $active),
];
}
return $result;
}
}