Как изменить модель данных, чтобы однозначно объединить четыре проводки одного перевода и затем одним действием выполнить возврат средств пользователю?

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

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

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

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

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

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

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

Для одной БД создавайте компенсирующие проводки атомарно и ограничьте повторный полный возврат уникальным ключом. Сохраняйте валюту, стороны, типы проводок и статус; суммы компенсации должны соответствовать исходным. Если участвует внешний платёжный провайдер, «одно действие» интерфейса запускает процесс со сверкой, а не делает распределённый refund мгновенно атомарным.

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

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

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

Подробнее