package com.myoa.engineering.crawl.ppomppu.sender.controller; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import com.myoa.engineering.crawl.ppomppu.sender.dto.SlackBaseMessageBlock; import com.myoa.engineering.crawl.ppomppu.sender.dto.SlackMessageDTO; import com.myoa.engineering.crawl.ppomppu.sender.infrastructure.client.MongeShoppingBotSlackMessageSender; import com.myoa.engineering.crawl.ppomppu.support.dto.APIResponse; 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.util.ObjectMapperFactory; import lombok.extern.slf4j.Slf4j; import reactor.core.publisher.Mono; /** * MessageSenderAPIController * @author Shin Woo-jin (woo-jin.shin@linecorp.com) * @since 2021-11-21 * */ @Slf4j @RestController @RequestMapping("/api/v1") public class MessageSenderAPIController { private final MongeShoppingBotSlackMessageSender sender; public MessageSenderAPIController(MongeShoppingBotSlackMessageSender sender) { this.sender = sender; } @PostMapping("/messages/sendSimpleMessage/messengers/slack") public Mono> sendSimpleMessageToSlack(@RequestBody SimpleMessageDTO dto) { return sender.sendMessage(sender.ofMessage(dto.getBody())) .then(Mono.just(APIResponse.success(dto))); } @PostMapping("/messages/sendBlockMessage/messengers/slack") public Mono> sendBlockMessageToSlack(@RequestBody BlockMessageDTO dto) { if (dto.getBlocks().isEmpty()) { return Mono.just(APIResponse.fail(dto, "empty blocks")); } return sender.sendMessage(buildSlackMessageDTO(dto)) // .doOnNext(e -> log.info("[sendBlockMessageToSlack] slackMessageDTO: {}", // ObjectMapperFactory.writeAsString(buildSlackMessageDTO(dto)))) .then(Mono.just(APIResponse.success(dto))); } private SlackMessageDTO buildSlackMessageDTO(BlockMessageDTO dto) { SlackMessageDTO slackMessageDTO = sender.ofBlockMessageBased(); slackMessageDTO.addSectionBlock(dto.getTitle()); dto.getBlocks().forEach(slackMessageDTO::addSectionBlock); slackMessageDTO.addBlock(SlackBaseMessageBlock.ofDivider()); return slackMessageDTO; } }