diff --git a/src/Controller/PrepareMenuController.php b/src/Controller/PrepareMenuController.php
new file mode 100644
index 0000000000000000000000000000000000000000..8f6cfcabaed6ae0ac345f852d8a504b50ce795a5
--- /dev/null
+++ b/src/Controller/PrepareMenuController.php
@@ -0,0 +1,22 @@
+<?php
+
+namespace App\Controller;
+
+use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
+use Symfony\Component\HttpFoundation\JsonResponse;
+use Symfony\Component\HttpFoundation\Request;
+use Symfony\Component\HttpFoundation\Response;
+use Symfony\Component\Routing\Attribute\Route;
+
+class PrepareMenuController extends AbstractController
+{
+    #[Route('/prepare/menu', name: 'app_prepare_menu')]
+    public function index(Request $request): Response
+    {
+        $array = $request->toArray();
+
+        $return = prepareMenu($array);
+
+        return new JsonResponse($return, Response::HTTP_OK);
+    }
+}
diff --git a/src/Repository/PrepareMenuRepository.php b/src/Repository/PrepareMenuRepository.php
new file mode 100644
index 0000000000000000000000000000000000000000..ee842c428fcf08a4c68da13f77d2e9c3bcc518e8
--- /dev/null
+++ b/src/Repository/PrepareMenuRepository.php
@@ -0,0 +1,27 @@
+<?php
+/**
+ * Сгруппировать подразедлы в верхние разделы меню
+ * Дочерние элементы поместить в массив родителя с ключом submenu
+ * Значение под ключом depth определяет уровень раздела
+ * Массив $aMenu всегда начинается с элемента depth = 0, все последующие элементы с depth = 1 являются его дочерними
+ * элементами
+ * @param array $aMenu
+ * @return array
+ */
+function prepareMenu(array $aMenu): array {
+    $returnableAMenu = [];
+    foreach ($aMenu as $menuPoint){
+        $depth = $menuPoint["depth"];
+        if ($depth === 1){
+            $tempArray = array_pop($returnableAMenu);
+            $tempArray['submenu'][] = $menuPoint;
+            $returnableAMenu[] = $tempArray;
+        }
+        else{
+            $returnableAMenu[] = $menuPoint;
+        }
+
+    }
+
+    return $returnableAMenu;
+}