BeeSection BeeSection

Как это устроено: почему два администратора не посадят двух клиентов на одно время

Проверка «время свободно» и сохранение записи — два разных действия, и между ними успевает пролезть вторая запись. Как блокировка на уровне базы закрывает эту щель для CRM, онлайн-записи и календаря сразу.

BeeSection · · 2 мин чтения
Читать на другом языке: Українська English

Двойная бронь выглядит безобидно: две записи на 14:00 к одной мастерице. Последствия не безобидны: один клиент уйдёт, а мастерица узнает об этом, когда оба стоят на пороге.

Откуда берётся щель

Сохранение записи устроено как «прочитал → записал»: сначала проверяем, свободно ли время, потом сохраняем. Между этими двумя действиями проходят миллисекунды, но два администратора, нажавшие «Сохранить» одновременно, успевают оба пройти проверку. Каждый видел свободное время, и каждый был прав: на момент проверки оно было свободно.

Никакой интерфейс этого не решает. Решает база данных.

Блокировка на мастера

Перед проверкой запись берёт именованную блокировку в базе: «бронирование: компания такая-то, мастер такой-то». Второе сохранение к тому же мастеру ждёт, пока первое отпустит блокировку, и только потом проверяет время. Проверка теперь видит первую запись и отказывает.

Блокировка на мастера

Блокировка держится не дольше 5 секунд. Если за 5 секунд получить её не удалось, сохранение возвращает ошибку «попробуйте ещё раз»: держать запрос дольше ради одного слота нет смысла, а 5 секунд в нормальной работе не случаются никогда.

Один лок на все пути

Записи создаются из четырёх мест: форма в CRM, перетаскивание в календаре, онлайн-запись клиента и внутренние сервисы, например лист ожидания. Блокировка одна и та же для всех. Раньше у онлайн-записи была своя блокировка, а у CRM никакой, и получалось, что клиент на сайте и администратор в CRM всё равно могли занять одно время: защита работала только между двумя клиентами сайта.

Поэтому имя блокировки во всех путях совпадает. Это и есть вся суть: не «более умная проверка», а одна очередь для всех, кто хочет это время у этого мастера.

Что это значит на практике

Два администратора жмут «Сохранить» одновременно: у одного запись создаётся, второй видит «время занято» и выбирает другое. Клиент на сайте и администратор конкурируют так же. Задержки вы не заметите: блокировка живёт десятки миллисекунд.

Если всё же увидели «попробуйте ещё раз», просто повторите: это значит, что база была занята дольше 5 секунд, и лучше повторить, чем получить две записи.

Статья помогла?

Похожие статьи

Как это устроено: почему сайт открывается на украинском, даже если в браузере русский
Как это устроено

Как это устроено: почему сайт открывается на украинском, даже если в браузере русский

Порядок выбора языка на сайте и на страницах записи: выбор человека, потом регион, потом язык браузера. Почему регион стоит выше браузера и как мы его узнаём.

· 2 мин чтения
Как это устроено: адрес страницы записи и почему мы не подсказываем свободные
Как это устроено

Как это устроено: адрес страницы записи и почему мы не подсказываем свободные

Почему адрес страницы записи выбирает человек, а не система, какие слова зарезервированы, почему проверка отвечает только «да» или «нет» и почему адрес нельзя изменить.

· 3 мин чтения

Комментарии

Комментариев пока нет. Задайте вопрос — отвечаем в течение суток.

Оставить комментарий

Почта не публикуется. Она нужна только чтобы вам ответить.