Я новичок в Spring Boot 2. Я делаю тест для компании, и я решил использовать этот фреймворк, потому что я также изучаю Java в Udemy.
Задача - это небольшое приложение, имитирующее банковскую платформу, где я могу создавать бенефициаров, переводить им денежные средства и просматривать историю транзакций. Я написал код для создания транзакции и автоматического обновления баланса выбранного получателя, а также вставил запись в таблицу историй:
@PostMapping("/")
public Transaction addTransfer(@Valid @RequestBody Transaction transaction) {
if (!transactionRepository.hasBeneficiaryWithId(transaction.getBeneficiaryId())) {
throw new NotFoundException("Beneficiary does not exist");
}
Transaction newTransfer = transactionRepository.save(transaction);
try {
beneficiaryRepository.updateBeneficiaryBalance(newTransfer.getAmount(), newTransfer.getBeneficiaryId());
historyRepository.insertHistory(newTransfer.getId());
} catch (Exception e) {
System.out.println(e.getMessage());
}
return newTransfer;
}
Сначала я написал пользовательский класс исключений, который проверяет, существует ли данный идентификатор получателя, затем после сохранения транзакции он выполняет коды из двух разных репозиториев разных сущностей. Это:
@Modifying
@Query("UPDATE Beneficiary SET balance = ?1 WHERE id = ?2")
public Integer updateBeneficiaryBalance(double balance, int beneficiaryId);
и
@Modifying
@Query(value = "INSERT INTO histories (transfer_id) VALUES (?1)", nativeQuery = true)
public Integer insertHistory(int transferId);
Я бы хотел знать правильный способ написания подобных вещей. Я не знаю, является ли это только самым основным способом или как это должно быть сделано.