Sobes.tech
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;
    });
}

Такой подход гарантирует, что либо оба баланса обновятся, либо при ошибке изменения не будут сохранены. Важно использовать транзакции и проверять входные данные.