Данный проект представляет собой приложение, в котором можно:
- Размещать новые объявления (c пошаговой формой и различными категориями)
- Редактировать существующие объявления
- Просматривать список объявлений с пагинацией и фильтрами
- Искать объявления по названию
- Авторизовываться для доступа к функционалу добавления/редактирования
- React + TypeScript + Vite
- Redux Toolkit (RTK Query) для управления состоянием и запросами к серверу
- react-hook-form для создания форм и валидации
- Material UI для UI-компонентов и стилизации
- Docker (опционально) для контейнеризации клиентской и серверной части
- Node.js (Express) для серверной части (обработка CRUD по объявлениям)
- ESLint с правилами TypeScript
- Jest / Vitest (тесты для клиентской части)
-
Список объявлений
- Отображение всех объявлений
- Пагинация (макс. 5 на страницу)
- Поиск по названию (с
debounce) и фильтрация по категории - Если пользователь не авторизован — может только просматривать
-
Добавление / Редактирование
- Пошаговая форма:
- Шаг 1: основные поля (название, описание, локация, фото, категория)
- Шаг 2: поля зависят от выбранной категории
- Валидация полей, в том числе дифференцированная по категории
- Сохранение черновика в
localStorage, если пользователь не отправил форму - Редактирование с предзаполнением, если пользователь авторизован
- Пошаговая форма:
-
Авторизация (фейковая)
- Диалоговое окно для логина
- «test / 1234» → «Вход» (при успешном вводе выставляется
fake-token) - Скрытие/отображение кнопок «Разместить» и «Редактировать/Удалить» в зависимости от авторизации
-
Просмотр объявления
- Детальная информация (все поля)
- Кнопка «Редактировать» доступна только авторизованному пользователю
-
Статичная серверная часть
- Простейший
Express-сервер сin-memoryхранилищем объявлений - CRUD-операции:
GET /items,GET /items/:id,POST /items,PUT /items/:id,DELETE /items/:id
- Простейший
- Установите Docker и Docker Compose (v2).
- Перейдите в корень проекта:
cd path/to/project - Соберите и запустите контейнеры:
docker-compose up --build
- Приложение будет доступно на порту 80 (клиент, React)
Сервер (Express) — на порту 3000.
Для остановки контейнеров:
docker-compose down
-
Сервер:
- Перейдите в папку
server(если выделена отдельно) - Установите зависимости:
npm install
- Запустите сервер:
npm run start
- По умолчанию сервер слушает
http://localhost:3000
- Перейдите в папку
-
Клиент:
- Перейдите в папку
client - Установите зависимости:
npm install
- Запустите в режиме разработки (Vite):
npm run dev
- Откройте
http://localhost:5173(или другой порт, указанный в консоли)
- Перейдите в папку
- RTK Query (Redux Toolkit) — для запросов к бэкенду:
itemsApiс методамиgetItems,createItem,updateItem,deleteItem.
- react-hook-form — для пошаговой формы:
- Сохранение состояния между шагами
- Валидация полей по категориям
- Сохранение черновика (
localStorage)
- Material UI — для UI:
- Stepper для пошаговой формы
- TextField, Select, Button, Container, etc.
- Адаптивная сетка (Grid)
- Авторизация (фейк):
- При
username === "test" && password === "1234"→ Выдаётсяfake-token - При наличии
fake-token→ Доступен функционал добавления/редактирования - Иначе — только просмотр
- При
- Тесты (Vitest / react-testing-library):
- Тесты на компоненты (RHFTextField, AuthDialog)
- Docker:
- Если Docker Daemon не запущен — контейнеры не создаются.
- При ошибке
Cannot find module 'app.js'— убедитесь, что файлы копируются корректно в Dockerfile.
- Не хватает прав на редактирование:
- Если пользователь не авторизован (
token === null) — не отображаются кнопки «Разместить», «Редактировать».
- Если пользователь не авторизован (
- Поиск:
- Начинается только после 3 введённых символов. При <3 символах показываются все объявления.
- Черновик:
- Сохраняется в
localStorageпри каждом изменении полей (если не редактируем). При успешной отправке — очищается.
- Сохраняется в
- Поддержка горячей перезагрузки (Vite):
- В режиме
devперезапускается только клиентская часть. Сервер Express обновляйте вручную.
- В режиме