N1 N1Time

Магазин: последнюю вещь больше нельзя продать дважды

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

Было так: прочитать остаток, посчитать, в конце записать разницу. Между чтением и записью помещается второй покупатель — оба видят последнюю вещь, оба оформляют заказ, и одному из них потом звонят с извинениями.

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

Заказ при этом не роняем: продавцу нужнее заказ на то, что есть, чем пустая страница с извинением. А вот когда разобрали всё до последней строки — так и написано: заказ не оформлен, в корзине больше нечего купить.

Заодно: отмена заказа возвращает остаток тому же варианту, повторное нажатие «Оформить» не делает второй заказ, а промокод с пределом расходуется атомарно — два одновременных заказа не применят последний.