Skip to content

Commit 78de13f

Browse files
committed
#67 ✨ feat: 기사 상세 조회 시 날짜 포멧 통일 및 썸네일과 원문 링크 응답에 추가
1 parent 5da4c28 commit 78de13f

File tree

2 files changed

+20
-1
lines changed

2 files changed

+20
-1
lines changed

src/main/java/com/finsight/finsight/domain/learning/application/dto/response/LearningResponseDTO.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,8 @@ public record NewsDetailResponse(
6161
List<CoreTerm> coreTerms,
6262
String title,
6363
String date,
64+
String thumbnailUrl,
65+
String originalUrl,
6466
Summary3Lines summary3Lines,
6567
String bodySummary,
6668
List<Insight> insights) {

src/main/java/com/finsight/finsight/domain/learning/persistence/mapper/LearningConverter.java

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,9 @@
99
import com.finsight.finsight.domain.ai.persistence.entity.AiArticleInsightEntity;
1010

1111
import java.util.*;
12+
import java.time.LocalDateTime;
13+
import java.time.format.DateTimeFormatter;
14+
import java.util.Locale;
1215

1316
import com.fasterxml.jackson.databind.JsonNode;
1417
import com.fasterxml.jackson.databind.ObjectMapper;
@@ -21,6 +24,10 @@ public class LearningConverter {
2124

2225
private final ObjectMapper objectMapper;
2326

27+
// 한국어 날짜 포맷터: "2026.01.01. 오후 4:51"
28+
private static final DateTimeFormatter KOREAN_DATE_FORMATTER = DateTimeFormatter.ofPattern("yyyy.MM.dd. a h:mm",
29+
Locale.KOREAN);
30+
2431
// 단일 엔티티 -> NewsItem DTO
2532
public static LearningResponseDTO.NewsItem toNewsItem(NaverArticleEntity entity, List<AiTermCardEntity> terms) {
2633
return LearningResponseDTO.NewsItem.builder()
@@ -111,13 +118,23 @@ public LearningResponseDTO.NewsDetailResponse toNewsDetailResponse(
111118
.build())
112119
.toList())
113120
.title(article.getTitle())
114-
.date(article.getPublishedAt().toString())
121+
.date(formatKoreanDate(article.getPublishedAt()))
122+
.thumbnailUrl(article.getThumbnailUrl())
123+
.originalUrl(article.getUrl())
115124
.summary3Lines(parseSummary3Lines(summary.getSummary3Lines()))
116125
.bodySummary(summary.getSummaryFull())
117126
.insights(parseInsights(insight.getInsightJson()))
118127
.build();
119128
}
120129

130+
// LocalDateTime을 한국어 형식 날짜로 변환
131+
private String formatKoreanDate(LocalDateTime dateTime) {
132+
if (dateTime == null) {
133+
return "";
134+
}
135+
return dateTime.format(KOREAN_DATE_FORMATTER);
136+
}
137+
121138
private LearningResponseDTO.Summary3Lines parseSummary3Lines(String rawText) {
122139
if (rawText == null || rawText.isBlank()) {
123140
return LearningResponseDTO.Summary3Lines.builder().build();

0 commit comments

Comments
 (0)