Тестовое задание: React, Front dev middle
Благодарим за проявленный интерес!
Ниже представлено тестовое задание на позицию одного из разработчиков Frontend React.

Тестовое задание


1 Описание

Необходимо разработать простое приложение на React.js с TypeScript, используя MobX. Приложение должно получать список товаров и категорий по сети, отображать их на экране и предоставлять возможность добавлять товары в корзину и оформлять заказ.

Корзина и заказ, для упрощения реализации, должны храниться локально.


1.1 Данные

Данные - несколько категорий, содержащие товары.

Для получения данных реализован REST API, к которому отправляются запросы по следующему шаблону:

GET https://test2.sionic.ru/api/{model}

Где {model}— название сущности (например, Products или Categories).

Запрос на получение конкретной записи по ID
GET https://test2.sionic.ru/api/{model}/{id}

Доступные параметры запроса:
Параметрыпередаются в JSON-кодированной строке. –Фильтрация (filter)
Позволяет отфильтровать данные по любому свойству сущности.

?filter={"category_id":20}

Этот запросдля модели Products вернет все товары с category_id = 20. Можно передавать несколько значений в массиве:

?filter={"category_id":[20,21,22]}
Такой запрос вернет товарыиз категорий с id = 20, 21, 22.

Выборка (range)
Позволяет запрашивать данные в диапазоне.

Пример запроса: &range=[0,24] Вернет 25 записей(с 0-й по 24-ю).
Ограничение не более 50 записей за один запрос

1.2. Методы API

Описание методов:

Получение категорий:
GET https://test2.sionic.ru/api/Categories
Получение списка товаров:
GET ..api/Products?range=[0,24]&filter={"category_id":20}

Свойства товара (Products)

●	name — название товара
●	category_id — ID категории
●	description — описание товара

Получение изображений товаров:
GET ..api/ProductImages?filter={"product_id":[1,2]}

Получение вариаций товара (для определения цены):

Каждый товар может иметь несколько вариаций, но отображать нужно только первую.
GET ..api/ProductVariations?filter={"product_id":[1,2]}

Свойства вариации (ProductVariations)

●	product_id — ID товара
●	price — цена товара
●	stock — количество в наличии

1.3 Приложение

Внешний вид приложениядолжен соответствовать макету в Figma:

https://www.figma.com/


Обратите внимание:

  • Макет может содержать дополнительные интерактивные элементы,но они не требуют реализации механики взаимодействия.
  • В правой части расположены баннеры,которые должны быть видны на любом разрешении экрана, но не предполагают переходов.
  • Иконка профиля, адреси нижняя частьмакета должны быть сверстаны, но без активных переходов.

Обязательные требования

  • Использование MobX в качестве state-менеджера.
  • Вывод товаровс подгрузкой (infinite scroll).
  • Адаптивная версткадля мобильных устройств (обязательно для страницыс товарами, страница с корзиной – по возможности).
2. Приложение
Приложение должно быть написано на React, запускаться в современных браузерах и при старте отображать экран со списком категорий и товаров.

2.1 Категории
На экране категорий должны отображаться:
  • Все категории, полученные с сервера.
  • Кнопка "Все товары" (показывает список товаров без учета категорий).
  • Возможность выбора категории для отображения товаров только из этой категории.
Для каждой категории отображается её название.

2.2 Товары
На экране товаров отображается список товаров выбранной категории.
Каждый товар содержит:
  • Название
  • Описание
  • Цена
  • Кнопку "Добавить в корзину" (добавляет товар в корзину).

2.3 Корзина
Отдельная страница с отображением выбранных товаров.

Функциональность:
  • Изменение количества каждого товара.
  • Удаление товаров из корзины.
  • Очистка всей корзины.
  • Кнопка "Оформить заказ" (открывает модальное окно для оформления).

2.4 Оформление заказа
При оформлении переход на страницу с заполнением необходимых полей:
  • Имя
  • Адрес
  • Телефон
  • Время
Все поля обязательны для заполнения.
После успешного заполнения и нажатия кнопки "Сделать заказ":
  1. Корзина очищается.
  2. Пользователь перенаправляется обратно на страницу со списком товаров.
Готово?
Готовое тестовое задание необходимо отправить по e-mail:
📩 egor@sionic.ru
или Telegram

Проверяет тестовое задание:
👨‍💼 CEO проекта – Зубов Егор

Сроки выполнения
  • Продолжительность выполнения задания – около 8 часов.
  • Ожидаем выполнения в течение недели с момента отправки задания.
  • Рассмотрение результатов – до 5 рабочих дней.
  • В письме обязательно укажите время, потраченное на выполнение задания.

Оформление отправки
✅ Тема письма: "10002-1 Frontend JS"
✅ В письме должен быть архив с исходным кодом или ссылка на приватный репозиторий.
✅ Если требуется пояснение по реализации, приложите файл README.txt в корневую папку проекта.

Интересно кандидатам ✅

=