Псевдокодом реализуйте взимание комиссии в существующем методе `User.transfer`: какие проводки и проверки необходимы?

Сумма перевода и комиссия должны фиксироваться одной транзакцией с идемпотентностью и проверкой средств. Сначала уточните, добавляется комиссия сверху или удерживается из суммы получателя.

Короткий ответ

Что ответить на собеседовании

Сумма перевода и комиссия должны фиксироваться одной транзакцией с идемпотентностью и проверкой средств. Сначала уточните, добавляется комиссия сверху или удерживается из суммы получателя.

Подробный разбор

Ответ с пояснениями

Сумма перевода и комиссия должны фиксироваться одной транзакцией с идемпотентностью и проверкой средств. Сначала уточните, добавляется комиссия сверху или удерживается из суммы получателя.

Для варианта «сверху» псевдокод:

проверить владельца, валюту, сумму > 0
вычислить комиссию по сохранённым правилам округления
начать транзакцию
создать уникальную операцию по idempotency_key
заблокировать затрагиваемые счета в общем порядке
проверить баланс отправителя >= сумма + комиссия
записать движение: отправитель -> получатель, сумма
записать движение: отправитель -> счёт комиссии, комиссия
зафиксировать транзакцию

Проводки должны быть сбалансированы в рамках принятой модели ledger; деньги считают целыми минимальными единицами. Повтор возвращает прежний результат, а отмена создаёт компенсирующие записи. Исходный User.transfer не приведён, поэтому это контракт алгоритма, не точечный патч его кода.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее