Skip to content

Commit d192a23

Browse files
committed
Merge remote-tracking branch 'refs/remotes/origin/main'
2 parents d2e60a7 + 32ce1d6 commit d192a23

File tree

5 files changed

+103
-7
lines changed

5 files changed

+103
-7
lines changed

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

Lines changed: 31 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
import com.exactpro.blockchain.repository.*;
88
import com.exactpro.iso20022.CustomerCreditTransfer;
99
import com.exactpro.iso20022.XmlCodec;
10+
import com.fasterxml.jackson.core.JsonProcessingException;
1011
import jakarta.xml.bind.JAXBException;
1112
import org.apache.logging.log4j.LogManager;
1213
import org.apache.logging.log4j.Logger;
@@ -36,6 +37,7 @@ public class ClientHandler {
3637
private final ConversionRateRepository conversionRateRepository;
3738
private final CurrencyRepository currencyRepository;
3839
private final TransferRepository transferRepository;
40+
private final MessageRepository messageRepository;
3941
private final XmlCodec xmlCodec;
4042
private final CustomerCreditTransferConverter converter;
4143
private final KafkaPublisher kafkaPublisher;
@@ -47,6 +49,7 @@ public ClientHandler(
4749
CurrencyRepository currencyRepository,
4850
ConversionRateRepository conversionRateRepository,
4951
TransferRepository transferRepository,
52+
MessageRepository messageRepository,
5053
XmlCodec xmlCodec,
5154
CustomerCreditTransferConverter converter,
5255
KafkaPublisher kafkaPublisher,
@@ -56,6 +59,7 @@ public ClientHandler(
5659
this.clientRepository = clientRepository;
5760
this.conversionRateRepository = conversionRateRepository;
5861
this.transferRepository = transferRepository;
62+
this.messageRepository = messageRepository;
5963
this.currencyRepository = currencyRepository;
6064
this.xmlCodec = xmlCodec;
6165
this.converter = converter;
@@ -76,7 +80,7 @@ public Mono<ServerResponse> transfer(ServerRequest request) {
7680
saveTransferRequest(client, transferRequest)
7781
.flatMap(transfer ->
7882
debitAccount(account, transferRequest)
79-
.then(Mono.defer(() -> publishPacs008(transfer)))
83+
.then(Mono.defer(() -> saveMessageAndPublishPacs008(transfer)))
8084
.then(Mono.defer(() -> transferRepository.save(transfer.withStatus(TransferStatus.COMPLETED))))
8185
.then(Mono.defer(() -> {
8286
if (currency.getAddress() == null) {
@@ -181,14 +185,34 @@ Mono<Void> handle(
181185
return transferRepository.save(converter.newTransfer(client, transferRequest));
182186
}
183187

184-
private @NonNull Mono<Void> publishPacs008(@NonNull Transfer transfer) {
188+
private @NonNull Mono<Void> saveMessageAndPublishPacs008(@NonNull Transfer transfer) {
185189
CustomerCreditTransfer customerCreditTransfer = converter.toCustomerCreditTransfer(transfer);
186-
String pacs008XmlString;
190+
191+
String transferJson;
187192
try {
188-
pacs008XmlString = xmlCodec.encode(customerCreditTransfer);
189-
} catch (JAXBException | TransformerException ex) {
190-
return Mono.error(new Exception("Failed to encode transfer to pacs.008 XML", ex));
193+
transferJson = transfer.toJson();
194+
} catch (JsonProcessingException e) {
195+
return Mono.error(new Exception("Failed to convert Transfer to JSON", e));
191196
}
192-
return kafkaPublisher.publishMessage(transfer.getCreditorBic(), pacs008XmlString);
197+
198+
Message message = new Message(
199+
customerCreditTransfer.getGroupHeader().getMessageId(),
200+
transfer.getTransferId(),
201+
transferJson);
202+
203+
return messageRepository.save(message)
204+
.flatMap(savedMessage -> {
205+
logger.info("Message saved with ID: {}", savedMessage.getMessageId());
206+
207+
String pacs008XmlString;
208+
try {
209+
pacs008XmlString = xmlCodec.encode(customerCreditTransfer);
210+
} catch (JAXBException | TransformerException ex) {
211+
return Mono.error(new Exception("Failed to encode transfer to pacs.008 XML", ex));
212+
}
213+
214+
return kafkaPublisher.publishMessage(transfer.getCreditorBic(), pacs008XmlString);
215+
})
216+
.then();
193217
}
194218
}
Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
package com.exactpro.blockchain.entity;
2+
3+
import org.springframework.data.annotation.Id;
4+
import org.springframework.data.relational.core.mapping.Column;
5+
import org.springframework.data.relational.core.mapping.Table;
6+
7+
@Table("Message")
8+
public class Message {
9+
@Id
10+
@Column("messageId")
11+
private String messageId;
12+
13+
@Column("transferId")
14+
private Integer transferId;
15+
16+
private String content;
17+
18+
public Message() {
19+
}
20+
21+
public Message(String messageId, Integer transferId, String content) {
22+
this.messageId = messageId;
23+
this.transferId = transferId;
24+
this.content = content;
25+
}
26+
27+
public String getMessageId() {
28+
return messageId;
29+
}
30+
31+
public void setMessageId(String messageId) {
32+
this.messageId = messageId;
33+
}
34+
35+
public Integer getTransferId() {
36+
return transferId;
37+
}
38+
39+
public void setTransferId(Integer transferId) {
40+
this.transferId = transferId;
41+
}
42+
43+
public String getContent() {
44+
return content;
45+
}
46+
47+
public void setContent(String content) {
48+
this.content = content;
49+
}
50+
}

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

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

3+
import com.fasterxml.jackson.core.JsonProcessingException;
4+
import com.fasterxml.jackson.databind.ObjectMapper;
35
import org.springframework.data.annotation.Id;
46
import org.springframework.data.relational.core.mapping.Column;
57
import org.springframework.data.relational.core.mapping.Table;
@@ -12,6 +14,8 @@
1214

1315
@Table("Transfer")
1416
public class Transfer {
17+
private static final ObjectMapper objectMapper = new ObjectMapper();
18+
1519
@Id
1620
@Column("transferId")
1721
private Integer transferId;
@@ -250,5 +254,9 @@ public Builder transferTimestamp(Instant transferTimestamp) {
250254
return this;
251255
}
252256
}
257+
258+
public String toJson() throws JsonProcessingException {
259+
return objectMapper.writeValueAsString(this);
260+
}
253261
}
254262

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
package com.exactpro.blockchain.repository;
2+
3+
import com.exactpro.blockchain.entity.Message;
4+
import org.springframework.data.repository.reactive.ReactiveCrudRepository;
5+
6+
public interface MessageRepository extends ReactiveCrudRepository<Message, String> {
7+
}

server/src/main/resources/db/migration/V1__Initial_schema.sql

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,3 +54,10 @@ CREATE TABLE BankETHAddress (
5454
bic VARCHAR(255) NOT NULL PRIMARY KEY,
5555
ethAddress VARCHAR(255) NOT NULL UNIQUE
5656
);
57+
58+
CREATE TABLE Message (
59+
messageId VARCHAR(255) PRIMARY KEY,
60+
transferId INTEGER,
61+
content TEXT,
62+
FOREIGN KEY (transferId) REFERENCES Transfer(transferId)
63+
);

0 commit comments

Comments
 (0)