Было так: прочитать остаток, посчитать, в конце записать разницу. Между чтением и записью помещается второй покупатель — оба видят последнюю вещь, оба оформляют заказ, и одному из них потом звонят с извинениями.
Стало так: строка остатка уменьшается одним условным запросом, и ответ честный — сколько досталось, столько и продаём. Ноль значит «кончилось, пока человек заполнял форму», меньше просимого — «досталась часть», и покупателю об этом скажут.
Заказ при этом не роняем: продавцу нужнее заказ на то, что есть, чем пустая страница с извинением. А вот когда разобрали всё до последней строки — так и написано: заказ не оформлен, в корзине больше нечего купить.
Заодно: отмена заказа возвращает остаток тому же варианту, повторное нажатие «Оформить» не делает второй заказ, а промокод с пределом расходуется атомарно — два одновременных заказа не применят последний.
Пока никто не высказался. Будьте первым.