68 lines
3.0 KiB
Java
68 lines
3.0 KiB
Java
package com.myoa.engineering.crawl.ppomppu.processor.dto;
|
|
|
|
import java.time.Instant;
|
|
import java.time.ZoneId;
|
|
import java.time.format.DateTimeFormatter;
|
|
import java.util.List;
|
|
import java.util.function.Function;
|
|
import java.util.stream.Collectors;
|
|
|
|
import com.myoa.engineering.crawl.ppomppu.processor.domain.PpomppuArticle;
|
|
import com.myoa.engineering.crawl.ppomppu.support.dto.BlockMessageDTO;
|
|
import com.myoa.engineering.crawl.ppomppu.support.dto.SimpleMessageDTO;
|
|
|
|
/**
|
|
* PpomppuArticleTransformer
|
|
* @author Shin Woo-jin (woo-jin.shin@linecorp.com)
|
|
* @since 2021-11-21
|
|
*
|
|
*/
|
|
public final class PpomppuArticleTransformer {
|
|
|
|
private PpomppuArticleTransformer() {}
|
|
|
|
private static final String MESSAGE_FORMAT_V1 = "%s)) <%s|LINK> `%s` ";
|
|
|
|
private static final DateTimeFormatter DATE_TIME_FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")
|
|
.withZone(ZoneId.of("Asia/Seoul"));
|
|
|
|
public static final Function<PpomppuArticle, SimpleMessageDTO> TRANSFORM_TO_MESSAGE_DTO = article ->
|
|
SimpleMessageDTO.builder()
|
|
.requestedAt(Instant.now())
|
|
.publishedAt(article.getRegisteredAt())
|
|
.title(String.format(MESSAGE_FORMAT_V1,
|
|
article.getBoardName().getMenuName(), article.getArticleUrl(), article.getTitle()))
|
|
.body(article.getArticleUrl())
|
|
.build();
|
|
|
|
// https://stackoverflow.com/questions/24882927/using-streams-to-convert-a-list-of-objects-into-a-string-obtained-from-the-tostr
|
|
public static SimpleMessageDTO transformToSimpleMessage(List<PpomppuArticle> articles) {
|
|
Instant requestedAt = Instant.now();
|
|
String body = articles.stream()
|
|
.map(PpomppuArticleTransformer::convertToInlineMessage)
|
|
.collect(Collectors.joining("\n\n"));
|
|
return SimpleMessageDTO.builder()
|
|
.requestedAt(requestedAt)
|
|
.title(DATE_TIME_FORMATTER.format(requestedAt))
|
|
.body(body)
|
|
.build();
|
|
}
|
|
|
|
public static BlockMessageDTO transformToBlockMessage(List<PpomppuArticle> articles) {
|
|
Instant requestedAt = Instant.now();
|
|
List<String> body = articles.stream()
|
|
.map(PpomppuArticleTransformer::convertToInlineMessage)
|
|
.collect(Collectors.toList());
|
|
return BlockMessageDTO.builder()
|
|
.requestedAt(requestedAt)
|
|
.title(DATE_TIME_FORMATTER.format(requestedAt))
|
|
.blocks(body)
|
|
.build();
|
|
}
|
|
|
|
public static String convertToInlineMessage(PpomppuArticle article) {
|
|
return String.format(MESSAGE_FORMAT_V1,
|
|
article.getBoardName().getMenuName(), article.getArticleUrl(), article.getTitle());
|
|
}
|
|
}
|