Middle+
57
/** * Реализујте пренос средстава између два рачуна. Имајте у виду да је ово решење за производњу * Улазни параметри: * @param fromAccountId јединствени идентификатор корисника који преноси средства * @param toAccountId јединствени идентификатор корисника коме се преносе средства * @param amount износ преноса. Позитиван број */ public void transferMoney(Long fromAccountId, Long toAccountId, BigDecimal amount) { }
Компаније где су питане
Одговор од АИ
sobes.tech АИ
Для реализации безопасного перевода средств между счетами в 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;
});
}
Такой подход гарантирует, что либо оба баланса обновятся, либо при ошибке изменения не будут сохранены. Важно использовать транзакции и проверять входные данные.