Проблема: Валидация showcase_items выполнялась в двух местах: 1. В pos/views.py - проверка status='in_cart' БЕЗ блокировки БД 2. В showcase_manager.py - перезагрузка с select_for_update() и повторная проверка Это создавало: - Дублирование кода и логики - Возможность race condition между двумя запросами - Избыточные обращения к БД - Мертвый код (неработающие logger.info) Решение (best practices): 1. Views только загружают объекты по ID без фильтров по статусу 2. ВСЯ валидация и бизнес-логика в одном месте - ShowcaseManager.sell_showcase_items 3. select_for_update() гарантирует актуальность данных и блокировку на уровне БД 4. Удален мертвый код (logger.info которые не выполнялись) 5. Убрано избыточное логирование ошибок валидации Результат: - Единое место ответственности (Single Responsibility) - Нет дублирования - Атомарная транзакция с блокировкой - Чистый, понятный код без костылей
65 KiB
65 KiB