Booking_Service

0
README.md

Инструкция по запуску — Booking Service

Требования

  • Node.js версии 18 или выше
  • npm (входит в состав Node.js)
  • curl и jq для ручного прогона (опционально, jq — для красивого вывода JSON)

Проверить версию Node.js:


Установка зависимостей

Устанавливаются две группы пакетов:

  • express
    — фреймворк для HTTP-сервера
  • 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