Брони, которые держатся и в 21:00
Софт для площадок ломается вполне определённым образом. В полдень расписание в порядке. В девять на одну комнату приходят две компании, walk-in уже сидит, а касса не сходится с сессиями, которые так и не закрыли.
У таблиц и переписок в WhatsApp нет модели конфликтов — есть только оптимизм. Heselo существует потому, что бронь, живая сессия и оплата — это три состояния одного операционного факта, а не три приложения.
Состояния, которые важны
- Забронировано: ресурс обещан на определённый интервал. Другая бронь не может забрать его молча.
- Идёт: гость на месте. Время идёт. Можно добавлять позиции.
- Закрыто: у сессии есть итог, способ оплаты и смена, к которой она относится.
Если этих состояний нет в модели данных, их придумает интерфейс. Операторы «просто перенесут» так, что завтра систему уже не собрать. История на площадке — не приятный бонус: именно ею объясняют кассу.
Корректность важнее эффектности
Мне важны непарадные вещи: пересекающиеся интервалы, защищённые прошлые дни, кассовая смена, которая не смешивается со следующей, и код подтверждения на действия, которые переписывают деньги. Java и Spring Boot — хорошее место для этой логики: конфликт брони проще проверить в сервисе, чем надеяться, что об этом вспомнит frontend.
Продукт, которым реально пользуются, после рваной ночи всё ещё говорит правду. Это и есть планка.