From 58ed4cc7c66468227f0fbb428062955cc9f9fc16 Mon Sep 17 00:00:00 2001
From: OZGCloud <ozgcloud@mgm-tp.com>
Date: Mon, 3 Jul 2023 13:47:54 +0200
Subject: [PATCH] prj-42 add webclient / implement smartdocument sandbox

---
 bescheid-manager/pom.xml                      |  5 ++
 .../dummy/DummyBescheidRemoteService.java     |  2 +
 .../SmartDocumentsBescheidRemoteService.java  | 47 ++++++++++++++++++
 .../SmartDocumentsConfiguration.java          | 21 ++++++++
 .../smartdocuments/SmartDocumentsRequest.java | 49 +++++++++++++++++++
 .../bescheid/BescheidRequestTestFactory.java  |  4 +-
 ...tDocumentsBescheidRemoteServiceITCase.java | 21 ++++++++
 7 files changed, 147 insertions(+), 2 deletions(-)
 create mode 100644 bescheid-manager/src/main/java/de/ozgcloud/bescheid/smartdocuments/SmartDocumentsBescheidRemoteService.java
 create mode 100644 bescheid-manager/src/main/java/de/ozgcloud/bescheid/smartdocuments/SmartDocumentsConfiguration.java
 create mode 100644 bescheid-manager/src/main/java/de/ozgcloud/bescheid/smartdocuments/SmartDocumentsRequest.java
 create mode 100644 bescheid-manager/src/test/java/de/ozgcloud/bescheid/smartdocuments/SmartDocumentsBescheidRemoteServiceITCase.java

diff --git a/bescheid-manager/pom.xml b/bescheid-manager/pom.xml
index 7ec0199f4..59b471729 100644
--- a/bescheid-manager/pom.xml
+++ b/bescheid-manager/pom.xml
@@ -47,6 +47,11 @@
 			<groupId>net.devh</groupId>
 			<artifactId>grpc-client-spring-boot-starter</artifactId>
 		</dependency>
+
+		<dependency>
+			<groupId>org.springframework.boot</groupId>
+			<artifactId>spring-boot-starter-webflux</artifactId>
+		</dependency>
 		<dependency>
 			<groupId>org.springframework.security</groupId>
 			<artifactId>spring-security-core</artifactId>
diff --git a/bescheid-manager/src/main/java/de/ozgcloud/bescheid/dummy/DummyBescheidRemoteService.java b/bescheid-manager/src/main/java/de/ozgcloud/bescheid/dummy/DummyBescheidRemoteService.java
index 47eddc776..0a35a6217 100644
--- a/bescheid-manager/src/main/java/de/ozgcloud/bescheid/dummy/DummyBescheidRemoteService.java
+++ b/bescheid-manager/src/main/java/de/ozgcloud/bescheid/dummy/DummyBescheidRemoteService.java
@@ -1,5 +1,6 @@
 package de.ozgcloud.bescheid.dummy;
 
+import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
 import org.springframework.stereotype.Service;
 
 import com.google.common.net.MediaType;
@@ -11,6 +12,7 @@ import de.ozgcloud.bescheid.BescheidRequest;
 import de.ozgcloud.bescheid.vorgang.Vorgang;
 
 @Service
