Skip to content

Commit 0d87c96

Browse files
committed
feat: 해시태그를 리스트로 변경한다
1 parent 2c979e3 commit 0d87c96

File tree

6 files changed

+112
-22
lines changed

6 files changed

+112
-22
lines changed

src/main/java/spring/memewikibe/api/controller/meme/response/MemeDetailResponse.java

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
11
package spring.memewikibe.api.controller.meme.response;
22

3+
import spring.memewikibe.common.util.HashtagParser;
4+
import spring.memewikibe.domain.meme.Meme;
5+
36
import java.util.List;
47
import java.util.Objects;
58

@@ -10,9 +13,21 @@ public record MemeDetailResponse(
1013
String origin,
1114
String trendPeriod,
1215
String imgUrl,
13-
String hashtags
16+
List<String> hashtags
1417
) {
1518
public MemeDetailResponse {
1619
Objects.requireNonNull(title, "제목은 필수입니다.");
1720
}
21+
22+
public static MemeDetailResponse from(Meme meme) {
23+
return new MemeDetailResponse(
24+
meme.getId(),
25+
meme.getTitle(),
26+
meme.getUsageContext(),
27+
meme.getOrigin(),
28+
meme.getTrendPeriod(),
29+
meme.getImgUrl(),
30+
HashtagParser.parseHashtags(meme.getHashtags())
31+
);
32+
}
1833
}

src/main/java/spring/memewikibe/application/MemeLookUpServiceImpl.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -76,13 +76,13 @@ public MemeDetailResponse getMemeById(Long id) {
7676

7777
eventPublisher.publishEvent(new MemeViewedEvent(id));
7878

79-
return new MemeDetailResponse(meme.getId(), meme.getTitle(), meme.getUsageContext(), meme.getOrigin(), meme.getTrendPeriod(), meme.getImgUrl(), meme.getHashtags());
79+
return MemeDetailResponse.from(meme);
8080
}
8181

8282
private PageResponse<Cursor, MemeDetailResponse> createPageResponseBy(List<Meme> memes, int limit) {
8383
Cursor cursor = Cursor.of(memes, limit);
8484
List<MemeDetailResponse> response = memes.stream()
85-
.map(it -> new MemeDetailResponse(it.getId(), it.getTitle(), it.getUsageContext(), it.getOrigin(), it.getTrendPeriod(), it.getImgUrl(), it.getHashtags()))
85+
.map(MemeDetailResponse::from)
8686
.limit(limit)
8787
.toList();
8888
return PageResponse.cursor(cursor, response);
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
package spring.memewikibe.common.util;
2+
3+
import com.fasterxml.jackson.core.JsonProcessingException;
4+
import com.fasterxml.jackson.core.type.TypeReference;
5+
import com.fasterxml.jackson.databind.ObjectMapper;
6+
7+
import java.util.Collections;
8+
import java.util.List;
9+
10+
public class HashtagParser {
11+
private static final ObjectMapper objectMapper = new ObjectMapper();
12+
13+
public static List<String> parseHashtags(String hashtagsJson) {
14+
if (hashtagsJson == null || hashtagsJson.trim().isEmpty()) {
15+
return Collections.emptyList();
16+
}
17+
18+
try {
19+
return objectMapper.readValue(hashtagsJson, new TypeReference<>() {
20+
});
21+
} catch (JsonProcessingException e) {
22+
return Collections.emptyList();
23+
}
24+
}
25+
}

0 commit comments

Comments
 (0)