package com.myoa.engineering.crawl.ppomppu.processor.infrastructure.client; import org.springframework.core.ParameterizedTypeReference; import org.springframework.http.HttpHeaders; import org.springframework.http.MediaType; import org.springframework.stereotype.Component; import org.springframework.web.reactive.function.client.WebClient; import org.springframework.web.reactive.function.client.WebClientRequestException; import com.myoa.engineering.crawl.ppomppu.processor.dto.constant.WebClientPropertiesUnitName; import com.myoa.engineering.crawl.ppomppu.support.dto.BlockMessageDTO; import com.myoa.engineering.crawl.ppomppu.support.dto.SimpleMessageDTO; import com.myoa.engineering.crawl.ppomppu.support.webclient.factory.WebClientFilterFactory; import com.myoa.engineering.crawl.ppomppu.support.webclient.factory.WebFluxExchangeStragiesFactory; import com.myoa.engineering.crawl.ppomppu.support.webclient.properties.WebClientProperties; import com.myoa.engineering.crawl.ppomppu.support.webclient.properties.WebClientProperties.WebClientPropertiesUnit; import lombok.extern.slf4j.Slf4j; import reactor.core.publisher.Mono; import reactor.core.scheduler.Schedulers; /** * PpomppuNotifierSenderAPIClient * * @author Shin Woo-jin (woo-jin.shin@linecorp.com) * @since 2021-11-17 */ @Slf4j @Component public class MessageSenderAPIClient { private final WebClient webClient; public MessageSenderAPIClient(WebClientProperties webClientProperties) { WebClientPropertiesUnit webClientPropertiesUnit = webClientProperties.find(WebClientPropertiesUnitName.PPOMPPU_NOTIFIER_SENDER_API.getUnitName()); this.webClient = WebClient.builder() .baseUrl(webClientPropertiesUnit.getBaseUrl()) .exchangeStrategies(WebFluxExchangeStragiesFactory.ofDefault()) .defaultHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON_VALUE) // .filter(WebClientFilterFactory.logRequest()) // .filter(WebClientFilterFactory.logResponse()) .build(); } public Mono sendSimpleMessageToSlack(SimpleMessageDTO dto) { return webClient.post() .uri("/api/v1/messages/sendSimpleMessage/messengers/slack") .bodyValue(dto) .exchangeToMono(e -> e.bodyToMono(new ParameterizedTypeReference() {})) .publishOn(Schedulers.boundedElastic()) .onErrorResume(WebClientRequestException.class, t -> { log.info("Exception occured, ignoring. : {}", t.getClass().getSimpleName()); return Mono.empty(); }); } public Mono sendBlockMessageToSlack(BlockMessageDTO dto) { return webClient.post() .uri("/api/v1/messages/sendBlockMessage/messengers/slack") .bodyValue(dto) .exchangeToMono(e -> e.bodyToMono(new ParameterizedTypeReference() {})) .publishOn(Schedulers.boundedElastic()) .onErrorResume(WebClientRequestException.class, t -> { log.info("Exception occured, ignoring. : {}", t.getClass().getSimpleName()); return Mono.empty(); }); } }