BeeSection BeeSection

Як це влаштовано: чому двоє адміністраторів не посадять двох клієнтів на один час

Перевірка «час вільний» і збереження запису — дві різні дії, і між ними встигає пролізти другий запис. Як блокування на рівні бази закриває цю щілину для CRM, онлайн-запису і календаря одразу.

BeeSection · · 2 хв читання
Читати іншою мовою: Русский English

Подвійна броня виглядає безневинно: два записи на 14:00 до однієї майстрині. Наслідки не безневинні: один клієнт піде, а майстриня дізнається про це, коли обидва стоять на порозі.

Звідки береться щілина

Збереження запису влаштоване як «прочитав → записав»: спочатку перевіряємо, чи вільний час, потім зберігаємо. Між цими двома діями минають мілісекунди, але два адміністратори, які натиснули «Зберегти» одночасно, встигають обидва пройти перевірку. Кожен бачив вільний час, і кожен мав рацію: на момент перевірки він був вільний.

Ніякий інтерфейс цього не вирішує. Вирішує база даних.

Блокування на майстра

Перед перевіркою запис бере іменоване блокування в базі: «бронювання: компанія такa-то, майстер такий-то». Друге збереження до того ж майстра чекає, поки перше відпустить блокування, і тільки потім перевіряє час. Перевірка тепер бачить перший запис і відмовляє.

Блокування на майстра

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

Один лок на всі шляхи

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

Тому ім'я блокування у всіх шляхах збігається. Це і є вся суть: не «розумніша перевірка», а одна черга для всіх, хто хоче цей час у цього майстра.

Що це означає на практиці

Два адміністратори тиснуть «Зберегти» одночасно: у одного запис створюється, другий бачить «час зайнято» і обирає інший. Клієнт на сайті і адміністратор конкурують так само. Затримки ви не помітите: блокування живе десятки мілісекунд.

Якщо все ж побачили «спробуйте ще раз», просто повторіть: це означає, що база була зайнята довше 5 секунд, і краще повторити, ніж отримати два записи.

Ця стаття допомогла?

Схожі статті

Як це влаштовано: чому сайт відкривається українською, навіть якщо в браузері російська
Як це влаштовано

Як це влаштовано: чому сайт відкривається українською, навіть якщо в браузері російська

Порядок вибору мови на сайті й на сторінках запису: вибір людини, потім регіон, потім мова браузера. Чому регіон стоїть вище за браузер і як ми його дізнаємось.

· 2 хв читання
Як це влаштовано: адреса сторінки запису і чому ми не підказуємо вільні
Як це влаштовано

Як це влаштовано: адреса сторінки запису і чому ми не підказуємо вільні

Чому адресу сторінки запису обирає людина, а не система, які слова зарезервовані, чому перевірка відповідає тільки «так» або «ні» і чому адресу не можна змінити.

· 3 хв читання

Коментарі

Коментарів поки немає. Поставте запитання — відповідаємо протягом доби.

Залишити коментар

Пошта не публікується. Вона потрібна лише щоб вам відповісти.