Serialiser.php 1.0 KB

12345678910111213141516171819202122232425262728293031323334
  1. <?php
  2. namespace Knuckles\Camel\Tools;
  3. use Illuminate\Support\Arr;
  4. use Illuminate\Support\Collection;
  5. use Knuckles\Camel\Extraction\EndpointData;
  6. class Serialiser
  7. {
  8. /**
  9. * @param EndpointData[] $endpoints
  10. */
  11. public static function serialiseEndpointsForOutput(array $endpoints): array
  12. {
  13. $groupedEndpoints = collect($endpoints)
  14. ->groupBy('metadata.groupName')
  15. ->sortBy(
  16. static fn(Collection $group) => $group->first()->metadata->groupName,
  17. SORT_NATURAL
  18. );
  19. return $groupedEndpoints->map(fn(Collection $group) => [
  20. 'name' => $group[0]->metadata->groupName,
  21. 'description' => Arr::first($group, function (EndpointData $endpointData) {
  22. return $endpointData->metadata->groupDescription !== '';
  23. })->metadata->groupDescription ?? '',
  24. 'endpoints' => $group->map(fn(EndpointData $endpointData) => $endpointData->forOutput())
  25. ->toArray(),
  26. ])->toArray();
  27. }
  28. }