mirror of
https://github.com/ericasch6/scrum-poker-internal.git
synced 2026-10-13 18:52:10 +00:00
46 lines
1.0 KiB
PHP
46 lines
1.0 KiB
PHP
<?php
|
|
|
|
namespace App\Services\Rooms;
|
|
|
|
use App\Models\Room;
|
|
|
|
class RoomStatisticsService
|
|
{
|
|
/**
|
|
* @return array{average: string|null, median: string|null}|null
|
|
*/
|
|
public function currentRound(Room $room): ?array
|
|
{
|
|
if ($room->revealed_at === null) {
|
|
return null;
|
|
}
|
|
|
|
$values = [];
|
|
|
|
foreach ($room->players as $player) {
|
|
$vote = $player->votes->first();
|
|
|
|
if ($vote !== null && is_numeric($vote->value)) {
|
|
$values[] = (float) $vote->value;
|
|
}
|
|
}
|
|
|
|
sort($values, SORT_NUMERIC);
|
|
$count = count($values);
|
|
|
|
if ($count === 0) {
|
|
return ['average' => null, 'median' => null];
|
|
}
|
|
|
|
$middle = intdiv($count, 2);
|
|
$median = $count % 2 === 1
|
|
? $values[$middle]
|
|
: ($values[$middle - 1] + $values[$middle]) / 2;
|
|
|
|
return [
|
|
'average' => number_format(array_sum($values) / $count, 2, ',', ''),
|
|
'median' => number_format($median, 2, ',', ''),
|
|
];
|
|
}
|
|
}
|