Skip to content

Commit 8d44e62

Browse files
committed
Save DltMessage to Message table in CoincentoWallet
1 parent 9c322c9 commit 8d44e62

File tree

4 files changed

+104
-17
lines changed

4 files changed

+104
-17
lines changed

server/src/main/java/com/exactpro/blockchain/api/client/ClientHandler.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -98,7 +98,7 @@ public Mono<ServerResponse> transfer(ServerRequest request) {
9898
return Mono.empty();
9999
}
100100
return wallet.transfer(
101-
transfer.getCreditorBic(), transfer.getEndToEndId(), currency, transfer.getAmount()
101+
transfer.getTransferId(), transfer.getCreditorBic(), transfer.getEndToEndId(), currency, transfer.getAmount()
102102
);
103103
}))
104104
.onErrorResume(ex ->
@@ -211,7 +211,7 @@ Mono<Void> handle(
211211
try {
212212
pacs008MessageJson = objectMapper.writeValueAsString(pacs008Message);
213213
} catch (JsonProcessingException e) {
214-
return Mono.error(new RuntimeException("Failed to encode Pacs008Message to JSON", e));
214+
return Mono.error(new RuntimeException("Failed to convert Pacs008Message to JSON", e));
215215
}
216216

217217
Message message = new Message("pacs.008", transfer.getTransferId(), pacs008MessageJson);

server/src/main/java/com/exactpro/blockchain/coincento/CoincentoWallet.java

Lines changed: 44 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,10 @@
11
package com.exactpro.blockchain.coincento;
22

3-
import com.exactpro.blockchain.entity.BankETHAddress;
4-
import com.exactpro.blockchain.entity.Currency;
3+
import com.exactpro.blockchain.entity.*;
54
import com.exactpro.blockchain.repository.BankETHAddressRepository;
5+
import com.exactpro.blockchain.repository.MessageRepository;
6+
import com.fasterxml.jackson.core.JsonProcessingException;
7+
import com.fasterxml.jackson.databind.ObjectMapper;
68
import org.apache.logging.log4j.LogManager;
79
import org.apache.logging.log4j.Logger;
810
import org.springframework.beans.factory.annotation.Value;
@@ -39,21 +41,30 @@ public class CoincentoWallet {
3941
private final @NonNull Credentials credentials;
4042

4143
private final BankETHAddressRepository bankETHAddressRepository;
44+
private final ObjectMapper objectMapper;
45+
46+
private final MessageRepository messageRepository;
4247

4348
@Value("${ethereum.coincento}")
4449
private String coincentoAddress;
4550

4651
public CoincentoWallet(@NonNull Web3j web3j,
4752
@NonNull Credentials credentials,
48-
BankETHAddressRepository bankETHAddressRepository) {
53+
BankETHAddressRepository bankETHAddressRepository,
54+
ObjectMapper objectMapper,
55+
MessageRepository messageRepository) {
4956
this.web3j = Objects.requireNonNull(web3j);
5057
this.credentials = Objects.requireNonNull(credentials);
5158
this.bankETHAddressRepository = bankETHAddressRepository;
59+
this.objectMapper = objectMapper;
60+
this.messageRepository = messageRepository;
5261
}
5362

54-
public Mono<Void> transfer(
55-
@NonNull String creditorBic, @NonNull String endToEndId, @NonNull Currency currency, @NonNull BigDecimal amount
56-
) {
63+
public Mono<Void> transfer(@NonNull Integer transferId,
64+
@NonNull String creditorBic,
65+
@NonNull String endToEndId,
66+
@NonNull Currency currency,
67+
@NonNull BigDecimal amount) {
5768
return
5869
Mono.zip(getEthereumAddress(creditorBic), getNonce())
5970
.flatMap(data -> {
@@ -92,7 +103,8 @@ public Mono<Void> transfer(
92103
if (it.hasError()) {
93104
return Mono.error(new Exception(it.getError().getMessage()));
94105
}
95-
return Mono.just(it);
106+
return createAndSaveMessage(transferId, endToEndId, currency, amount, toAddress)
107+
.flatMap(message -> Mono.just(it));
96108
})
97109
.doOnSuccess(it -> logger.info("Sent transfer transaction {}", it.getTransactionHash()))
98110
.then();
@@ -110,4 +122,29 @@ public Mono<Void> transfer(
110122
private @NonNull Mono<String> getEthereumAddress(@NonNull String bic) {
111123
return bankETHAddressRepository.getByBic(bic).map(BankETHAddress::getEthAddress);
112124
}
125+
126+
private @NonNull Mono<Message> createAndSaveMessage(Integer transferId,
127+
String endToEndId,
128+
Currency currency,
129+
BigDecimal amount,
130+
String toAddress) {
131+
DltMessage dltMessage = DltMessage.builder()
132+
.endToEndId(endToEndId)
133+
.currencyId(currency.getAddress())
134+
.amount(amount.multiply(XXX))
135+
.debtorAddress(credentials.getAddress())
136+
.creditorAddress(toAddress)
137+
.build();
138+
139+
String dltJson;
140+
try {
141+
dltJson = objectMapper.writeValueAsString(dltMessage);
142+
} catch (JsonProcessingException e) {
143+
return Mono.error(new RuntimeException("Failed to convert DltMessage to JSON", e));
144+
}
145+
146+
Message message = new Message("erc-1155.safeTransfer", transferId, dltJson);
147+
148+
return messageRepository.save(message);
149+
}
113150
}

server/src/main/java/com/exactpro/blockchain/entity/DltMessage.java

Lines changed: 56 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,6 @@
33
import com.fasterxml.jackson.annotation.JsonProperty;
44

55
import java.math.BigDecimal;
6-
import java.time.Instant;
7-
import java.time.LocalDate;
86

97
public class DltMessage {
108
@JsonProperty("endToEndId")
@@ -21,4 +19,60 @@ public class DltMessage {
2119

2220
@JsonProperty("creditorAddress")
2321
private String creditorAddress;
22+
23+
public DltMessage() {
24+
}
25+
26+
public DltMessage(Builder builder) {
27+
this.endToEndId = builder.endToEndId;
28+
this.currencyId = builder.currencyId;
29+
this.amount = builder.amount;
30+
this.debtorAddress = builder.debtorAddress;
31+
this.creditorAddress = builder.creditorAddress;
32+
}
33+
34+
public static Builder builder() {
35+
return new Builder();
36+
}
37+
38+
public static class Builder {
39+
private String endToEndId;
40+
41+
private String currencyId;
42+
43+
private BigDecimal amount;
44+
45+
private String debtorAddress;
46+
47+
private String creditorAddress;
48+
49+
public Builder endToEndId(String endToEndId) {
50+
this.endToEndId = endToEndId;
51+
return this;
52+
}
53+
54+
public Builder currencyId(String currencyId) {
55+
this.currencyId = currencyId;
56+
return this;
57+
}
58+
59+
public Builder amount(BigDecimal amount) {
60+
this.amount = amount;
61+
return this;
62+
}
63+
64+
public Builder debtorAddress(String debtorAddress) {
65+
this.debtorAddress = debtorAddress;
66+
return this;
67+
}
68+
69+
public Builder creditorAddress(String creditorAddress) {
70+
this.creditorAddress = creditorAddress;
71+
return this;
72+
}
73+
74+
public DltMessage build() {
75+
return new DltMessage(this);
76+
}
77+
}
2478
}

server/src/main/java/com/exactpro/blockchain/kafka/KafkaConsumer.java

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -209,14 +209,10 @@ private Mono<Message> saveSinglePacs008Message(Transfer transfer, Pacs008Message
209209
try {
210210
pacs008MessageJson = objectMapper.writeValueAsString(pacsMessage);
211211
} catch (JsonProcessingException e) {
212-
return Mono.error(new RuntimeException("Failed to encode Pacs008Message to JSON", e));
212+
return Mono.error(new RuntimeException("Failed to convert Pacs008Message to JSON", e));
213213
}
214214

215-
Message messageEntity = new Message(
216-
"pacs.008",
217-
transfer.getTransferId(),
218-
pacs008MessageJson
219-
);
215+
Message messageEntity = new Message("pacs.008", transfer.getTransferId(), pacs008MessageJson);
220216
return messageRepository.save(messageEntity);
221217
});
222218
}

0 commit comments

Comments
 (0)