Откуда они берутся
- Два клиента в одну и ту же секунду. Оба видят «Осталось 1 место», оба подтверждают. Если инструмент проверяет, а потом записывает, не придерживая тем временем второй запрос, проходят оба.
- Телефон и сайт. Вы записываете бронирование в блокнот, а сайт об этом не знает.
- Два календаря. Ваш личный календарь говорит «занято», сайт — «свободно».
- Проживание на несколько ночей, когда проверяется только первая ночь.
Пять правил
- Один-единственный учёт. Все бронирования — онлайн, по телефону, на стойке — проходят через один и тот же инструмент.
- Проверка в момент записи, на сервере. Не в браузере клиента и не за несколько секунд до этого.
- Один запрос за раз на одно и то же место. Когда два приходят одновременно, второй ждёт первого, а затем видит, что ничего не осталось.
- Часы, занятые в другом месте, закрывают продажу. Встреча в вашем личном календаре должна закрывать это время на сайте.
- Закрывайте, видя, что это затрагивает. Прежде чем закрыть день, посмотрите, какие бронирования на него приходятся.
Тест, который не обманет
Откройте одну и ту же дату в двух вкладках или на двух телефонах, когда осталось одно-единственное место. Забронируйте в обеих почти одновременно. Пройти должно только одно бронирование; второе должно получить понятный отказ.