* } */ public function for(Room $room): array { $room->refresh(); $room->load([ 'players' => fn ($query) => $query ->active() ->select(['id', 'room_id', 'user_id', 'name', 'is_moderator', 'created_at']) ->orderByDesc('is_moderator') ->orderBy('created_at'), 'players.votes' => fn ($query) => $query ->where('room_id', $room->id) ->where('round', $room->current_round), ]); return [ 'current_round' => $room->current_round, 'revealed' => $room->revealed_at !== null, 'state_version' => $room->state_version, 'statistics' => $this->statistics->currentRound($room), 'players' => $room->players ->map(function ($player) use ($room): array { $vote = $player->votes->first(); return [ 'id' => $player->id, 'name' => $player->name, 'is_moderator' => $player->is_moderator, 'is_owner' => $player->user_id === $room->owner_id, 'has_voted' => $vote !== null, 'vote' => $room->revealed_at !== null ? $vote?->value : null, ]; }) ->all(), ]; } }