From b78ad70c50a0511e116b913837bf3aa74bd4f503 Mon Sep 17 00:00:00 2001 From: ybchar Date: Mon, 14 Oct 2024 22:56:09 +0900 Subject: [PATCH 1/2] =?UTF-8?q?feat:=20v2=20=EC=97=94=EB=93=9C=20=ED=8F=AC?= =?UTF-8?q?=EC=9D=B8=ED=8A=B8=20=EB=B0=8F=20=EB=AA=A8=EB=8D=B8=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../domain/feed/api/FeedController.java | 11 +++++- .../domain/feed/application/FeedService.java | 21 ++++++++++- .../{ => v1}/FeedContentGetResponse.java | 2 +- .../response/{ => v1}/FeedGetResponse.java | 2 +- .../response/v2/FeedContentGetResponseV2.java | 37 +++++++++++++++++++ .../dto/response/v2/FeedGetResponseV2.java | 12 ++++++ .../feed/application/FeedServiceTest.java | 2 +- 7 files changed, 80 insertions(+), 7 deletions(-) rename src/main/java/com/depromeet/stonebed/domain/feed/dto/response/{ => v1}/FeedContentGetResponse.java (97%) rename src/main/java/com/depromeet/stonebed/domain/feed/dto/response/{ => v1}/FeedGetResponse.java (86%) create mode 100644 src/main/java/com/depromeet/stonebed/domain/feed/dto/response/v2/FeedContentGetResponseV2.java create mode 100644 src/main/java/com/depromeet/stonebed/domain/feed/dto/response/v2/FeedGetResponseV2.java diff --git a/src/main/java/com/depromeet/stonebed/domain/feed/api/FeedController.java b/src/main/java/com/depromeet/stonebed/domain/feed/api/FeedController.java index 67f356a2..6179ab1e 100644 --- a/src/main/java/com/depromeet/stonebed/domain/feed/api/FeedController.java +++ b/src/main/java/com/depromeet/stonebed/domain/feed/api/FeedController.java @@ -2,8 +2,9 @@ import com.depromeet.stonebed.domain.feed.application.FeedService; import com.depromeet.stonebed.domain.feed.dto.request.FeedGetRequest; -import com.depromeet.stonebed.domain.feed.dto.response.FeedContentGetResponse; -import com.depromeet.stonebed.domain.feed.dto.response.FeedGetResponse; +import com.depromeet.stonebed.domain.feed.dto.response.v1.FeedContentGetResponse; +import com.depromeet.stonebed.domain.feed.dto.response.v1.FeedGetResponse; +import com.depromeet.stonebed.domain.feed.dto.response.v2.FeedGetResponseV2; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; import jakarta.validation.Valid; @@ -23,6 +24,12 @@ public FeedGetResponse feedFind(@Valid FeedGetRequest request) { return feedService.findFeed(request); } + @Operation(summary = "피드 조회", description = "내 피드를 조회하는 API입니다.") + @GetMapping("/v2") + public FeedGetResponseV2 feedFindV2(@Valid FeedGetRequest request) { + return feedService.findFeedV2(request); + } + @Operation(summary = "단일 피드 조회", description = "단일 피드를 조회하는 API입니다.") @GetMapping("/{recordId}") public FeedContentGetResponse feedFindOne(@PathVariable Long recordId) { diff --git a/src/main/java/com/depromeet/stonebed/domain/feed/application/FeedService.java b/src/main/java/com/depromeet/stonebed/domain/feed/application/FeedService.java index 371ad318..47a2d22c 100644 --- a/src/main/java/com/depromeet/stonebed/domain/feed/application/FeedService.java +++ b/src/main/java/com/depromeet/stonebed/domain/feed/application/FeedService.java @@ -3,8 +3,10 @@ import com.depromeet.stonebed.domain.feed.dao.FeedRepository; import com.depromeet.stonebed.domain.feed.dto.FindFeedDto; import com.depromeet.stonebed.domain.feed.dto.request.FeedGetRequest; -import com.depromeet.stonebed.domain.feed.dto.response.FeedContentGetResponse; -import com.depromeet.stonebed.domain.feed.dto.response.FeedGetResponse; +import com.depromeet.stonebed.domain.feed.dto.response.v1.FeedContentGetResponse; +import com.depromeet.stonebed.domain.feed.dto.response.v1.FeedGetResponse; +import com.depromeet.stonebed.domain.feed.dto.response.v2.FeedContentGetResponseV2; +import com.depromeet.stonebed.domain.feed.dto.response.v2.FeedGetResponseV2; import com.depromeet.stonebed.global.error.ErrorCode; import com.depromeet.stonebed.global.error.exception.CustomException; import java.util.List; @@ -83,4 +85,19 @@ public FeedContentGetResponse findFeedOne(Long recordId) { } return FeedContentGetResponse.from(feedOne); } + + public FeedGetResponseV2 findFeedV2(FeedGetRequest request) { + List feeds = getFeeds(request.cursor(), request.memberId(), request.limit()); + + List feedContentList = + feeds.stream().map(FeedContentGetResponseV2::from).toList(); + + String nextCursor = getNextCursor(feeds, request.limit()); + + if (nextFeedNotExists(feeds, request.memberId())) { + nextCursor = null; + } + + return FeedGetResponseV2.from(feedContentList, nextCursor); + } } diff --git a/src/main/java/com/depromeet/stonebed/domain/feed/dto/response/FeedContentGetResponse.java b/src/main/java/com/depromeet/stonebed/domain/feed/dto/response/v1/FeedContentGetResponse.java similarity index 97% rename from src/main/java/com/depromeet/stonebed/domain/feed/dto/response/FeedContentGetResponse.java rename to src/main/java/com/depromeet/stonebed/domain/feed/dto/response/v1/FeedContentGetResponse.java index b5165147..e572059e 100644 --- a/src/main/java/com/depromeet/stonebed/domain/feed/dto/response/FeedContentGetResponse.java +++ b/src/main/java/com/depromeet/stonebed/domain/feed/dto/response/v1/FeedContentGetResponse.java @@ -1,4 +1,4 @@ -package com.depromeet.stonebed.domain.feed.dto.response; +package com.depromeet.stonebed.domain.feed.dto.response.v1; import com.depromeet.stonebed.domain.feed.dto.FindFeedDto; import io.swagger.v3.oas.annotations.media.Schema; diff --git a/src/main/java/com/depromeet/stonebed/domain/feed/dto/response/FeedGetResponse.java b/src/main/java/com/depromeet/stonebed/domain/feed/dto/response/v1/FeedGetResponse.java similarity index 86% rename from src/main/java/com/depromeet/stonebed/domain/feed/dto/response/FeedGetResponse.java rename to src/main/java/com/depromeet/stonebed/domain/feed/dto/response/v1/FeedGetResponse.java index 527c47a6..cfd08916 100644 --- a/src/main/java/com/depromeet/stonebed/domain/feed/dto/response/FeedGetResponse.java +++ b/src/main/java/com/depromeet/stonebed/domain/feed/dto/response/v1/FeedGetResponse.java @@ -1,4 +1,4 @@ -package com.depromeet.stonebed.domain.feed.dto.response; +package com.depromeet.stonebed.domain.feed.dto.response.v1; import io.swagger.v3.oas.annotations.media.Schema; import java.util.List; diff --git a/src/main/java/com/depromeet/stonebed/domain/feed/dto/response/v2/FeedContentGetResponseV2.java b/src/main/java/com/depromeet/stonebed/domain/feed/dto/response/v2/FeedContentGetResponseV2.java new file mode 100644 index 00000000..01bbf99a --- /dev/null +++ b/src/main/java/com/depromeet/stonebed/domain/feed/dto/response/v2/FeedContentGetResponseV2.java @@ -0,0 +1,37 @@ +package com.depromeet.stonebed.domain.feed.dto.response.v2; + +import com.depromeet.stonebed.domain.feed.dto.FindFeedDto; +import io.swagger.v3.oas.annotations.media.Schema; +import java.time.LocalDate; + +public record FeedContentGetResponseV2( + @Schema(description = "미션 ID", example = "1") Long missionId, + @Schema(description = "미션 제목", example = "산책하기") String missionTitle, + @Schema(description = "미션 완료 메시지", example = "산책하기 미션을 수행했어요!") + String missionCompleteMessage, + @Schema(description = "미션 기록 ID", example = "1") Long missionRecordId, + @Schema(description = "작성자 ID", example = "1") Long authorId, + @Schema(description = "작성자 프로필 닉네임") String authorProfileNickname, + @Schema(description = "작성자 프로필 이미지 URL") String authorProfileImageUrl, + @Schema(description = "미션 기록 이미지 URL", example = "example.jpeg") + String missionRecordImageUrl, + @Schema(description = "미션 기록 생성일") LocalDate createdDate, + @Schema(description = "부스트") Long totalBoostCount, + @Schema(description = "댓글 수", example = "12") Integer totalCommentCount, + @Schema(description = "미션 기록 컨텐츠") String content) { + public static FeedContentGetResponseV2 from(FindFeedDto missionRecord) { + return new FeedContentGetResponseV2( + missionRecord.mission().getId(), + missionRecord.mission().getTitle(), + missionRecord.mission().getCompleteMessage(), + missionRecord.missionRecord().getId(), + missionRecord.author().getId(), + missionRecord.author().getProfile().getNickname(), + missionRecord.author().getProfile().getProfileImageUrl(), + missionRecord.missionRecord().getImageUrl(), + missionRecord.missionRecord().getCreatedAt().toLocalDate(), + missionRecord.totalBoostCount(), + missionRecord.totalCommentCount(), + missionRecord.missionRecord().getContent()); + } +} diff --git a/src/main/java/com/depromeet/stonebed/domain/feed/dto/response/v2/FeedGetResponseV2.java b/src/main/java/com/depromeet/stonebed/domain/feed/dto/response/v2/FeedGetResponseV2.java new file mode 100644 index 00000000..6fbc7470 --- /dev/null +++ b/src/main/java/com/depromeet/stonebed/domain/feed/dto/response/v2/FeedGetResponseV2.java @@ -0,0 +1,12 @@ +package com.depromeet.stonebed.domain.feed.dto.response.v2; + +import io.swagger.v3.oas.annotations.media.Schema; +import java.util.List; + +public record FeedGetResponseV2( + List list, + @Schema(description = "커서 위치", example = "1") String nextCursor) { + public static FeedGetResponseV2 from(List list, String nextCursor) { + return new FeedGetResponseV2(list, nextCursor); + } +} diff --git a/src/test/java/com/depromeet/stonebed/domain/feed/application/FeedServiceTest.java b/src/test/java/com/depromeet/stonebed/domain/feed/application/FeedServiceTest.java index 41dff0eb..636a3f77 100644 --- a/src/test/java/com/depromeet/stonebed/domain/feed/application/FeedServiceTest.java +++ b/src/test/java/com/depromeet/stonebed/domain/feed/application/FeedServiceTest.java @@ -8,7 +8,7 @@ import com.depromeet.stonebed.domain.feed.dao.FeedRepository; import com.depromeet.stonebed.domain.feed.dto.FindFeedDto; import com.depromeet.stonebed.domain.feed.dto.request.FeedGetRequest; -import com.depromeet.stonebed.domain.feed.dto.response.FeedGetResponse; +import com.depromeet.stonebed.domain.feed.dto.response.v1.FeedGetResponse; import com.depromeet.stonebed.domain.member.domain.Member; import com.depromeet.stonebed.domain.mission.domain.Mission; import com.depromeet.stonebed.domain.missionRecord.domain.MissionRecord; From ab0fb52463c4b981cbe51ed14732ec7bed6b53ce Mon Sep 17 00:00:00 2001 From: ybchar Date: Tue, 15 Oct 2024 10:54:24 +0900 Subject: [PATCH 2/2] =?UTF-8?q?fix:=20totalCommentCount=20v1=20=EC=82=AD?= =?UTF-8?q?=EC=A0=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../domain/feed/dto/response/v1/FeedContentGetResponse.java | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/main/java/com/depromeet/stonebed/domain/feed/dto/response/v1/FeedContentGetResponse.java b/src/main/java/com/depromeet/stonebed/domain/feed/dto/response/v1/FeedContentGetResponse.java index e572059e..00427e1d 100644 --- a/src/main/java/com/depromeet/stonebed/domain/feed/dto/response/v1/FeedContentGetResponse.java +++ b/src/main/java/com/depromeet/stonebed/domain/feed/dto/response/v1/FeedContentGetResponse.java @@ -17,7 +17,6 @@ public record FeedContentGetResponse( String missionRecordImageUrl, @Schema(description = "미션 기록 생성일") LocalDate createdDate, @Schema(description = "부스트") Long totalBoostCount, - @Schema(description = "댓글 수", example = "12") Integer totalCommentCount, @Schema(description = "미션 기록 컨텐츠") String content) { public static FeedContentGetResponse from(FindFeedDto missionRecord) { return new FeedContentGetResponse( @@ -31,7 +30,6 @@ public static FeedContentGetResponse from(FindFeedDto missionRecord) { missionRecord.missionRecord().getImageUrl(), missionRecord.missionRecord().getCreatedAt().toLocalDate(), missionRecord.totalBoostCount(), - missionRecord.totalCommentCount(), missionRecord.missionRecord().getContent()); } }