Getting started

To set up dependencies:

yarn install

This project uses the json-server library, so it is necessary to write the command:

yarn run-db

and finally type command to start a project:

yarn start

In order to start the execution of the tests, it is necessary to run the command:

yarn test

Questions and Answers

Q1. Розібратися з функціоналом переміщення та видалення папок, файлів.

A1.

  • Почнімо з Backend логіки: Необхідно створити серверні ендпоінти, які приймають запити на видалення та переміщення об'єктів. За допомогою бібліотеки json-server, можна розробити моковий функціонал видалення папки або файлу, з файлом буде легше, з папкою, необхідно ще видалити дочірні елементи за полем parentId, аналогічно і з переміщенням, ми можемо організувати зміни в базі даних, за допомогою зміни поля parentId.

  • На фронтенді: необхідно доповнити наш HTTP сервіс для виклику даних ендпоінтів, і оновити в нашому випадку контекст для можливості виклику методів видалення чи переміщення. Потім необхідно оновити інтерфейсну логіку та постворювати нові pop-up модалку для можливості видалення, та інтеграція DnD ліби для зручного переміщення папок.

  • Далі йде процес тестування: Необіхідно покрити новий функціонал тестами

Q2. Знайти потенційно вразливі місця з точки зору продуктивності

A2.

  • Глибока вкладеність: Якщо структура буде мати глибшу вкладеність папок або файлів, це може призвести до зростання часу пошуку. Прикладом є швидке зростання рекурсивного обходу при великій кількості вкладених папок.

  • Доступ до недоступних об'єктів: Також якщо буде більше певних об'єктів з обмеженим доступом, то в даному випадку це також може вплинути на продуктивність.

  • Об'єми даних: При зростанні кількості даних пошук може стати повільним через збільшення обсягу даних, які потрібно обробляти при кожному запиті.

Для вирішення даної проблеми можна використати декілька способів, по перше це покращити пошук, а саме відфільтрувати непотрібні шляхи під час рекурсивного обходу, та старатись уникти зайвого перебору. При збільшенні об'єму даних, можна також залучити пагінацію, або застосовувати пошук запитом на API. Також для даної структури було б добре використати графові бази даних з ефективною оптимізацією запитів.