From 96774d954090f607e4dba51d8ab2c5178a7e373f Mon Sep 17 00:00:00 2001 From: Yisroel Baum Date: Sun, 21 Jun 2026 22:37:33 +0300 Subject: [PATCH] add element siblings --- backend/app/Controllers/ElementController.php | 37 ++++++++++++++----- .../UseCases/GetElement/GetElement.php | 9 +++++ .../UseCases/GetElement/GetElementResult.php | 10 +++++ 3 files changed, 47 insertions(+), 9 deletions(-) diff --git a/backend/app/Controllers/ElementController.php b/backend/app/Controllers/ElementController.php index 5164e59..36528d4 100644 --- a/backend/app/Controllers/ElementController.php +++ b/backend/app/Controllers/ElementController.php @@ -46,18 +46,15 @@ class ElementController } $element = $result->getElement(); - $childElements = []; - foreach ($result->getChildElements() as $childElement) { - $childElements[] = [ - 'id' => $childElement->getId(), - 'title' => $childElement->getTitle(), - 'description' => $childElement->getDescription(), - ]; - } return new JsonResponse([ - 'childElements' => $childElements, + 'childElements' => $this->buildElementSummaryPayloads( + $result->getChildElements(), + ), 'element' => $this->buildElementPayload($element), + 'siblingElements' => $this->buildElementSummaryPayloads( + $result->getSiblingElements(), + ), ], 200); } @@ -253,6 +250,28 @@ class ElementController ]; } + /** + * @param Element[] $elements + * @return array + */ + 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 { if ($path === null) { diff --git a/backend/app/Element/UseCases/GetElement/GetElement.php b/backend/app/Element/UseCases/GetElement/GetElement.php index 7103e47..584d30b 100644 --- a/backend/app/Element/UseCases/GetElement/GetElement.php +++ b/backend/app/Element/UseCases/GetElement/GetElement.php @@ -27,10 +27,19 @@ class GetElement throw new NotFoundException('Element not found'); } + $parentElement = $element->getParentElement(); + if ($parentElement === null) { + $siblingElements = [$element]; + } else { + $siblingElements = $this->elementRepository + ->findByParentElement($parentElement); + } + return new GetElementResult( element: $element, childElements: $this->elementRepository ->findByParentElement($element), + siblingElements: $siblingElements, ); } } diff --git a/backend/app/Element/UseCases/GetElement/GetElementResult.php b/backend/app/Element/UseCases/GetElement/GetElementResult.php index ad5f51b..6934411 100644 --- a/backend/app/Element/UseCases/GetElement/GetElementResult.php +++ b/backend/app/Element/UseCases/GetElement/GetElementResult.php @@ -8,10 +8,12 @@ class GetElementResult { /** * @param Element[] $childElements + * @param Element[] $siblingElements */ public function __construct( private Element $element, private array $childElements, + private array $siblingElements, ) { } @@ -27,4 +29,12 @@ class GetElementResult { return $this->childElements; } + + /** + * @return Element[] + */ + public function getSiblingElements(): array + { + return $this->siblingElements; + } }