Бутик-отель «Тихий Бор»
Сайт бутик-отеля с настоящим движком бронирования: живой календарь занятости, серверные цены по сезонам и ноль двойных броней по схеме БД.
Обзор
«Тихий Бор» — усадьба лесопромышленника XIX века среди сосен: 12 комнат с именами вместо номеров. Сайт здесь не картинка, а рабочая система — сайт отеля и движок бронирования в одном: комнаты и занятость из базы, календарь свободных дат, расчёт по сезонам, удержание номера, кабинет гостя и админка с шахматкой, всё в браузере без установки.
Задача
Главная сложность — корректность дат и денег: двойная бронь должна быть невозможна, а цены нельзя подделать на клиенте. Брони должны стыковаться без зазора, удержания — корректно истекать, а одновременные попытки на одни даты не должны приводить к переброням.
Решение
Каждая ночь хранится отдельной строкой с первичным ключом (комната, ночь), поэтому двойная бронь невозможна на уровне схемы, а не за счёт проверки в коде — бронь и все её ночи пишутся одной атомарной транзакцией на single-writer SQLite в режиме WAL. Сервер считает стоимость ночь за ночью по сезонам и надбавкам за Пт/Сб в целых копейках; сумма клиента — лишь проверка свежести (409 PRICE_CHANGED). Pending-удержание держит даты 20 минут, встроенный планировщик освобождает просроченные ночи, плюс полуинтервальные даты, идемпотентное создание брони, кабинет гостя с бесплатной отменой за 3 дня и админка-шахматка со статусами и статистикой. Стек: Node.js, Fastify, vanilla JS, GSAP, без сборщика.
Результаты
Связаться