Собесов

Backend Яндекса — HTTP-сервис бронирований на PostgreSQL

SQLHTTP-сервис и транзакцииСложнаяSenior

Условие

Реализовать HTTP-сервис для управления бронированиями на PostgreSQL. Сервис должен поддерживать одновременные блокирующие запросы (тестовая система отправляет следующий запрос только после ответа на предыдущий).

Схема БД

CREATE TABLE bookings (
    id SERIAL PRIMARY KEY,
    user_id INTEGER NOT NULL,
    place_id INTEGER NOT NULL,
    time_from TIMESTAMP NOT NULL,
    time_to TIMESTAMP NOT NULL
);

API

GET /ping — health-check. Возвращает HTTP 200 с телом {"status":"ok"}.

POST /book — создать бронирование. Query-параметры: place_id, user_id, from, to (RFC 3339).

  • HTTP 200 — успех;
  • HTTP 409 — конфликт: интервал пересекается с существующим для этого места.
  • Полуинтервалы [from1, to1) и [from2, to2) пересекаются, если from1 < to2 и from2 < to1.

GET /booklist — список бронирований. Один из параметров: user_id или place_id. Ответ HTTP 200 с JSON {"bookings": [...]}. Сортировка по (from, id) ASC.

Подключение к БД

Через переменные окружения: DB_HOST (default localhost), DB_PORT (5432), DB_USER (postgres), DB_PASSWORD (postgres), DB_NAME (contest).

Сервис принимает аргумент командной строки --port <port>.

Хочешь увидеть разбор?

Зарегистрируйся бесплатно — откроется развёрнутое решение этой задачи и ещё 4 на выбор.

Зарегистрироваться и увидеть разбор
Уже есть аккаунт? Войти