diff --git a/backend/emm-sale/src/documentTest/java/com/emmsale/FeedApiTest.java b/backend/emm-sale/src/documentTest/java/com/emmsale/FeedApiTest.java index cdabf473a..a046b58c5 100644 --- a/backend/emm-sale/src/documentTest/java/com/emmsale/FeedApiTest.java +++ b/backend/emm-sale/src/documentTest/java/com/emmsale/FeedApiTest.java @@ -13,15 +13,11 @@ import static org.springframework.test.web.servlet.result.MockMvcResultHandlers.print; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; -import com.emmsale.feed.application.dto.FeedDetailResponse; -import com.emmsale.feed.application.dto.FeedDetailResponse.WriterProfileResponse; -import com.emmsale.feed.application.dto.FeedListResponse; -import com.emmsale.feed.application.dto.FeedSimpleResponse; +import com.emmsale.feed.application.dto.FeedResponseRefactor; import com.emmsale.feed.application.dto.FeedUpdateRequest; import com.emmsale.feed.application.dto.FeedUpdateResponse; -import java.time.LocalDate; +import com.emmsale.member.application.dto.MemberReferenceResponse; import java.time.LocalDateTime; -import java.time.LocalTime; import java.util.Collections; import java.util.List; import org.junit.jupiter.api.DisplayName; @@ -36,34 +32,53 @@ class FeedApiTest extends MockMvcTestHelper { + private static final MemberReferenceResponse MEMBER_REFERENCE_RESPONSE = new MemberReferenceResponse( + 2L, + "멤버", + "멤버 설명", + "멤버 이미지url", + "멤버 깃허브 url" + ); + private static final ResponseFieldsSnippet FEEDS_RESPONSE_FIELDS = responseFields( + fieldWithPath("[].id").type(JsonFieldType.NUMBER).description("피드 id"), + fieldWithPath("[].eventId").type(JsonFieldType.NUMBER).description("피드가 작성된 부모 이벤트 id"), + fieldWithPath("[].title").type(JsonFieldType.STRING).description("피드 제목"), + fieldWithPath("[].content").type(JsonFieldType.STRING).description("피드 내용"), + fieldWithPath("[].images").type(JsonFieldType.ARRAY).description("피드 이미지 url 리스트"), + fieldWithPath("[].writer.id").type(JsonFieldType.NUMBER).description("writer의 식별자"), + fieldWithPath("[].writer.name").type(JsonFieldType.STRING).description("writer의 이름"), + fieldWithPath("[].writer.description").type(JsonFieldType.STRING) + .description("writer의 한줄 자기소개"), + fieldWithPath("[].writer.imageUrl").type(JsonFieldType.STRING) + .description("writer의 이미지 url"), + fieldWithPath("[].writer.githubUrl").type(JsonFieldType.STRING) + .description("writer의 github Url"), + fieldWithPath("[].commentCount").type(JsonFieldType.NUMBER).description("피드의 댓글 개수"), + fieldWithPath("[].createdAt").type(JsonFieldType.STRING).description("피드 생성 일시"), + fieldWithPath("[].updatedAt").type(JsonFieldType.STRING).description("피드 업데이트 일시") + ); + @Test @DisplayName("이벤트의 피드 목록을 성공적으로 반환하면 200 OK를 반환한다.") void findAllFeedsTest() throws Exception { //given - final ResponseFieldsSnippet responseFields = responseFields( - fieldWithPath("eventId").type(JsonFieldType.NUMBER).description("피드가 작성된 부모 이벤트 id"), - fieldWithPath("feeds").type(JsonFieldType.ARRAY).description("피드 리스트"), - fieldWithPath("feeds[].id").type(JsonFieldType.NUMBER).description("피드 id"), - fieldWithPath("feeds[].title").type(JsonFieldType.STRING).description("피드 제목"), - fieldWithPath("feeds[].content").type(JsonFieldType.STRING).description("피드 내용"), - fieldWithPath("feeds[].images").type(JsonFieldType.ARRAY).description("피드 이미지 url 리스트"), - fieldWithPath("feeds[].writerId").type(JsonFieldType.NUMBER).description("피드 작성자 id"), - fieldWithPath("feeds[].commentCount").type(JsonFieldType.NUMBER).description("피드의 댓글 개수"), - fieldWithPath("feeds[].createdAt").type(JsonFieldType.STRING).description("피드 생성 일시"), - fieldWithPath("feeds[].updatedAt").type(JsonFieldType.STRING).description("피드 업데이트 일시") - ); - final long eventId = 11L; - final List feeds = List.of( - new FeedSimpleResponse(34L, "피드1 제목", "피드 내용", 23L, - List.of("https://image1.url", "https://image2.url"), 0L, - LocalDateTime.of(LocalDate.of(2023, 7, 13), LocalTime.of(11, 43, 11)), - LocalDateTime.of(LocalDate.of(2023, 7, 13), LocalTime.of(11, 43, 11))), - new FeedSimpleResponse(35L, "피드2 제목", "피드 내용", 43L, Collections.emptyList(), 3L, - LocalDateTime.of(LocalDate.of(2023, 7, 22), LocalTime.of(23, 54, 49)), - LocalDateTime.of(LocalDate.of(2023, 7, 22), LocalTime.of(23, 54, 49))) + final List response = List.of( + new FeedResponseRefactor( + 34L, eventId, "피드 1 제목", "피드 1 내용", + MEMBER_REFERENCE_RESPONSE, + Collections.emptyList(), + 2L, + LocalDateTime.of(2023, 7, 13, 0, 0), LocalDateTime.of(2023, 7, 13, 0, 0) + ), + new FeedResponseRefactor( + 35L, eventId, "피드 2 제목", "피드 2 내용", + MEMBER_REFERENCE_RESPONSE, + Collections.emptyList(), + 2L, + LocalDateTime.of(2023, 7, 13, 0, 0), LocalDateTime.of(2023, 7, 13, 0, 0) + ) ); - final FeedListResponse response = new FeedListResponse(eventId, feeds); when(feedQueryService.findAllFeeds(any(), any())).thenReturn(response); @@ -72,7 +87,7 @@ void findAllFeedsTest() throws Exception { .param("event-id", String.valueOf(eventId))) .andExpect(status().isOk()) .andDo(print()) - .andDo(document("find-all-feed", responseFields)); + .andDo(document("find-all-feed", FEEDS_RESPONSE_FIELDS)); } @Test @@ -81,26 +96,33 @@ void findDetailFeedTest() throws Exception { //given final ResponseFieldsSnippet responseFields = responseFields( fieldWithPath("id").type(JsonFieldType.NUMBER).description("피드 id"), - fieldWithPath("eventId").type(JsonFieldType.NUMBER).description("이벤트 id"), - fieldWithPath("writer").type(JsonFieldType.OBJECT).description("작성자"), - fieldWithPath("writer.memberId").type(JsonFieldType.NUMBER).description("작성자 id"), - fieldWithPath("writer.name").type(JsonFieldType.STRING).description("작성자명"), - fieldWithPath("writer.imageUrl").type(JsonFieldType.STRING).description("작성자 이미지 url"), + fieldWithPath("eventId").type(JsonFieldType.NUMBER).description("피드가 작성된 부모 이벤트 id"), fieldWithPath("title").type(JsonFieldType.STRING).description("피드 제목"), fieldWithPath("content").type(JsonFieldType.STRING).description("피드 내용"), fieldWithPath("images").type(JsonFieldType.ARRAY).description("피드 이미지 url 리스트"), + fieldWithPath("writer.id").type(JsonFieldType.NUMBER).description("writer의 식별자"), + fieldWithPath("writer.name").type(JsonFieldType.STRING).description("writer의 이름"), + fieldWithPath("writer.description").type(JsonFieldType.STRING) + .description("writer의 한줄 자기소개"), + fieldWithPath("writer.imageUrl").type(JsonFieldType.STRING) + .description("writer의 이미지 url"), + fieldWithPath("writer.githubUrl").type(JsonFieldType.STRING) + .description("writer의 github Url"), + fieldWithPath("commentCount").type(JsonFieldType.NUMBER).description("피드의 댓글 개수"), fieldWithPath("createdAt").type(JsonFieldType.STRING).description("피드 생성 일시"), fieldWithPath("updatedAt").type(JsonFieldType.STRING).description("피드 업데이트 일시") ); - final long eventId = 11L; final long feedId = 34L; - final WriterProfileResponse writer = new WriterProfileResponse(8L, "작성자명", - "https://member-image.com"); - final FeedDetailResponse response = new FeedDetailResponse(feedId, eventId, writer, "피드 제목", - "피드 상세 내용", List.of("https://image1.url", "https://image2.url"), - LocalDateTime.of(LocalDate.of(2023, 7, 22), LocalTime.of(23, 54, 49)), - LocalDateTime.of(LocalDate.of(2023, 7, 22), LocalTime.of(23, 54, 49))); + + final FeedResponseRefactor response = + new FeedResponseRefactor( + 34L, eventId, "피드 1 제목", "피드 1 내용", + MEMBER_REFERENCE_RESPONSE, + Collections.emptyList(), + 2L, + LocalDateTime.of(2023, 7, 13, 0, 0), LocalDateTime.of(2023, 7, 13, 0, 0) + ); when(feedQueryService.findFeed(any(), any())).thenReturn(response); @@ -115,35 +137,31 @@ void findDetailFeedTest() throws Exception { @DisplayName("자신의 피드 목록을 성공적으로 반환하면 200 OK를 반환한다.") void findAllMyFeedsTest() throws Exception { //given - final ResponseFieldsSnippet responseFields = responseFields( - fieldWithPath("[].id").type(JsonFieldType.NUMBER).description("피드 id"), - fieldWithPath("[].title").type(JsonFieldType.STRING).description("피드 제목"), - fieldWithPath("[].content").type(JsonFieldType.STRING).description("피드 내용"), - fieldWithPath("[].images").type(JsonFieldType.ARRAY).description("피드 이미지 url 리스트"), - fieldWithPath("[].writerId").type(JsonFieldType.NUMBER).description("피드 작성자 id"), - fieldWithPath("[].commentCount").type(JsonFieldType.NUMBER).description("피드의 댓글 개수"), - fieldWithPath("[].createdAt").type(JsonFieldType.STRING).description("피드 생성 일시"), - fieldWithPath("[].updatedAt").type(JsonFieldType.STRING).description("피드 업데이트 일시") - ); - - final List feeds = List.of( - new FeedSimpleResponse(34L, "피드1 제목", "피드 내용", 23L, - List.of("https://image1.url", "https://image2.url"), 0L, - LocalDateTime.of(LocalDate.of(2023, 7, 13), LocalTime.of(11, 43, 11)), - LocalDateTime.of(LocalDate.of(2023, 7, 13), LocalTime.of(11, 43, 11))), - new FeedSimpleResponse(35L, "피드2 제목", "피드 내용", 43L, Collections.emptyList(), 3L, - LocalDateTime.of(LocalDate.of(2023, 7, 22), LocalTime.of(23, 54, 49)), - LocalDateTime.of(LocalDate.of(2023, 7, 22), LocalTime.of(23, 54, 49))) + final List responses = List.of( + new FeedResponseRefactor( + 34L, 2L, "피드 1 제목", "피드 1 내용", + MEMBER_REFERENCE_RESPONSE, + Collections.emptyList(), + 2L, + LocalDateTime.of(2023, 7, 13, 0, 0), LocalDateTime.of(2023, 7, 13, 0, 0) + ), + new FeedResponseRefactor( + 35L, 2L, "피드 2 제목", "피드 2 내용", + MEMBER_REFERENCE_RESPONSE, + Collections.emptyList(), + 2L, + LocalDateTime.of(2023, 7, 13, 0, 0), LocalDateTime.of(2023, 7, 13, 0, 0) + ) ); - when(feedQueryService.findAllMyFeeds(any())).thenReturn(feeds); + when(feedQueryService.findAllMyFeeds(any())).thenReturn(responses); //when & then mockMvc.perform(get("/feeds/my") .header(HttpHeaders.AUTHORIZATION, "Bearer accessToken")) .andExpect(status().isOk()) .andDo(print()) - .andDo(document("find-all-my-feed", responseFields)); + .andDo(document("find-all-my-feed", FEEDS_RESPONSE_FIELDS)); } @Test diff --git a/backend/emm-sale/src/main/java/com/emmsale/feed/api/FeedApi.java b/backend/emm-sale/src/main/java/com/emmsale/feed/api/FeedApi.java index c51638caf..1fc1acaad 100644 --- a/backend/emm-sale/src/main/java/com/emmsale/feed/api/FeedApi.java +++ b/backend/emm-sale/src/main/java/com/emmsale/feed/api/FeedApi.java @@ -3,8 +3,8 @@ import com.emmsale.feed.application.FeedCommandService; import com.emmsale.feed.application.FeedQueryService; import com.emmsale.feed.application.dto.FeedDetailResponse; -import com.emmsale.feed.application.dto.FeedListResponse; import com.emmsale.feed.application.dto.FeedPostRequest; +import com.emmsale.feed.application.dto.FeedResponseRefactor; import com.emmsale.feed.application.dto.FeedSimpleResponse; import com.emmsale.feed.application.dto.FeedUpdateRequest; import com.emmsale.feed.application.dto.FeedUpdateResponse; @@ -34,7 +34,7 @@ public class FeedApi { private final FeedCommandService feedCommandService; @GetMapping - public FeedListResponse findAllFeeds( + public List findAllFeeds( final Member member, @RequestParam("event-id") final Long eventId ) { @@ -42,12 +42,12 @@ public FeedListResponse findAllFeeds( } @GetMapping("/{id}") - public FeedDetailResponse findFeed(final Member member, @PathVariable final Long id) { + public FeedResponseRefactor findFeed(final Member member, @PathVariable final Long id) { return feedQueryService.findFeed(member, id); } @GetMapping("/my") - public List findAllMyFeeds(final Member member) { + public List findAllMyFeeds(final Member member) { return feedQueryService.findAllMyFeeds(member); } diff --git a/backend/emm-sale/src/main/java/com/emmsale/feed/application/FeedQueryService.java b/backend/emm-sale/src/main/java/com/emmsale/feed/application/FeedQueryService.java index d04e05699..201c18537 100644 --- a/backend/emm-sale/src/main/java/com/emmsale/feed/application/FeedQueryService.java +++ b/backend/emm-sale/src/main/java/com/emmsale/feed/application/FeedQueryService.java @@ -1,5 +1,7 @@ package com.emmsale.feed.application; +import static java.util.stream.Collectors.toUnmodifiableList; + import com.emmsale.block.domain.Block; import com.emmsale.block.domain.BlockRepository; import com.emmsale.comment.infrastructure.persistence.CommentDao; @@ -7,9 +9,7 @@ import com.emmsale.event.domain.repository.EventRepository; import com.emmsale.event.exception.EventException; import com.emmsale.event.exception.EventExceptionType; -import com.emmsale.feed.application.dto.FeedDetailResponse; -import com.emmsale.feed.application.dto.FeedListResponse; -import com.emmsale.feed.application.dto.FeedSimpleResponse; +import com.emmsale.feed.application.dto.FeedResponseRefactor; import com.emmsale.feed.domain.Feed; import com.emmsale.feed.domain.repository.FeedRepository; import com.emmsale.feed.exception.FeedException; @@ -40,32 +40,17 @@ public class FeedQueryService { private final ImageRepository imageRepository; private final CommentDao commentDao; - public FeedListResponse findAllFeeds(final Member member, final Long eventId) { + public List findAllFeeds(final Member member, final Long eventId) { validateEvent(eventId); - final List feeds = excludeBlockedMembersFeed(member, - feedRepository.findAllByEventIdAndNotDeleted(eventId)); - final List feedIds = feeds.stream() - .map(Feed::getId) - .collect(Collectors.toList()); - - final Map feedCommentCounts = getFeedIdCommentCountMap(feedIds); - final Map> feedImages = getFeedImagesMap(feedIds); - - final List feedSimpleResponses = feeds.stream() - .map(feed -> { - final List images = feedImages.getOrDefault(feed.getId(), Collections.emptyList()); - final Long commentCount = feedCommentCounts.getOrDefault(feed.getId(), - DEFAULT_COMMENT_COUNT); - return FeedSimpleResponse.from(feed, images, commentCount); - }) - .collect(Collectors.toList()); - - return new FeedListResponse(eventId, feedSimpleResponses); + final List feeds = feedRepository.findAllByEventIdAndNotDeleted(eventId); + final List filteredFeeds = excludeBlockedMembersFeed(member, feeds); + return createFeedResponses(filteredFeeds); } private Map> getFeedImagesMap(final List feedIds) { - final Map> feedImagesMap = imageRepository.findAllByFeedIdIn(feedIds).stream() + final Map> feedImagesMap = imageRepository.findAllByFeedIdIn(feedIds) + .stream() .collect(Collectors.groupingBy( Image::getContentId, Collectors.mapping( @@ -105,16 +90,16 @@ private List getBlockedMemberIds(final Member member) { .collect(Collectors.toList()); } - public FeedDetailResponse findFeed(final Member member, final Long id) { - final Feed feed = feedRepository.findById(id) - .orElseThrow(() -> new FeedException(FeedExceptionType.NOT_FOUND_FEED)); + public FeedResponseRefactor findFeed(final Member member, final Long id) { + final Feed feed = feedRepository.getByIdOrThrow(id); final List images = imageRepository.findAllByFeedId(feed.getId()); images.sort(Comparator.comparing(Image::getOrder)); validateBlockedMemberFeed(member, feed); validateDeletedFeed(feed); - return FeedDetailResponse.from(feed, images); + //이 부분은 안드분들과 이야기를 해봐야할 듯 실질적으로 쓰지 않는 값 + return FeedResponseRefactor.of(feed, images, 0L); } private void validateBlockedMemberFeed(final Member member, final Feed feed) { @@ -136,9 +121,13 @@ private void validateDeletedFeed(final Feed feed) { } } - public List findAllMyFeeds(final Member member) { + public List findAllMyFeeds(final Member member) { final List feeds = feedRepository.findByMember(member); + return createFeedResponses(feeds); + } + + private List createFeedResponses(List feeds) { final List feedIds = feeds.stream() .map(Feed::getId) .collect(Collectors.toList()); @@ -151,8 +140,8 @@ public List findAllMyFeeds(final Member member) { final List images = feedImages.getOrDefault(feed.getId(), Collections.emptyList()); final Long commentCount = feedCommentCounts.getOrDefault(feed.getId(), DEFAULT_COMMENT_COUNT); - return FeedSimpleResponse.from(feed, images, commentCount); + return FeedResponseRefactor.of(feed, images, commentCount); }) - .collect(Collectors.toList()); + .collect(toUnmodifiableList()); } } diff --git a/backend/emm-sale/src/main/java/com/emmsale/feed/application/dto/FeedListResponse.java b/backend/emm-sale/src/main/java/com/emmsale/feed/application/dto/FeedListResponse.java deleted file mode 100644 index 6322d243d..000000000 --- a/backend/emm-sale/src/main/java/com/emmsale/feed/application/dto/FeedListResponse.java +++ /dev/null @@ -1,13 +0,0 @@ -package com.emmsale.feed.application.dto; - -import java.util.List; -import lombok.Getter; -import lombok.RequiredArgsConstructor; - -@Getter -@RequiredArgsConstructor -public class FeedListResponse { - - private final Long eventId; - private final List feeds; -} diff --git a/backend/emm-sale/src/main/java/com/emmsale/feed/application/dto/FeedResponseRefactor.java b/backend/emm-sale/src/main/java/com/emmsale/feed/application/dto/FeedResponseRefactor.java new file mode 100644 index 000000000..42274eedd --- /dev/null +++ b/backend/emm-sale/src/main/java/com/emmsale/feed/application/dto/FeedResponseRefactor.java @@ -0,0 +1,53 @@ +package com.emmsale.feed.application.dto; + +import static java.util.stream.Collectors.toUnmodifiableList; + +import com.emmsale.feed.domain.Feed; +import com.emmsale.image.domain.Image; +import com.emmsale.member.application.dto.MemberReferenceResponse; +import com.fasterxml.jackson.annotation.JsonFormat; +import java.time.LocalDateTime; +import java.util.List; +import lombok.Getter; +import lombok.RequiredArgsConstructor; + +@RequiredArgsConstructor +@Getter +public class FeedResponseRefactor { + + private static final String DATE_TIME_FORMAT = "yyyy:MM:dd:HH:mm:ss"; + + private final Long id; + private final Long eventId; + private final String title; + private final String content; + private final MemberReferenceResponse writer; + private final List images; + private final Long commentCount; + @JsonFormat(pattern = DATE_TIME_FORMAT) + private final LocalDateTime createdAt; + @JsonFormat(pattern = DATE_TIME_FORMAT) + private final LocalDateTime updatedAt; + + public static FeedResponseRefactor of( + final Feed feed, + final List images, + final Long commentCount + ) { + final List imageUrls = images.stream() + .map(Image::getName) + .collect(toUnmodifiableList()); + + return new FeedResponseRefactor( + feed.getId(), + feed.getEvent().getId(), + feed.getTitle(), + feed.getContent(), + MemberReferenceResponse.from(feed.getWriter()), + imageUrls, + commentCount, + feed.getCreatedAt(), + feed.getUpdatedAt() + ); + } +} diff --git a/backend/emm-sale/src/main/java/com/emmsale/feed/domain/Feed.java b/backend/emm-sale/src/main/java/com/emmsale/feed/domain/Feed.java index 5942488ce..4b9a18cfb 100644 --- a/backend/emm-sale/src/main/java/com/emmsale/feed/domain/Feed.java +++ b/backend/emm-sale/src/main/java/com/emmsale/feed/domain/Feed.java @@ -16,10 +16,12 @@ import lombok.AccessLevel; import lombok.Getter; import lombok.NoArgsConstructor; +import lombok.ToString; @Entity @Getter @NoArgsConstructor(access = AccessLevel.PROTECTED) +@ToString public class Feed extends BaseEntity { @Id diff --git a/backend/emm-sale/src/main/java/com/emmsale/feed/domain/repository/FeedRepository.java b/backend/emm-sale/src/main/java/com/emmsale/feed/domain/repository/FeedRepository.java index 0dc8b0bb5..c60236c2f 100644 --- a/backend/emm-sale/src/main/java/com/emmsale/feed/domain/repository/FeedRepository.java +++ b/backend/emm-sale/src/main/java/com/emmsale/feed/domain/repository/FeedRepository.java @@ -1,6 +1,9 @@ package com.emmsale.feed.domain.repository; +import static com.emmsale.feed.exception.FeedExceptionType.NOT_FOUND_FEED; + import com.emmsale.feed.domain.Feed; +import com.emmsale.feed.exception.FeedException; import com.emmsale.member.domain.Member; import java.util.List; import org.springframework.data.jpa.repository.JpaRepository; @@ -10,9 +13,17 @@ @Repository public interface FeedRepository extends JpaRepository { - @Query("select f from Feed f where f.event.id = :eventId and f.isDeleted = false") - List findAllByEventIdAndNotDeleted(Long eventId); + @Query("select f " + + "from Feed f " + + "join fetch f.writer w " + + "where f.event.id = :eventId " + + "and f.isDeleted = false") + List findAllByEventIdAndNotDeleted(final Long eventId); @Query("select f from Feed f where f.writer = :member and f.isDeleted = false") List findByMember(Member member); + + default Feed getByIdOrThrow(final Long id) { + return findById(id).orElseThrow(() -> new FeedException(NOT_FOUND_FEED)); + } } diff --git a/backend/emm-sale/src/test/java/com/emmsale/feed/application/FeedQueryServiceTest.java b/backend/emm-sale/src/test/java/com/emmsale/feed/application/FeedQueryServiceTest.java index b257d446d..8ebbaf051 100644 --- a/backend/emm-sale/src/test/java/com/emmsale/feed/application/FeedQueryServiceTest.java +++ b/backend/emm-sale/src/test/java/com/emmsale/feed/application/FeedQueryServiceTest.java @@ -11,9 +11,7 @@ import com.emmsale.event.domain.repository.EventRepository; import com.emmsale.event.exception.EventException; import com.emmsale.event.exception.EventExceptionType; -import com.emmsale.feed.application.dto.FeedDetailResponse; -import com.emmsale.feed.application.dto.FeedListResponse; -import com.emmsale.feed.application.dto.FeedSimpleResponse; +import com.emmsale.feed.application.dto.FeedResponseRefactor; import com.emmsale.feed.domain.Feed; import com.emmsale.feed.domain.repository.FeedRepository; import com.emmsale.feed.exception.FeedException; @@ -73,15 +71,13 @@ void findAllFeedsTest() { //given final Long eventId = event.getId(); - final List feedSimpleResponses = List.of( - FeedSimpleResponse.from(feed1, Collections.emptyList(), 0L), - FeedSimpleResponse.from(feed2, Collections.emptyList(), 0L) + final List expect = List.of( + FeedResponseRefactor.of(feed1, Collections.emptyList(), 0L), + FeedResponseRefactor.of(feed2, Collections.emptyList(), 0L) ); - final FeedListResponse expect = new FeedListResponse(eventId, feedSimpleResponses); - //when - final FeedListResponse actual = feedQueryService.findAllFeeds(writer, eventId); + final List actual = feedQueryService.findAllFeeds(writer, eventId); //then assertThat(actual) @@ -97,13 +93,12 @@ void findAllFeedsWithWithDeletedFeedTest() { feedRepository.save(feed1); final Long eventId = event.getId(); - final List feedSimpleResponses = List.of( - FeedSimpleResponse.from(feed2, Collections.emptyList(), 0L) + final List expect = List.of( + FeedResponseRefactor.of(feed2, Collections.emptyList(), 0L) ); - final FeedListResponse expect = new FeedListResponse(eventId, feedSimpleResponses); //when - final FeedListResponse actual = feedQueryService.findAllFeeds(writer, eventId); + final List actual = feedQueryService.findAllFeeds(writer, eventId); //then assertThat(actual) @@ -135,13 +130,12 @@ void findAllFeedsWithBlockedMember() { final Feed feed3 = feedRepository.save(new Feed(event, reader, "피드3 제목", "피드3 내용")); blockRepository.save(new Block(reader.getId(), writer.getId())); - final List feedSimpleResponses = List.of( - FeedSimpleResponse.from(feed3, Collections.emptyList(), 0L) + final List expect = List.of( + FeedResponseRefactor.of(feed3, Collections.emptyList(), 0L) ); - final FeedListResponse expect = new FeedListResponse(event.getId(), feedSimpleResponses); - //when - final FeedListResponse actual = feedQueryService.findAllFeeds(reader, event.getId()); + final List actual = feedQueryService + .findAllFeeds(reader, event.getId()); //then assertThat(actual) @@ -155,11 +149,11 @@ void findAllFeedsWithNotExistFeed() { //given final Event noFeedEvent = eventRepository.save(EventFixture.구름톤()); - final FeedListResponse expect = new FeedListResponse(noFeedEvent.getId(), - Collections.emptyList()); + final List expect = Collections.emptyList(); //when - final FeedListResponse actual = feedQueryService.findAllFeeds(writer, noFeedEvent.getId()); + final List actual + = feedQueryService.findAllFeeds(writer, noFeedEvent.getId()); //then assertThat(actual) @@ -179,10 +173,11 @@ void findFeedTest() { final Feed feed = feed1; final Long feedId = feed.getId(); - final FeedDetailResponse expect = FeedDetailResponse.from(feed, Collections.emptyList()); + final FeedResponseRefactor expect = FeedResponseRefactor.of(feed, Collections.emptyList(), + 0L); //when - final FeedDetailResponse actual = feedQueryService.findFeed(writer, feedId); + final FeedResponseRefactor actual = feedQueryService.findFeed(writer, feedId); //then assertThat(actual) @@ -238,13 +233,13 @@ class FindAllMy { @DisplayName("자신이 작성한 모든 피드를 조회한다.") void findAllFeedsTest() { //given - final List expect = List.of( - FeedSimpleResponse.from(feed1, Collections.emptyList(), 0L), - FeedSimpleResponse.from(feed2, Collections.emptyList(), 0L) + final List expect = List.of( + FeedResponseRefactor.of(feed1, Collections.emptyList(), 0L), + FeedResponseRefactor.of(feed2, Collections.emptyList(), 0L) ); //when - final List actual = feedQueryService.findAllMyFeeds(writer); + final List actual = feedQueryService.findAllMyFeeds(writer); //then assertThat(actual) @@ -259,12 +254,12 @@ void findAllFeedsWithWithDeletedFeedTest() { feed1.delete(); feedRepository.save(feed1); - final List expect = List.of( - FeedSimpleResponse.from(feed2, Collections.emptyList(), 0L) + final List expect = List.of( + FeedResponseRefactor.of(feed2, Collections.emptyList(), 0L) ); //when - final List actual = feedQueryService.findAllMyFeeds(writer); + final List actual = feedQueryService.findAllMyFeeds(writer); //then assertThat(actual) @@ -298,15 +293,13 @@ void findAllFeedsWithImages() { //given final Long eventId = event.getId(); - final List feedSimpleResponses = List.of( - FeedSimpleResponse.from(feed1, images, 0L), - FeedSimpleResponse.from(feed2, Collections.emptyList(), 0L) + final List expect = List.of( + FeedResponseRefactor.of(feed1, images, 0L), + FeedResponseRefactor.of(feed2, Collections.emptyList(), 0L) ); - final FeedListResponse expect = new FeedListResponse(eventId, feedSimpleResponses); - //when - final FeedListResponse actual = feedQueryService.findAllFeeds(writer, eventId); + final List actual = feedQueryService.findAllMyFeeds(writer); //then assertThat(actual) @@ -318,10 +311,10 @@ void findAllFeedsWithImages() { @DisplayName("피드에 이미지가 있을 경우 피드 목록에서 이미지 리스트를 order순으로 정렬하여 함께 반환한다.") void findDetailFeedWithImages() { //given - final FeedDetailResponse expect = FeedDetailResponse.from(feed1, images); + final FeedResponseRefactor expect = FeedResponseRefactor.of(feed1, images, 0L); //when - final FeedDetailResponse actual = feedQueryService.findFeed(writer, feed1.getId()); + final FeedResponseRefactor actual = feedQueryService.findFeed(writer, feed1.getId()); //then assertThat(actual)