From 45f50f75fc42c508fd30b18df922b27959dd0ed0 Mon Sep 17 00:00:00 2001 From: Jan Zickermann <jan.zickermann@dataport.de> Date: Mon, 25 Nov 2024 17:58:42 +0100 Subject: [PATCH] #4 OZG-7112 Use generated api-client --- pom.xml | 2 ++ .../osiv2/OsiPostfachRemoteService.java | 20 ++++++------- .../osiv2/config/WebClientConfiguration.java | 10 +++++-- .../transfer/PostfachApiFacadeService.java | 19 +++++++++++++ .../osiv2/transfer/RequestMapper.java | 28 +++++++++++++++++++ .../osiv2/transfer/ResponseMapper.java | 9 ++++++ 6 files changed, 76 insertions(+), 12 deletions(-) create mode 100644 src/main/java/de/ozgcloud/nachrichten/postfach/osiv2/transfer/PostfachApiFacadeService.java create mode 100644 src/main/java/de/ozgcloud/nachrichten/postfach/osiv2/transfer/RequestMapper.java create mode 100644 src/main/java/de/ozgcloud/nachrichten/postfach/osiv2/transfer/ResponseMapper.java diff --git a/pom.xml b/pom.xml index e3c23e0..1552a92 100644 --- a/pom.xml +++ b/pom.xml @@ -156,6 +156,8 @@ <serializationLibrary>jackson</serializationLibrary> <library>webclient</library> <annotationLibrary>swagger2</annotationLibrary> + <apiPackage>de.ozgcloud.nachrichten.postfach.osiv2.gen.api</apiPackage> + <modelPackage>de.ozgcloud.nachrichten.postfach.osiv2.gen.model</modelPackage> </configOptions> </configuration> </execution> diff --git a/src/main/java/de/ozgcloud/nachrichten/postfach/osiv2/OsiPostfachRemoteService.java b/src/main/java/de/ozgcloud/nachrichten/postfach/osiv2/OsiPostfachRemoteService.java index c26429d..d4a61aa 100644 --- a/src/main/java/de/ozgcloud/nachrichten/postfach/osiv2/OsiPostfachRemoteService.java +++ b/src/main/java/de/ozgcloud/nachrichten/postfach/osiv2/OsiPostfachRemoteService.java @@ -2,32 +2,32 @@ package de.ozgcloud.nachrichten.postfach.osiv2; import java.util.stream.Stream; -import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.stereotype.Service; -import org.springframework.web.reactive.function.client.WebClient; import de.ozgcloud.nachrichten.postfach.PostfachNachricht; import de.ozgcloud.nachrichten.postfach.PostfachRemoteService; +import de.ozgcloud.nachrichten.postfach.osiv2.transfer.PostfachApiFacadeService; +import de.ozgcloud.nachrichten.postfach.osiv2.transfer.RequestMapper; +import de.ozgcloud.nachrichten.postfach.osiv2.transfer.ResponseMapper; import lombok.extern.log4j.Log4j2; @Service @ConditionalOnProperty("ozgcloud.osiv2-postfach.enabled") @Log4j2 public record OsiPostfachRemoteService( - @Qualifier("osi2PostfachWebClient") WebClient webClient + PostfachApiFacadeService postfachApiFacadeService, + RequestMapper requestMapper, + ResponseMapper responseMapper ) implements PostfachRemoteService { public static final String POSTFACH_TYPE_OSIV2 = "OSIV2"; @Override public void sendMessage(PostfachNachricht nachricht) { - webClient.get() - .uri("/_metrics") - .retrieve() - .bodyToMono(String.class) - .doOnNext(metricsString -> LOG.info("Metrics: {}", metricsString)) - .block(); - // TODO + postfachApiFacadeService.sendMessage( + requestMapper.toMailboxId(nachricht), + requestMapper.mapOutSendMessageRequestV2(nachricht) + ); } @Override diff --git a/src/main/java/de/ozgcloud/nachrichten/postfach/osiv2/config/WebClientConfiguration.java b/src/main/java/de/ozgcloud/nachrichten/postfach/osiv2/config/WebClientConfiguration.java index 7faa48b..90c751b 100644 --- a/src/main/java/de/ozgcloud/nachrichten/postfach/osiv2/config/WebClientConfiguration.java +++ b/src/main/java/de/ozgcloud/nachrichten/postfach/osiv2/config/WebClientConfiguration.java @@ -15,6 +15,7 @@ import org.springframework.util.LinkedMultiValueMap; import org.springframework.util.MultiValueMap; import org.springframework.web.reactive.function.client.WebClient; +import de.ozgcloud.nachrichten.postfach.osiv2.gen.ApiClient; import lombok.RequiredArgsConstructor; import reactor.netty.http.client.HttpClient; import reactor.netty.transport.ProxyProvider; @@ -27,8 +28,13 @@ public class WebClientConfiguration { private final OsiPostfachProperties.ApiConfiguration apiConfiguration; private final OsiPostfachProperties.ProxyConfiguration proxyConfiguration; - @Bean("osi2PostfachWebClient") - public WebClient osi2PostfachWebClient( + + @Bean + public ApiClient apiClient(ReactiveClientRegistrationRepository clientRegistrations) { + return new ApiClient(osi2PostfachWebClient(clientRegistrations)); + } + + private WebClient osi2PostfachWebClient( ReactiveClientRegistrationRepository clientRegistrations) { return WebClient.builder() .baseUrl(apiConfiguration.getUrl()) diff --git a/src/main/java/de/ozgcloud/nachrichten/postfach/osiv2/transfer/PostfachApiFacadeService.java b/src/main/java/de/ozgcloud/nachrichten/postfach/osiv2/transfer/PostfachApiFacadeService.java new file mode 100644 index 0000000..860a644 --- /dev/null +++ b/src/main/java/de/ozgcloud/nachrichten/postfach/osiv2/transfer/PostfachApiFacadeService.java @@ -0,0 +1,19 @@ +package de.ozgcloud.nachrichten.postfach.osiv2.transfer; + +import org.springframework.stereotype.Service; + +import de.ozgcloud.nachrichten.postfach.osiv2.gen.api.MessageExchangeApi; +import de.ozgcloud.nachrichten.postfach.osiv2.gen.model.OutSendMessageRequestV2; + +@Service +public record PostfachApiFacadeService( + MessageExchangeApi messageExchangeApi +) { + public void sendMessage(String mailboxId, OutSendMessageRequestV2 sendMessageRequest) { + messageExchangeApi.messageExchangeV1SendMailboxIdPost( + mailboxId, + sendMessageRequest + ).block(); + // TODO handle exceptions? + } +} diff --git a/src/main/java/de/ozgcloud/nachrichten/postfach/osiv2/transfer/RequestMapper.java b/src/main/java/de/ozgcloud/nachrichten/postfach/osiv2/transfer/RequestMapper.java new file mode 100644 index 0000000..73cf9e6 --- /dev/null +++ b/src/main/java/de/ozgcloud/nachrichten/postfach/osiv2/transfer/RequestMapper.java @@ -0,0 +1,28 @@ +package de.ozgcloud.nachrichten.postfach.osiv2.transfer; + +import org.mapstruct.Mapper; +import org.mapstruct.Mapping; +import org.mapstruct.ReportingPolicy; + +import de.ozgcloud.nachrichten.postfach.PostfachNachricht; +import de.ozgcloud.nachrichten.postfach.osiv2.gen.model.OutSendMessageRequestV2; + +@Mapper(unmappedTargetPolicy = ReportingPolicy.WARN) +public interface RequestMapper { + + @Mapping(target = "sequencenumber", ignore = true) + @Mapping(target = "body", source = "mailBody") + @Mapping(target = "displayName", ignore = true) + @Mapping(target = "originSender", ignore = true) + @Mapping(target = "replyAction", ignore = true) + @Mapping(target = "eidasLevel", ignore = true) + @Mapping(target = "isObligatory", ignore = true) + @Mapping(target = "isHtml", ignore = true) + @Mapping(target = "files", ignore = true) + @Mapping(target = "references", ignore = true) + OutSendMessageRequestV2 mapOutSendMessageRequestV2(PostfachNachricht nachricht); + + default String toMailboxId(PostfachNachricht nachricht) { + return nachricht.getPostfachAddress().getIdentifier().toString(); + } +} diff --git a/src/main/java/de/ozgcloud/nachrichten/postfach/osiv2/transfer/ResponseMapper.java b/src/main/java/de/ozgcloud/nachrichten/postfach/osiv2/transfer/ResponseMapper.java new file mode 100644 index 0000000..393327f --- /dev/null +++ b/src/main/java/de/ozgcloud/nachrichten/postfach/osiv2/transfer/ResponseMapper.java @@ -0,0 +1,9 @@ +package de.ozgcloud.nachrichten.postfach.osiv2.transfer; + +import org.mapstruct.Mapper; +import org.mapstruct.ReportingPolicy; + +@Mapper(unmappedTargetPolicy = ReportingPolicy.ERROR) +public class ResponseMapper { + +} -- GitLab