Есть сайт мероприятия. Планирую организовать возможность пользователям выбирать место в ряде и заказывать билет, после чего происходит запись в АmoCRM о покупке и так далее. Алгоритм работы надумал следующий:
Все билеты будут находиться в базе. Для каждого билета будет статус: куплен. Те билеты, что куплены, мы выводим активными checkbox, те что нет - неактивными. Сформировали блок с выбором билетов.- Человек выбирает билеты, которые ему нужны, просто жмет на квадраты.
- На сервер отправляется AJAX-запрос. Проверяем, куплены ли билеты, которые пользователь пытается заказать, если да - выводим сообщение об ошибке. Это я делаю для того, чтоб не возникало проблемы, если человеку выдалась страница с одними билетами и пока он пролистывал, если кто-то купил за это время билеты - он узнал об этом.
- Если билеты не куплены, отправляем все данные по заказу в AMOcrm.
- Все заявки появляются в статусе: Новая заявка.
- При каждом обращении пользователя(когда заявка отправляется) будет выполняться скрипт, который будет выбирать все УСПЕШНЫЕ заявки из AMOcrm, вытаскивать данные и на основе этих данных уже помечать наши билеты в базе как купленные
Теперь возвращаюсь к сути вопроса, их несколько даже:
1. Как на 100% закрыть проблему, когда одновременно два человека отправят запрос на сервер с покупкой ОДНИХ и ТЕХ ЖЕ билетов. Что делать в этом случае?
2. Возможно ли как-то оптимизировать обновление купленных билетов в базе? Получается что каждый раз, когда будет происходить заявка сначала из AMOcrm будут обновляться билеты в базе (исходя из заявок), затем будет проверяться не пытается ли купить человек билет, которого уже нет, после чего будет отправляться заявка в crm-систему и на почту.