Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 14 additions & 0 deletions src/main/java/com/daramg/server/post/dto/PostResponseDto.java
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ public record PostResponseDto(
String thumbnailImageUrl,
PostType type,
ComposerSummary primaryComposer,
List<ComposerSummary> additionalComposers,
Boolean isLiked,
Boolean isScrapped
) {
Expand All @@ -36,6 +37,7 @@ public static PostResponseDto from(Post post, Boolean isLiked, Boolean isScrappe
List<String> imageUrls = post.getImages();
PostType type = getPostType(post);
ComposerSummary primaryComposer = extractPrimaryComposer(post);
List<ComposerSummary> additionalComposers = extractAdditionalComposers(post);
return new PostResponseDto(
post.getId(),
post.getTitle(),
Expand All @@ -48,6 +50,7 @@ public static PostResponseDto from(Post post, Boolean isLiked, Boolean isScrappe
imageUrls.isEmpty() ? null : imageUrls.getFirst(),
type,
primaryComposer,
additionalComposers,
isLiked,
isScrapped
);
Expand Down Expand Up @@ -79,6 +82,17 @@ public static ComposerSummary from(Composer composer) {
}
}

private static List<ComposerSummary> extractAdditionalComposers(Post post) {
if (post instanceof CurationPost curationPost
&& curationPost.getAdditionalComposers() != null
&& !curationPost.getAdditionalComposers().isEmpty()) {
return curationPost.getAdditionalComposers().stream()
.map(ComposerSummary::from)
.toList();
}
return null;

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

extractAdditionalComposers 메서드에서 additionalComposers가 없는 경우 null을 반환하고 있습니다. 컬렉션 타입의 필드는 null 대신 빈 리스트(Collections.emptyList())를 반환하는 것이 더 안전하고 일관된 API 디자인입니다. 이는 클라이언트 코드에서 NullPointerException을 방지하고 추가적인 null 체크 로직을 줄일 수 있습니다.

Suggested change
return null;
return Collections.emptyList();

}

private static PostType getPostType(Post post) {
if (post instanceof StoryPost) {
return PostType.STORY;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -109,6 +109,7 @@ public class ComposerQueryControllerTest extends ControllerTestSupport {
"https://example.com/image1.jpg",
PostType.STORY,
null,
null,
true,
false
);
Expand All @@ -125,6 +126,7 @@ public class ComposerQueryControllerTest extends ControllerTestSupport {
null,
PostType.CURATION,
null,
null,
false,
true
);
Expand Down Expand Up @@ -191,6 +193,11 @@ public class ComposerQueryControllerTest extends ControllerTestSupport {
fieldWithPath("posts.content[].primaryComposer.koreanName").type(JsonFieldType.STRING).description("작곡가 한글 이름").optional(),
fieldWithPath("posts.content[].primaryComposer.era").type(JsonFieldType.STRING).description("작곡가 시대 (Era)").optional(),
fieldWithPath("posts.content[].primaryComposer.continent").type(JsonFieldType.STRING).description("작곡가 대륙 (Continent)").optional(),
fieldWithPath("posts.content[].additionalComposers").type(JsonFieldType.ARRAY).description("추가 작곡가 목록 (CURATION 타입일 때만 존재)").optional(),
fieldWithPath("posts.content[].additionalComposers[].id").type(JsonFieldType.NUMBER).description("추가 작곡가 ID").optional(),
fieldWithPath("posts.content[].additionalComposers[].koreanName").type(JsonFieldType.STRING).description("추가 작곡가 한글 이름").optional(),
fieldWithPath("posts.content[].additionalComposers[].era").type(JsonFieldType.STRING).description("추가 작곡가 시대 (Era)").optional(),
fieldWithPath("posts.content[].additionalComposers[].continent").type(JsonFieldType.STRING).description("추가 작곡가 대륙 (Continent)").optional(),
fieldWithPath("posts.content[].isLiked").type(JsonFieldType.BOOLEAN).description("로그인한 유저의 좋아요 여부 (비로그인 시 null)").optional(),
fieldWithPath("posts.content[].isScrapped").type(JsonFieldType.BOOLEAN).description("로그인한 유저의 스크랩 여부 (비로그인 시 null)").optional(),
fieldWithPath("posts.nextCursor").type(JsonFieldType.STRING).description("다음 페이지 조회를 위한 커서 (Base64 인코딩된 문자열). 마지막 페이지인 경우 null").optional(),
Expand Down
Loading
Loading