Проблема: При продаже 2+ экземпляров одного витринного комплекта возникала ошибка 'Один из экземпляров уже был продан'. Это происходило потому что объекты ShowcaseItem проверялись по старому состоянию из памяти. Причина: - При вызове sell_showcase_items() передавался список объектов из запроса - Первый ShowcaseItem менял статус на 'sold' через mark_sold() - Второй объект в списке все еще имел старый статус из памяти - Проверка в цикле срабатывала некорректно Решение: - Перезагружаем ВСЕ ShowcaseItem из БД с блокировкой перед обработкой - Используем select_for_update() для получения актуального статуса - Теперь каждый экземпляр проверяется по свежим данным из БД - Защита от race conditions через database-level locking Результат: Теперь можно продавать 2+ экземпляра одного букета без ошибок.
26 KiB
26 KiB