✅ Регистрация новых пользователей
✅ Вход за существующий аккаунт
✅ Сохранение JWT токена
✅ Обработка ошибок и валидация
Endpoints:
POST /api/login - ВходPOST /api/login/register - Регистрация✅ Привет, [Имя пользователя]!
✅ Быстрые ссылки на разделы
✅ Промо-баннер со скидками
✅ Категории поиска
✅ Загрузка всех залов с API
✅ Сортировка: по названию, цене ↑/↓
✅ Фильтрация по макс. цене (range slider)
✅ Добавление в корзину с дата/временем
✅ Функция избранного (❤️ кнопка)
✅ Загрузка избранного при входе
Endpoints:
GET /api/halls - Получить все залыGET /api/favorites - Получить избранное пользователя (JWT)POST /api/favorites - Добавить в избранное (JWT)Функция избранного:
// Требует авторизации
Headers: { Authorization: "Bearer {token}" }
Body: { hall_id: number, photographer_id: null }
✅ Поиск по названию и описанию
✅ Фильтрация по категориям
✅ Клиентский поиск (быстрый)
✅ Отображение результатов в реальном времени
Как работает:
✅ Добавление/удаление товаров
✅ Увеличение/снижение количества часов
✅ Автоматический расчет суммы
✅ Сохранение бронирования через API
✅ Красный бэйдж с количеством товаров
✅ Проверка авторизации перед оплатой
Процесс оформления:
POST /api/booking для каждого товараAPI запрос:
POST /api/booking
Headers: {
'Content-Type': 'application/json',
'Authorization': 'Bearer {token}'
}
Body: {
clientId: number,
hallId: number,
startTime: ISO string,
endTime: ISO string,
totalCost: number,
status: 'pending'
}
✅ Отображение имени пользователя
✅ Вкладка "Профиль" с меню
✅ Вкладка "Мои бронирования" со списком
✅ Статусы бронирований
✅ Форматирование дат
✅ Выход из аккаунта
Вкладка "Профиль":
Вкладка "Мои бронирования":
Endpoints:
GET /api/booking - Получить все бронирования✅ Нижняя навигация для мобилей (5 вкладок)
✅ Боковая навигация для ПК
✅ Переключение между вкладками
✅ Красный бэйдж на иконке корзины
✅ Проверка авторизации при загрузке
✅ Загрузка списка залов
| Метод | Endpoint | Auth | Описание |
|---|---|---|---|
POST |
/api/login |
❌ | Вход пользователя |
POST |
/api/login/register |
❌ | Регистрация |
GET |
/api/halls |
❌ | Все залы |
GET |
/api/services |
❌ | Все услуги |
GET |
/api/booking |
❌ | Все бронирования |
POST |
/api/booking |
✅ | Создать бронирование |
PATCH |
/api/booking/:id |
✅ | Обновить бронирование |
DELETE |
/api/booking/:id |
✅ | Удалить бронирование |
GET |
/api/favorites |
✅ | Получить избранное |
POST |
/api/favorites |
✅ | Добавить в избранное |
Где сохраняется: localStorage.jwt_token
Структура: {id: number, firstName: string}
Как использовать:
// Отправка
Headers: { Authorization: `Bearer ${token}` }
// Декодирование на клиенте
const payload = JSON.parse(atob(token.split('.')[1]));
cd Api
npm install
node app.js
✅ Сервер на http://localhost:3000
cd Site
npm install
npm run dev
✅ Фронтенд на http://localhost:5173 (или другой порт)
Регистрация:
Просмотр залов:
Поиск:
Оформление заказа:
Профиль:
API URL: http://localhost:3000
(Может быть изменен в каждом компоненте)
Порт фронтенда: автоматически определяется Vite
Откройте DevTools (F12) для: