Booking_Service
месяц назад
месяц назад
месяц назад
месяц назад
месяц назад
месяц назад
месяц назад
README.md
Инструкция по запуску — Booking Service
Требования
- Node.js версии 18 или выше
- npm (входит в состав Node.js)
- curl и jq для ручного прогона (опционально, jq — для красивого вывода JSON)
Проверить версию Node.js:
Установка зависимостей
Устанавливаются две группы пакетов:
— фреймворк для HTTP-сервераexpress,jest— инструменты для тестирования (только для разработки)supertest
Запуск сервера
Сервер запустится на порту . В консоли появится:3000
🏫 Booking Service запущен на http://localhost:3000
GET /api/items
GET /api/items/:id
POST /api/items
Чтобы использовать другой порт:
Режим авто-перезагрузки (для разработки, Node.js 18+)
Сервер перезапускается автоматически при изменении файлов — не нужно останавливать и запускать вручную.
Запуск тестов
Флаг включён по умолчанию — каждый тест выводится отдельной строкой с именем группы, описанием, входными данными и результатом (--verbose / ✓).✗
При падении теста Jest автоматически выводит:
- ожидаемое значение (
)Expected - полученное значение (
)Received - номер строки, где произошла ошибка
Пример вывода при успешном прогоне:
PASS tests/unit/validation.test.js
validateBooking — правило 1: room обязателен и непуст
✓ room = отсутствует → ошибка содержит "room"
✓ room = пустая строка → ошибка содержит "room"
✓ room = строка из пробелов → ошибка содержит "room"
✓ room = null → ошибка содержит "room"
PASS tests/integration/items.test.js
POST /api/items
✓ создаёт бронирование и возвращает 201 с данными
✓ созданный элемент доступен через GET по id
✓ возвращает 422 при пустом room
...
Test Suites: 2 passed, 2 total
Tests: 31 passed, 31 total
Ручной прогон сценариев
Убедитесь, что сервер запущен (), затем выполните команды в отдельном терминале.npm start
1. Получить пустой список
Ожидаемый ответ:
2. Создать бронирование
Ожидаемый ответ ():201 Created
3. Создать второе бронирование
4. Получить весь список
5. Получить бронирование по id
6. Несуществующий id → согласованная ошибка с requestId
Ожидаемый ответ ():404 Not Found
7. Некорректные данные → ошибка валидации
Ожидаемый ответ ():422 Unprocessable Entity
8. Фильтрация по аудитории
9. Фильтрация по дате
Структура проекта
booking-service/
├── src/
│ ├── server.js — точка входа, запуск HTTP-сервера
│ ├── app.js — сборка Express-приложения, конвейер middleware
│ ├── router.js — маршруты /api/items
│ ├── store.js — хранилище в памяти (Map + защита от гонок)
│ ├── validation.js — правила валидации предметной области
│ └── middleware/
│ ├── logger.js — requestId + логирование входа/выхода
│ ├── timing.js — измерение времени выполнения
│ └── errorHandler.js — единый формат ошибок
├── tests/
│ ├── unit/
│ │ └── validation.test.js
│ └── integration/
│ └── items.test.js
├── package.json
└── README.md