4984f20e8f
- SELECT FOR UPDATE блокировка во всех 9 провайдерах (кроме YooKassa — свой паттерн) - create_transaction(commit=False) + единый db.commit() для атомарности - emit_transaction_side_effects() для отложенных событий после коммита - Все link_*_payment_to_transaction используют db.flush() вместо db.commit() - Freekassa/KassaAI: прямое присвоение transaction_id + flush вместо update_status - MulenPay: прямая мутация balance_kopeks вместо add_user_balance - Platega: блокировка перед чтением metadata, инлайн обновления полей - CloudPayments: int(round(amount * 100)) для корректного округления - Heleket добавлен в SUPPORTED_AUTO_CHECK_METHODS - Удалены PII из логов yookassa webhook (заголовки, IP) - UniqueConstraint(external_id, payment_method) на транзакциях + миграция 0017 - Cabinet: PaymentService(bot=bot) внутри try блока - verify_payment_amount утилита для проверки суммы webhook