Разработать личный кабинет продавца на маркетплейсе, в котором есть возможность управлять своими объявлениями и заказами. Пункты, отмеченные галочкой (✓) - выполнены.
- Тестовое задание необходимо реализовать с использованием представленного api.
- Результат тестового должен соответствовать требованиям, описанным ниже.
- В пунктах «Будет плюсом» обозначены требования, выполнять которые не обязательно, но даже частичное выполнение этих пунктов позволит лучше раскрыть ваши знания и навыки.
Приложение должно состоять из:
- [✓] Страницы объявления
- [✓] Страницы всех объявлений
- [✓] Страницы заказов
- [✓] Панели навигации
- [✓] Отображается список всех объявлений продавца
- [✓] Реализована пагинация показа объявлений
- [✓] Реализован выбор количества объявлений для показа на странице (по умолчанию должно быть 10)
- [✓] Реализован поиск по названию объявления
- [✓] Можно перейти на страницу объявления (по клику на карточку)
- [✓] В карточке объявления есть следующая информация о нем:
- [✓] Картинка
- [✓] Название;
- [✓] Стоимость;
- [✓] Количество просмотров;
- [✓] Количество лайков;
- [✓] Есть возможность создавать новые объявления (Модальное окно с input):
- [✓] Картинка (текстовое поле для ввода URL);
- [✓] Название (текстовое поле);
- [✓] Описание (текстовое поле)
- [✓] Стоимость (числовое поле);
- [✓] Есть возможность просмотра объявления
- [✓] В редактировании объявления есть возможность:
- [✓] Менять картинку;
- [✓] Менять название;
- [✓] Менять цену;
- [✓] Менять описание.
- [✓] Отображается список заказов с фильтрами по статусу
- [✓] Возможно сделать сортировку по сумме заказа
- [✓] На карточке заказа изображена следующая информация:
- [✓] Количество товаров;
- [✓] Возможность завершения заказа;
- [✓] Стоимость заказа;
- [✓] Дата создания заказа;
- [✓] Статус (текстом);
- [✓] Номер заказа;
- [✓] Кнопка “Показать все товары”, показывающая все товары в данном заказе (можно отображать их в этой же карточке или сделать модальное окно)
- [✓] При клике на товар в заказе есть возможность перейти в объявление продавца по этому товару
- [✓] Вкладка “Объявления” - реализован переход на страницу объявлений
- [✓] Вкладка “Заказы” - реализован переход на страницу заказов
Дополнительное задание
- [✓] На странице всех объявлений реализована фильтрация выдачи по:
- цене;
- просмотрам;
- лайкам
- [✓] На странице объявлений при клике на кнопку “Заказы” на карточке товара происходит переход в раздел Заказы, где показаны заказы, которые содержат это объявление в товарах.
- [✓] На странице заказов реализована пагинация показа заказов.
- Стек технологий:
- Frontend фреймворк: React, версия 18
- Можно использовать любую общедоступную библиотеку компонент. Была использована библиотека PrimeReact
- сборщик: Webpack/Vite (Был использован Vite)
- Node.js: 20 или выше
- пакетный менеджер: npm
- Роутинг выполнен с использованием React Router v6
Будет плюсом:
- [✓] Использование TypeScript
- [✓] Настройка проверки кода с помощью ESLint
- Наличие docker-файла для запуска
- Прерывание (отмена/прекращение) запросов переходе со страницы на страницу
- Покрытие кода юнит-тестами
- Последняя версия библиотеки "json-server" (v1.0.0-beta.2) работала некорректно в плане фильтрации и сортировки: например, запрос GET
advertisements?name_like=телефон
возвращал все данные по эндпоинтуadvertisements
вместо тех, что содержат данное слово. Было решено откатиться на версию v0.17.4, где никаких проблем с сортировкой и фильтрацией нет. - Не было инструкций как действовать после добавления нового объявления. Было решено сделать сортировку объявлений по дате создания по убыванию, так как логично было бы видеть последние объявления первыми. При добавлении нового объявления было решено возвращаться на первую страницу и отображать объявления с новым добавленным элементом в начале списка.
- В качестве UI Kit была выбрана библиотека PrimeReact, поскольку был опыт работы с ней ранее. К плюсам данной библиотеки можно отнести достаточно большое количество компонентов на все случаи жизни, большое количество тем, как светлых, так и тёмных, подробная документация с примерам кода. К минусам можно отнести достаточно большой объём компонентов.
- Пункт из дополнительного задания по переходу к заказам, содержащим текущее объявление, был реализован в виде ссылки на странице самого объявления, а не на карточке объявления на странице всех объявлений. Посчитал, что так будет логичней и удобней.
Поскольку на выполнение проекта давалось ограниченное время, реализация имеет ряд недостатков:
- Отсутствуетвалидация форм. Сделана минимальная валидация стандартными средствами HTML5.
- Мало внимания уделено дизайну и вёрстке
- Обработаны не все возможные ошибки. Ошибки выводятся в консоль, либо с помощью компонента Toast
- Необходимо добавить прелоадеры и скелетоны для более лучшего user experience
- Фильтрацию по лайкам, просмотрам и цене неплохо было бы сделать путём ввода диапазона "от и до". Сейчас реализован только точный фильтр (по конкретному числу).
- Установить NodeJS v20 или выше, и пакетный мнеджер npm
- Клонировать репозиторий
git clone https://github.com/tracktor-git/avito-test
- Установить зависимости
npm install
- Запустить сервер
npm run server
- Запустить проект в режиме разработки
npm run dev
- Проект будет доступен по адресу
http://localhost:5173/