diff --git a/pom.xml b/pom.xml index e3c23e000d71e78447d8891df6a01a0f40c3a127..1552a924259024552f972280f95c439b7d865e0c 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 c26429d8a9fb9e1812f92fa4b96ede47c3d0e280..d4a61aa55d41fe35d68039efd70398b638b574e7 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 7faa48b12d86fae1d3e8dd0c6c8463d699e0b169..90c751b1bb1b99e89d42f99b1d38e3944b7cd7f3 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 0000000000000000000000000000000000000000..860a6440b8793f55156d03837ccb499ae1754534 --- /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 0000000000000000000000000000000000000000..73cf9e68d66ed22047e52a11d28c9e34aab5f6e6 --- /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 0000000000000000000000000000000000000000..393327f78a56c53c21da97d235e324aa4738a8f6 --- /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 { + +}