$set->getId(), 'name' => $set->getName(), ]; }, $this->listSets->execute()); return new JsonResponse(['sets' => $sets]); } public function show(int $setId): JsonResponse { try { $layout = $this->getSetLayout->execute( new GetSetLayoutRequest(setId: $setId), ); } catch (NotFoundException $exception) { return new JsonResponse( ['error' => $exception->getMessage()], 404, ); } $set = $layout->getSet(); return new JsonResponse([ 'set' => [ 'id' => $set->getId(), 'name' => $set->getName(), ], 'elements' => array_map( $this->elementPayload(...), $layout->getElements(), ), ]); } /** * @return array{ * id: int, * name: string, * kind: string, * children: list * } */ private function elementPayload(ElementLayoutNode $node): array { $element = $node->getElement(); return [ 'id' => $element->getId(), 'name' => $element->getName(), 'kind' => $element->getKind(), 'children' => array_map( $this->elementPayload(...), $node->getChildren(), ), ]; } }