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.dto.SlackSectionMessageBlock; 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")); } SlackMessageDTO slackMessageDTO = sender.ofBlockMessageBased(); dto.getBlocks().forEach(slackMessageDTO::addBlock); slackMessageDTO.addBlock(SlackBaseMessageBlock.ofDivider()); return sender.sendMessage(slackMessageDTO) .doOnNext(e -> log.info("[sendBlockMessageToSlack] slackMessageDTO: {}", ObjectMapperFactory.writeAsString(slackMessageDTO))) .then(Mono.just(APIResponse.success(dto))); } }