Вы должны быть осторожны в том, сколько блокировок вы делаете, так как вы можете получить транзакции с тайм-аутом в ожидании освобождения блокировок - и недовольные клиенты!
У вас также есть другой сценарий: пользователь 1 и пользователь 2 помещают один и тот же предмет в свои тележки. Пользователь 1 полностью завершает оформление заказа. Пользователь 2 получает телефонный звонок, затем возвращается через 10 минут, чтобы закончить. Ваш процесс должен быть достаточно умным, чтобы повторно проверить товары в корзине до завершения покупки.
Мое предложение состоит в том, чтобы внедрить процесс «мягкой покупки», при котором, как только человек начинает оформлять заказ, товары помечаются как «недоступные» для всех остальных. Если покупка завершается, она конвертируется в «жесткую покупку», а инвентарь уменьшается. Если пользователь не завершил покупку, будет выпущена «мягкая покупка».
Вы можете указать мягкую покупку, используя флаг в таблице базы данных или в таблице транзакций мягкой покупки, в зависимости от того, как хранятся данные инвентаризации.