From 7f710cd0bcb6db778f4558543912e8537cd78757 Mon Sep 17 00:00:00 2001
From: Krzysztof <krzysztof.witukiewicz@mgm-tp.com>
Date: Tue, 18 Mar 2025 16:42:06 +0100
Subject: [PATCH] OZG-7573 OZG-7923 Send GrpcRouteForwardingRequest

---
 .../redirect/ForwardingRemoteService.java     | 35 +++++++++++++++++--
 1 file changed, 33 insertions(+), 2 deletions(-)

diff --git a/vorgang-manager-server/src/main/java/de/ozgcloud/vorgang/vorgang/redirect/ForwardingRemoteService.java b/vorgang-manager-server/src/main/java/de/ozgcloud/vorgang/vorgang/redirect/ForwardingRemoteService.java
index b1b2e73f0..dc4206747 100644
--- a/vorgang-manager-server/src/main/java/de/ozgcloud/vorgang/vorgang/redirect/ForwardingRemoteService.java
+++ b/vorgang-manager-server/src/main/java/de/ozgcloud/vorgang/vorgang/redirect/ForwardingRemoteService.java
@@ -30,22 +30,53 @@ import org.springframework.stereotype.Service;
 
 import de.ozgcloud.common.errorhandling.TechnicalException;
 import de.ozgcloud.eingang.forwarder.RouteForwardingServiceGrpc;
+import de.ozgcloud.eingang.forwarding.GrpcRouteForwardingRequest;
 import de.ozgcloud.eingang.forwarding.GrpcRouteForwardingResponse;
 import de.ozgcloud.vorgang.callcontext.VorgangManagerClientCallContextAttachingInterceptor;
+import de.ozgcloud.vorgang.vorgang.Eingang;
+import de.ozgcloud.vorgang.vorgang.VorgangService;
 import io.grpc.stub.StreamObserver;
 import lombok.RequiredArgsConstructor;
 import net.devh.boot.grpc.client.inject.GrpcClient;
 
 @Service
+@RequiredArgsConstructor
 class ForwardingRemoteService {
 
+	private final VorgangService vorgangService;
+	private final ForwardingRequestMapper forwardingRequestMapper;
 	@GrpcClient("forwarder")
-	private RouteForwardingServiceGrpc.RouteForwardingServiceStub routeForwardingServiceGrpc;
+	private final RouteForwardingServiceGrpc.RouteForwardingServiceStub routeForwardingServiceGrpc;
 
 	public void forward(ForwardingRequest request) {
 		CompletableFuture<Void> responseFuture = new CompletableFuture<>();
+		routeForwarding(request, new ForwardingResponseObserver(responseFuture));
+		waitForCompletion(responseFuture);
+	}
+
+	void routeForwarding(ForwardingRequest request, ForwardingResponseObserver responseObserver) {
 		var requestStreamObserver = routeForwardingServiceGrpc.withInterceptors(new VorgangManagerClientCallContextAttachingInterceptor())
-				.routeForwarding(new ForwardingResponseObserver(responseFuture));
+				.routeForwarding(responseObserver);
+		try {
+			sendEingang(request, requestStreamObserver);
+			requestStreamObserver.onCompleted();
+		} catch (Throwable t) {
+			requestStreamObserver.onError(t);
+		}
+	}
+
+	void sendEingang(ForwardingRequest request, StreamObserver<GrpcRouteForwardingRequest> requestStreamObserver) {
+		var eingang = vorgangService.getById(request.getVorgangId()).getEingangs().getFirst();
+		requestStreamObserver.onNext(buildRouteForwardingRequest(request, eingang));
+
+	}
+
+	GrpcRouteForwardingRequest buildRouteForwardingRequest(ForwardingRequest request, Eingang eingang) {
+		var routeForwarding = forwardingRequestMapper.toGrpcRouteForwarding(request, eingang);
+		return GrpcRouteForwardingRequest.newBuilder().setRouteForwarding(routeForwarding).build();
+	}
+
+	private static void waitForCompletion(CompletableFuture<Void> responseFuture) {
 		try {
 			responseFuture.get();
 		} catch (InterruptedException | ExecutionException e) {
-- 
GitLab