+@ConditionalOnMissingBean(BescheidRemoteService.class)
 class DummyBescheidRemoteService implements BescheidRemoteService {
 
 	private static final String DUMMY_BESCHEID_FILE_NAME = "dummy-bescheid.pdf";
diff --git a/bescheid-manager/src/main/java/de/ozgcloud/bescheid/smartdocuments/SmartDocumentsBescheidRemoteService.java b/bescheid-manager/src/main/java/de/ozgcloud/bescheid/smartdocuments/SmartDocumentsBescheidRemoteService.java
new file mode 100644
index 000000000..fc385ca62
--- /dev/null
+++ b/bescheid-manager/src/main/java/de/ozgcloud/bescheid/smartdocuments/SmartDocumentsBescheidRemoteService.java
@@ -0,0 +1,47 @@
+package de.ozgcloud.bescheid.smartdocuments;
+
+import java.util.Map;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.MediaType;
+import org.springframework.stereotype.Service;
+import org.springframework.web.reactive.function.client.WebClient;
+
+import com.fasterxml.jackson.databind.ObjectMapper;
+
+import de.ozgcloud.bescheid.Bescheid;
+import de.ozgcloud.bescheid.BescheidRemoteService;
+import de.ozgcloud.bescheid.BescheidRequest;
+import de.ozgcloud.bescheid.vorgang.Vorgang;
+import lombok.SneakyThrows;
+
+@Service
+class SmartDocumentsBescheidRemoteService implements BescheidRemoteService {
+
+	@Autowired
+	private WebClient webClient;
+
+	@Autowired
+	private ObjectMapper objectMapper;
+
+	@SneakyThrows
+	@Override
+	public Bescheid create(BescheidRequest request, Vorgang vorgang) {
+		System.out.println(objectMapper.writeValueAsString(createRequest()));
+
+		var fluxy = webClient.post().accept(MediaType.APPLICATION_JSON)
+				.contentType(MediaType.APPLICATION_JSON)
+				.bodyValue(createRequest())
+				.retrieve()
+				.bodyToFlux(Map.class);
+
+		System.out.println("received: " + fluxy.blockFirst());
+
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+	private SmartDocumentsRequest createRequest() {
+		return SmartDocumentsRequest.builder().build();
+	}
+}
diff --git a/bescheid-manager/src/main/java/de/ozgcloud/bescheid/smartdocuments/SmartDocumentsConfiguration.java b/bescheid-manager/src/main/java/de/ozgcloud/bescheid/smartdocuments/SmartDocumentsConfiguration.java
new file mode 100644
index 000000000..627f2c741
--- /dev/null
+++ b/bescheid-manager/src/main/java/de/ozgcloud/bescheid/smartdocuments/SmartDocumentsConfiguration.java
@@ -0,0 +1,21 @@
+package de.ozgcloud.bescheid.smartdocuments;
+
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.web.reactive.function.client.WebClient;
+
+@Configuration
+class SmartDocumentsConfiguration {
+
+	private static final String ADDR = "https://sandbox.smartdocuments.com/wsxmldeposit/deposit/unattended";
+
+	@Bean
+	WebClient smartDocumentsWebClient() {
+		return WebClient.builder()
+				.baseUrl(ADDR)
+				.defaultHeader("Authorization", "Basic aW50ZWdyYXRpb24tdXNlcjpXSEVtTkpUeTdHNVJ6R3M=")
+//				.filters(ExcahngeFunctions)
+				.build();
+	}
+
+}
diff --git a/bescheid-manager/src/main/java/de/ozgcloud/bescheid/smartdocuments/SmartDocumentsRequest.java b/bescheid-manager/src/main/java/de/ozgcloud/bescheid/smartdocuments/SmartDocumentsRequest.java
new file mode 100644
index 000000000..3b839c3fe
--- /dev/null
+++ b/bescheid-manager/src/main/java/de/ozgcloud/bescheid/smartdocuments/SmartDocumentsRequest.java
@@ -0,0 +1,49 @@
+package de.ozgcloud.bescheid.smartdocuments;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.databind.PropertyNamingStrategies;
+import com.fasterxml.jackson.databind.annotation.JsonNaming;
+
+import lombok.Builder;
+import lombok.Getter;
+
+@Builder
+@Getter
+@JsonNaming(PropertyNamingStrategies.UpperCamelCaseStrategy.class)
+class SmartDocumentsRequest {
+
+	@Builder.Default
+	private CustomerData customerData = CustomerData.builder().build();
+	@Builder.Default
+	private SmartDocument smartDocument = SmartDocument.builder().build();
+
+	@Builder
+	@Getter
+	static class CustomerData {
+		@Builder.Default
+		private String gender = "Male";
+		@Builder.Default
+		private String lastname = "Smith";
+	}
+
+	@Builder
+	@Getter
+	@JsonNaming(PropertyNamingStrategies.UpperCamelCaseStrategy.class)
+	static class SmartDocument {
+
+		@Builder.Default
+		@JsonProperty("Selection")
+		private Selection selection = Selection.builder().build();
+
+		@Builder
+		@Getter
+		@JsonNaming(PropertyNamingStrategies.UpperCamelCaseStrategy.class)
+		static class Selection {
+			@Builder.Default
+			private String templateGroup = "Development";
+			@Builder.Default
+			private String template = "integration-test";
+		}
+	}
+
+}
diff --git a/bescheid-manager/src/test/java/de/ozgcloud/bescheid/BescheidRequestTestFactory.java b/bescheid-manager/src/test/java/de/ozgcloud/bescheid/BescheidRequestTestFactory.java
index 3f5907b1c..ac54a3dbb 100644
--- a/bescheid-manager/src/test/java/de/ozgcloud/bescheid/BescheidRequestTestFactory.java
+++ b/bescheid-manager/src/test/java/de/ozgcloud/bescheid/BescheidRequestTestFactory.java
@@ -13,11 +13,11 @@ public class BescheidRequestTestFactory {
 	static final LocalDate BESCHEID_VOM = LocalDate.parse(BESCHEID_VOM_STRING);
 	static final boolean GENEHMIGT = true;
 
-	static BescheidRequest create() {
+	public static BescheidRequest create() {
 		return createBuilder().build();
 	}
 
-	static BescheidRequest.BescheidRequestBuilder createBuilder() {
+	public static BescheidRequest.BescheidRequestBuilder createBuilder() {
 		return BescheidRequest.builder()
 				.vorgangId(VORGANG_ID)
 				.bescheidVom(BESCHEID_VOM)
diff --git a/bescheid-manager/src/test/java/de/ozgcloud/bescheid/smartdocuments/SmartDocumentsBescheidRemoteServiceITCase.java b/bescheid-manager/src/test/java/de/ozgcloud/bescheid/smartdocuments/SmartDocumentsBescheidRemoteServiceITCase.java
new file mode 100644
index 000000000..d7fdea2c6
--- /dev/null
+++ b/bescheid-manager/src/test/java/de/ozgcloud/bescheid/smartdocuments/SmartDocumentsBescheidRemoteServiceITCase.java
@@ -0,0 +1,21 @@
+package de.ozgcloud.bescheid.smartdocuments;
+
+import org.junit.jupiter.api.Test;
+import org.springframework.beans.factory.annotation.Autowired;
+
+import de.itvsh.kop.common.test.ITCase;
+import de.ozgcloud.bescheid.BescheidRequestTestFactory;
+import de.ozgcloud.bescheid.vorgang.VorgangTestFactory;
+
+@ITCase
+class SmartDocumentsBescheidRemoteServiceITCase {
+
+	@Autowired
+	private SmartDocumentsBescheidRemoteService remoteService;
+
+	@Test
+	void test() {
+		remoteService.create(BescheidRequestTestFactory.create(), VorgangTestFactory.create());
+	}
+
+}
-- 
GitLab