add element siblings

This commit is contained in:
Yisroel Baum 2026-06-21 22:37:33 +03:00
parent eb868679c8
commit 96774d9540
Signed by: yisroelbaum
GPG key ID: 0FA60884F75520A9
3 changed files with 47 additions and 9 deletions

View file

@ -46,18 +46,15 @@ class ElementController
} }
$element = $result->getElement(); $element = $result->getElement();
$childElements = [];
foreach ($result->getChildElements() as $childElement) {
$childElements[] = [
'id' => $childElement->getId(),
'title' => $childElement->getTitle(),
'description' => $childElement->getDescription(),
];
}
return new JsonResponse([ return new JsonResponse([
'childElements' => $childElements, 'childElements' => $this->buildElementSummaryPayloads(
$result->getChildElements(),
),
'element' => $this->buildElementPayload($element), 'element' => $this->buildElementPayload($element),
'siblingElements' => $this->buildElementSummaryPayloads(
$result->getSiblingElements(),
),
], 200); ], 200);
} }
@ -253,6 +250,28 @@ class ElementController
]; ];
} }
/**
* @param Element[] $elements
* @return array<int, array{
* id: int,
* title: string,
* description: string,
* }>
*/
private function buildElementSummaryPayloads(array $elements): array
{
$payloads = [];
foreach ($elements as $element) {
$payloads[] = [
'id' => $element->getId(),
'title' => $element->getTitle(),
'description' => $element->getDescription(),
];
}
return $payloads;
}
private function storageUrl(?string $path, string $folderPrefix): ?string private function storageUrl(?string $path, string $folderPrefix): ?string
{ {
if ($path === null) { if ($path === null) {

View file

@ -27,10 +27,19 @@ class GetElement
throw new NotFoundException('Element not found'); throw new NotFoundException('Element not found');
} }
$parentElement = $element->getParentElement();
if ($parentElement === null) {
$siblingElements = [$element];
} else {
$siblingElements = $this->elementRepository
->findByParentElement($parentElement);
}
return new GetElementResult( return new GetElementResult(
element: $element, element: $element,
childElements: $this->elementRepository childElements: $this->elementRepository
->findByParentElement($element), ->findByParentElement($element),
siblingElements: $siblingElements,
); );
} }
} }

View file

@ -8,10 +8,12 @@ class GetElementResult
{ {
/** /**
* @param Element[] $childElements * @param Element[] $childElements
* @param Element[] $siblingElements
*/ */
public function __construct( public function __construct(
private Element $element, private Element $element,
private array $childElements, private array $childElements,
private array $siblingElements,
) { ) {
} }
@ -27,4 +29,12 @@ class GetElementResult
{ {
return $this->childElements; return $this->childElements;
} }
/**
* @return Element[]
*/
public function getSiblingElements(): array
{
return $this->siblingElements;
}
} }