Middle+
/** * Υλοποιήστε τη μεταφορά χρημάτων μεταξύ δύο λογαριασμών. Λάβετε υπόψη ότι αυτή είναι μια λύση παραγωγής * Παράμετροι εισόδου: * @param fromAccountId μοναδικός αναγνωριστικός αριθμός του χρήστη που μεταφέρει χρήματα * @param toAccountId μοναδικός αναγνωριστικός αριθμός του χρήστη στον οποίο μεταφέρονται τα χρήματα * @param amount ποσό μεταφοράς. Θετικό νούμερο */ public void transferMoney(Long fromAccountId, Long toAccountId, BigDecimal amount) { }
sobes.tech AI
Απάντηση από AI
Для реализации безопасного перевода средств между счетами в production нужно учитывать:
- Проверку наличия средств на счете отправителя
- Атомарность операции (транзакция)
- Обработку ошибок
- Логирование и возможное уведомление
Пример реализации на Java с использованием транзакций:
public void transferMoney(Long fromAccountId, Long toAccountId, BigDecimal amount) {
if (amount.compareTo(BigDecimal.ZERO) <= 0) {
throw new IllegalArgumentException("Сумма перевода должна быть положительной");
}
// Начинаем транзакцию
transactionTemplate.execute(status -> {
Account fromAccount = accountRepository.findById(fromAccountId)
.orElseThrow(() -> new IllegalArgumentException("Отправитель не найден"));
Account toAccount = accountRepository.findById(toAccountId)
.orElseThrow(() -> new IllegalArgumentException("Получатель не найден"));
if (fromAccount.getBalance().compareTo(amount) < 0) {
throw new IllegalStateException("Недостаточно средств на счете отправителя");
}
fromAccount.setBalance(fromAccount.getBalance().subtract(amount));
toAccount.setBalance(toAccount.getBalance().add(amount));
accountRepository.save(fromAccount);
accountRepository.save(toAccount);
// Можно добавить логирование операции
return null;
});
}
Такой подход гарантирует, что либо оба баланса обновятся, либо при ошибке изменения не будут сохранены. Важно использовать транзакции и проверять входные данные.