Вам предстоит разработать веб-сервис на языке Go для обработки файлов формата XLSX с плоским списком узлов и построения дерева из этого списка. Сервис должен предоставлять REST API, согласно спецификации ниже.
Вам предоставляются файлы nodes-*.xlsx, которые представляют собой плоский список узлов. Каждая строка файла, это один узел. Файл состоит из следующих столбцов:
id
- уникальный идентификатор узла (целое число).name
- имя узла (строка).parent_id
- идентификатор родительского узла (целое число). Если узел является корневым, то parent_id будет равен 0.
Вам понадобятся следущие точки:
- Загрузка одного или нескольких файлов формата XLSX с плоским списком узлов. Сервис должен обрабатывать файлы и сохранять узлы в БД. Подумайте, как можно ускорить и оптимизировать эту операцию.
- Получение дерева в виде 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 ...
]
}
]
Можете использовать любые библиотеки, фреймворки и БД.
Напишите модульные тесты, проверяющие различные сценарии.
- Обратите внимание на возможные проблемы производительности, особенно при обработке больших файлов. Учтите, что отдаваемый точкой JSON может быть очень большим - десятки мегабайт. Постарайтесь любыми возможными способами увеличить пропускную способность этой точки.
- Следуйте принципам хорошей архитектуры.
- Учтите случаи, связанные с обработкой корневых узлов и возможностью циклических зависимостей.
- Помните об обработке исключительных ситуаций и возвращайте понятные сообщения об ошибках.
- При необходимости используйте комментарии в коде, чтобы объяснить принятые решения.