51 lines
2.2 KiB
Java
51 lines
2.2 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.SimpleMessageDTO;
|
|
|
|
/**
|
|
* PpomppuArticleTransformer
|
|
* @author Shin Woo-jin (woo-jin.shin@linecorp.com)
|
|
* @since 2021-11-21
|
|
*
|
|
*/
|
|
public final class PpomppuArticleTransformer {
|
|
private PpomppuArticleTransformer() {}
|
|
|
|
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 = entity ->
|
|
SimpleMessageDTO.builder()
|
|
.requestedAt(Instant.now())
|
|
.publishedAt(entity.getRegisteredAt())
|
|
.title(String.format("[%s] %s", entity.getBoardName().getMenuName(), entity.getTitle()))
|
|
.body(entity.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 transform(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 String convertToInlineMessage(PpomppuArticle article) {
|
|
return String.format("[%s] %s\n%s",
|
|
article.getBoardName().getMenuName(), article.getTitle(), article.getArticleUrl());
|
|
}
|
|
}
|