Вступить в клуб →
лёгкаявопросPostgreSQL, ORM и оптимизация запросов

Перевод между счетами: деньги списали, но не зачислили

Код перевода между счетами выглядит так (управление транзакциями не настроено, каждая операция сохраняется отдельно):

account_from.balance -= amount
account_from.save()

send_notification(account_from.user_id, amount)  # здесь вылетело исключение

account_to.balance += amount
account_to.save()

После инцидента у части клиентов деньги списаны, но не зачислены. Что нужно изменить?

  • Оба изменения и так попадают в общую транзакцию, данные целы — проблема в отчётности
  • Достаточно обернуть вызов уведомления в try/except и продолжить выполнение дальше
  • Поменять порядок: сначала зачислять получателю, потом списывать у отправителя
  • Оба изменения счетов — одна транзакция, а уведомление отправлять после её коммита

🔒 Проверка ответа — для участников клуба

  • Проверка ответа
  • Подсказка, если застряли
  • Разбор с объяснением, почему так
  • Прогресс по всем задачам и виртуальные собеседования
Зарегистрироваться →

Регистрация занимает минуту

Другие задачи раздела