From 185cb03568f65767847173ae43eed109289cbbab Mon Sep 17 00:00:00 2001 From: Korna <17145209+Korna@users.noreply.github.com> Date: Mon, 7 Nov 2022 18:06:39 +0300 Subject: [PATCH] Add HMS HPK WebClient --- .../hpk/clients/hms_hpk/HmsHpkWebClient.kt | 66 +++++++++++++++++++ 1 file changed, 66 insertions(+) create mode 100644 push-message-provider-hpk/src/main/kotlin/ru/touchin/push/message/provider/hpk/clients/hms_hpk/HmsHpkWebClient.kt diff --git a/push-message-provider-hpk/src/main/kotlin/ru/touchin/push/message/provider/hpk/clients/hms_hpk/HmsHpkWebClient.kt b/push-message-provider-hpk/src/main/kotlin/ru/touchin/push/message/provider/hpk/clients/hms_hpk/HmsHpkWebClient.kt new file mode 100644 index 0000000..3bc7de7 --- /dev/null +++ b/push-message-provider-hpk/src/main/kotlin/ru/touchin/push/message/provider/hpk/clients/hms_hpk/HmsHpkWebClient.kt @@ -0,0 +1,66 @@ +package ru.touchin.push.message.provider.hpk.clients.hms_hpk + +import com.fasterxml.jackson.databind.ObjectMapper +import org.springframework.beans.factory.annotation.Qualifier +import org.springframework.http.HttpMethod +import org.springframework.http.MediaType +import org.springframework.stereotype.Component +import org.springframework.web.reactive.function.BodyInserters +import org.springframework.web.reactive.function.client.WebClient +import ru.touchin.common.spring.web.webclient.dto.RequestLogData +import ru.touchin.common.spring.web.webclient.logger.WebClientLogger +import ru.touchin.push.message.provider.hpk.base.clients.ConfigurableWebClient +import ru.touchin.push.message.provider.hpk.clients.hms_hpk.bodies.HmsHpkMessagesSendBody +import ru.touchin.push.message.provider.hpk.clients.hms_hpk.requests.HmsHpkMessagesSendRequest +import ru.touchin.push.message.provider.hpk.clients.hms_hpk.responses.HmsHpkResponse +import ru.touchin.push.message.provider.hpk.properties.HpkProperties + +private const val METHOD_MESSAGES_SEND = "messages:send" + +/** + * Client for Huawei Push Kit. + * @see Documentation + */ +@Component +class HmsHpkWebClient( + webClientLogger: WebClientLogger, + webClientBuilder: WebClient.Builder, + private val hpkProperties: HpkProperties, + @Qualifier("push-message-provider.hpk.webclient-objectmapper") + private val objectMapper: ObjectMapper, +) : ConfigurableWebClient(webClientLogger, webClientBuilder, hpkProperties.webServices.hpk) { + + override fun getObjectMapper(): ObjectMapper = objectMapper + + override fun getWebClient(): WebClient { + return getWebClientBuilder( + url = webService.url.toString(), + ) + .setTimeouts() + .build() + } + + internal fun messagesSend(hmsHpkMessagesSendRequest: HmsHpkMessagesSendRequest): HmsHpkResponse { + val url = "${hpkProperties.webServices.clientId}/$METHOD_MESSAGES_SEND" + + return getWebClient().post() + .uri { builder -> + builder + .path(url) + .build() + } + .contentType(MediaType.APPLICATION_JSON) + .headers { it.setBearerAuth(hmsHpkMessagesSendRequest.accessToken) } + .body(BodyInserters.fromValue(hmsHpkMessagesSendRequest.hmsHpkMessagesSendBody)) + .exchange( + clazz = HmsHpkResponse::class.java, + requestLogData = RequestLogData( + uri = url, + logTags = listOf(), + method = HttpMethod.POST, + ) + ) + .block() ?: throw IllegalStateException("No response") + } + +}