77import com .exactpro .blockchain .repository .*;
88import com .exactpro .iso20022 .CustomerCreditTransfer ;
99import com .exactpro .iso20022 .XmlCodec ;
10+ import com .fasterxml .jackson .core .JsonProcessingException ;
1011import jakarta .xml .bind .JAXBException ;
1112import org .apache .logging .log4j .LogManager ;
1213import 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}
0 commit comments