/
NewAccountBalanceProvider.java
50 lines (38 loc) · 1.8 KB
/
NewAccountBalanceProvider.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
package net.devaction.kafka.transfersrecordingservice.core;
import java.math.BigDecimal;
import net.devaction.entity.AccountBalanceEntity;
import net.devaction.entity.TransferEntity;
/**
* @author Víctor Gil
*
* since August 2019
*/
public class NewAccountBalanceProvider{
public AccountBalanceEntity provide(AccountBalanceEntity currentAB,
TransferEntity transferEntity) {
BalanceAndVersion currentBalanceAndVersion = new BalanceAndVersion(
currentAB.getBalance(), currentAB.getVersion());
return provide(currentAB.getAccountId(), currentAB.getClientId(),
currentBalanceAndVersion, transferEntity.getId(),
transferEntity.getAmount());
}
public AccountBalanceEntity provide(String accountId, String clientId,
BalanceAndVersion currentBalanceAndVersion, String transferId,
BigDecimal transferAmount){
AccountBalanceEntity entity = new AccountBalanceEntity();
entity.setAccountId(accountId);
entity.setClientId(clientId);
BalanceAndVersion newBalanceAndVersion = provideNew(currentBalanceAndVersion, transferAmount);
entity.setBalance(newBalanceAndVersion.getBalance());
entity.setVersion(newBalanceAndVersion.getVersion());
entity.setTransferId(transferId);
return entity;
}
// This method contains the business logic
BalanceAndVersion provideNew(BalanceAndVersion current, BigDecimal transferamount) {
// Note: so far we are assuming that negative balances are OK
BigDecimal newBalance = current.getBalance().add(transferamount);
long newVersion = current.getVersion() + 1;
return new BalanceAndVersion(newBalance, newVersion);
}
}