Add HMS HPK WebClient

This commit is contained in:
Korna 2022-11-07 18:06:39 +03:00
parent c0f8355d69
commit 185cb03568
1 changed files with 66 additions and 0 deletions

View File

@ -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 <a href="https://developer.huawei.com/consumer/en/doc/development/HMSCore-References/https-send-api-0000001050986197">Documentation</a>
*/
@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")
}
}