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