Проблема: - При смене статуса заказа ОТМЕНЁН → ВЫПОЛНЕН - Sale создавался и товар списывался корректно ✓ - НО резервы оставались в статусе 'released' вместо 'converted_to_sale' - Это приводило к некорректной истории и возможным проблемам при откате Причина: - Сигнал искал только резервы в статусе 'reserved' - После отмены резервы были в статусе 'released' - При повторном выполнении они не обновлялись Решение: - Изменён фильтр резервов: берём ВСЕ кроме 'converted_to_sale' - Теперь обрабатываются резервы в любом статусе (reserved, released, и др.) - Элегантное решение без хардкода конкретных статусов Дополнительно: - Добавлен @transaction.atomic к сигналам обновления Stock - Защита от race conditions при одновременном изменении резервов - Минимальные издержки, максимальная надёжность Результат: - Корректная работа при ЛЮБЫХ переходах статусов: * reserved → converted_to_sale ✓ * released → converted_to_sale ✓ * повторный вызов → пропуск ✓ - Целостность данных гарантирована транзакциями - Элегантный код без костылей
43 KiB
43 KiB