Skip to content

Latest commit

 

History

History
executable file
·
60 lines (51 loc) · 3.34 KB

README.md

File metadata and controls

executable file
·
60 lines (51 loc) · 3.34 KB

Задание

Вам предстоит разработать веб-сервис на языке Go для обработки файлов формата XLSX с плоским списком узлов и построения дерева из этого списка. Сервис должен предоставлять REST API, согласно спецификации ниже.

Инструкции

Вам предоставляются файлы nodes-*.xlsx, которые представляют собой плоский список узлов. Каждая строка файла, это один узел. Файл состоит из следующих столбцов:

  • id - уникальный идентификатор узла (целое число).
  • name - имя узла (строка).
  • parent_id - идентификатор родительского узла (целое число). Если узел является корневым, то parent_id будет равен 0.

Вам понадобятся следущие точки:

  1. Загрузка одного или нескольких файлов формата XLSX с плоским списком узлов. Сервис должен обрабатывать файлы и сохранять узлы в БД. Подумайте, как можно ускорить и оптимизировать эту операцию.
  2. Получение дерева в виде JSON, согласно вот такому формату:
[
  {
    "id": 1,
    "name": "node1",
    "children": [
      {
        "id": 4,
        "name": "node4",
        "children": [
          // node4 children ...
        ]
      },
      {
        "id": 5,
        "name": "node5",
        "children": [
          // node5 children ...
        ]
      },
      // other node1 children ...
    ]
  },
  {
    "id": 2,
    "name": "node2",
    "children": [
      // node2 children ...
    ]
  }
]

Можете использовать любые библиотеки, фреймворки и БД.

Тестирование:

Напишите модульные тесты, проверяющие различные сценарии.

Рекомендации

  1. Обратите внимание на возможные проблемы производительности, особенно при обработке больших файлов. Учтите, что отдаваемый точкой JSON может быть очень большим - десятки мегабайт. Постарайтесь любыми возможными способами увеличить пропускную способность этой точки.
  2. Следуйте принципам хорошей архитектуры.
  3. Учтите случаи, связанные с обработкой корневых узлов и возможностью циклических зависимостей.
  4. Помните об обработке исключительных ситуаций и возвращайте понятные сообщения об ошибках.
  5. При необходимости используйте комментарии в коде, чтобы объяснить принятые решения.